SQL Server 权限和所有权链接

Posted

技术标签:

【中文标题】SQL Server 权限和所有权链接【英文标题】:SQL Server Permissions and Ownership Chaining 【发布时间】:2015-10-23 01:12:51 【问题描述】:

我正在构建一个由 SQL Server 2008 R2 后端和 MS Access 前端组成的应用程序。 所有数据都保存在 SQL Server 中。 MS Access 只是一堆表单、控件和 VBA ADO 对象,它们调用 SQL 服务器上的存储过程,即。用户仅通过存储过程与 SQL Server 交互。 这些存储过程是不改变数据库状态(例如,从表/视图/函数中选择)和一些改变状态(例如,插入/更新/删除/合并)的组合。

在 SQL Server 上,我有一个名为“ADG”的 AD 组,它既是服务器登录名,也是数据库用户。 MS Access 前端的用户是 ADG 的成员。 所有 SQL Server 数据库对象(表、视图、函数和存储过程)都位于一个名为“ABC”的特定架构下,该架构由 dbo 拥有。数据库中还有其他模式,同样,都归 dbo 所有。

我一直在阅读“所有权链接”,并希望澄清以下内容:

    “dbo”是否是“ABC”架构下的表、视图、函数和存储过程的“所有者”,因为它拥有“ABC”架构?

    鉴于应用程序的上述设置并取决于对 1. 的回答,ABC 模式上是“执行”,我唯一的权限 需要授予 ADG 还是我需要其他任何人?

感谢您在澄清方面的任何帮助。

【问题讨论】:

【参考方案1】:

查看https://msdn.microsoft.com/en-us/library/ms191465.aspx 以了解权限层次结构。

    如果您的所有对象都在同一个 ABC 架构中,那么架构的所有者实际上就是底层对象的所有者。同样,请参阅上面链接中的图表以获得清晰的图片。

      EXECUTE 是执行存储过程的特定权限。您可以对函数执行相同的操作,除非该函数返回一个表,然后您需要 SELECT 权限。因此,如果您在 SCHEMA::ABC TO adg 上 GRANT EXECUTE,那么您只是允许 adg 运行 sprocs。根据存储过程的编写方式,他们仍然可能无法访问数据。在 SQL Server 在线书籍中查找有关权限的详细信息,以获取有关您需要授予什么的详细信息 (https://msdn.microsoft.com/en-us/library/ms191291.aspx)

【讨论】:

以上是关于SQL Server 权限和所有权链接的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 查询以查找数据库中所有用户的所有权限/访问权限

SQL Server - 授予对所有现有和未来数据库的读取访问权限的登录权限

SQL SERVER 建好了,如何创建用户以及赋予所有权限?

SQL Server - 如何将所有数据库的读取权限授予登录名?

sql server怎么设置链接服务器

为啥 COUNT(*) 需要对 SQL Server 上的所有表列具有 SELECT 权限?