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

Posted

技术标签:

【中文标题】是否可以在 SQL Server 中创建只读同义词?【英文标题】:Is it possible to create read-only synonym in SQL Server? 【发布时间】:2014-02-20 09:40:30 【问题描述】:

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

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

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

非常感谢任何帮助!

【问题讨论】:

只读视图怎么样? 我们有外键等,我认为这是不可能的。 外键与此有什么关系?您可以从每个select 创建一个视图。 嘿@juergen 感谢您抽出宝贵时间深入挖掘。您不能在外键中引用视图。更多关于此***.com/questions/447122/… SYNONYM 将具有与表本身相同的行为,而视图可能没有。这就是为什么我们想要一个只读 SYNONYM 的原因之一,这样它的行为就可以保持原样,但只是在不同的数据库(在这种情况下是 DB2)中作为 SYNONYM 时访问会发生变化 【参考方案1】:

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

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

第一:

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

第二:

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

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

不管:

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

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

【讨论】:

以上是关于是否可以在 SQL Server 中创建只读同义词?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 SQL Server 中创建一个可以处理序列的函数?

是否可以在 JavaScript Object Literal Notation 中创建只读成员?

是否可以在 SOAP Web 服务中创建只读元素?

sql 如何在PostgreSQL中创建只读用户

如何在 postgresql 中创建只读视图,类似于 oracle?

确定用户在 SQL Server 中创建的对象