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

C# 是否可以在SQL Server中创建只读同义词?,c#,sql,sql-server,entity-framework,synonym,C#,Sql,Sql Server,Entity Framework,Synonym,我们有两个不同的数据库DB1和DB2,DB2中的表引用DB1中的表 我们正在研究在DB2中使用同义词进行只读访问的可能性,并使用EntityFramework在DB2中将这些同义词作为表引用 由于目前EF不跨多个数据库,在阅读本文()之后,我们领先了一步,但是,我们只希望对新创建的同义词具有只读访问权限 非常感谢您的帮助 您可以为同义词创建模式(为了简单起见,例如“EntityFramework”或“EF”)。为您的模式创建一个角色,将其命名为“EntityFrameworkUser” 现在这里

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

我们正在研究在DB2中使用同义词进行只读访问的可能性,并使用EntityFramework在DB2中将这些同义词作为表引用

由于目前EF不跨多个数据库,在阅读本文()之后,我们领先了一步,但是,我们只希望对新创建的同义词具有只读访问权限


非常感谢您的帮助

您可以为同义词创建模式(为了简单起见,例如“EntityFramework”或“EF”)。为您的模式创建一个角色,将其命名为“EntityFrameworkUser”

现在这里有两条路径——第一条是如果您只有SELECT访问权限,第二条是如果您可能还需要EXECUTE访问权限

第一:

进入EntityFramework架构的属性,您可以导航到权限,搜索并添加EntityFrameworkUser角色,并选中下面权限列表中的仅选择

第二:

进入EntityFrameworkUser角色的属性,您可以导航到安全文件,转到“搜索…”查找安全文件,将“属于架构的所有对象”与EntityFramework架构一起使用

对于作为结果显示的每个对象,这些对象应该只是同义词(除非您在“EntityFramework”架构中创建了新表/SP),您可以授予对“Select”的访问权限,并将其他所有内容保留为未选中状态,除非您希望用户对这些对象拥有或多或少的权限

不管:

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


这将解决您的可视性问题,同时限制系统内的写入和执行访问。

只读视图如何?我们有外键等,我认为不可能。外键与此有什么关系?您可以从每个
选择
创建一个视图。嘿@juergen感谢您的时间和深入挖掘。不能在外键中引用视图。更详细地说,同义词将具有与表本身相同的行为,而视图可能没有。这就是为什么我们需要一个只读同义词的原因之一,这样它的行为就可以保持原样,而只是在另一个数据库(在本例中是DB2)中作为同义词时访问会发生变化