是否可以在SQL Server中创建只读同义词



我们有两个不同的数据库DB1和DB2,其中DB2中的表引用DB1中的表。

我们正在研究在DB2中使用具有只读访问权限的SYNONYMS的可能性,并使用EntityFramework将这些SYNONYMS称为DB2中的表。

由于目前EF不跨越多个数据库,阅读本文后(http://rachel53461.wordpress.com/2011/05/22/tricking-ef-to-span-multiple-databases/)我们领先了一步,但是,我们只想对新创建的SYNONYMS进行只读访问。

非常感谢您的帮助!

您可以为同义词创建一个架构(例如"EntityFramework"或"EF")。为您的架构创建一个角色,将其命名为"EntityFrameworkUser"。

现在有两条路径,第一条路径(如果您只有SELECT访问权限),第二条路径(您可能还需要EXECUTE访问权限)。

第一:

进入EntityFramework架构的属性,您可以导航到"权限",搜索并添加EntityFrameworkUser角色,然后在下面的权限列表中只选中SELECT。

第二:

进入EntityFrameworkUser角色的属性,您可以导航到Securable,转到"搜索…"查找Securable,将"属于架构的所有对象"与EntityFramework架构一起使用。

对于结果显示的每个对象(应该只是同义词)(除非您还在"EntityFramework"架构中创建了新表/SP),您可以授予对"Select"的访问权限,并不检查其他所有对象,除非您希望用户或多或少地使用这些对象。

不管:

这将允许您在没有写/执行访问权限的情况下查看表。分配任何需要此只读访问权限的服务器用户,并将其添加到"EntityFrameworkUser"角色中。在我的案例中,有一个"WebApplication"和一个"DesktopApplication"用户,这两个用户都被分配到"EntityFrameworkUser"角色。

这应该可以解决可见性问题,同时限制系统内的写入和执行访问。

最新更新