SQL Server 角色、架构、用户

Posted

技术标签:

【中文标题】SQL Server 角色、架构、用户【英文标题】:SQL Server roles, schemas, users 【发布时间】:2010-11-12 09:52:00 【问题描述】:

我一直试图弄清楚为什么 SQL Server 有db_owner 架构和db_owner 角色?这非常令人困惑。我一直在寻找答案,到目前为止,我的理解是这样的:

    所有表和对象(例如约束等)都属于一个模式。 DBO 是默认架构。 可能会授予用户编辑每个对象或架构的权限。架构上的权限将权限扩展到该架构内的所有对象。因此,您不必为每个单独的对象授予权限。 为方便起见,角色将权限组合在一起。

如果其中任何一个不正确,请告诉我。但我认为到目前为止一切都很好。现在我的问题是:

    在 SQL Server Management Studio 的“数据库用户”对话框中看到的 db_owner 架构到底是什么?在同一个对话框中,您将“默认模式”定义为dbo。为什么两者不一样?如果SQL Server默认使用dbo创建下所有对象,那么db_owner有什么用? 为什么用户想要拥有一个架构?您已经在分配权限/角色。拥有db_accessadmin 会给您带来什么? 您能否举例说明何时在db_owner 架构和db_accessadmin 架构下创建对象?换句话说,是否有人合法使用这些架构?

【问题讨论】:

同意。他们用相同的名称创建两种不同类型的对象(模式和角色)是荒谬的。 【参考方案1】:

SQL Server 架构只是对象的容器,例如表、存储过程等。数据库角色是一组主体,例如 windows 登录、sql server 用户等。

这个想法是您可以拥有一个角色,比如“IT”,并让所有 IT 用户都处于该角色之下。然后,您可以拥有一个名为“IT”的模式,并在该模式下拥有属于 IT 的所有表。开箱即用的 SQL Server 会为数据库中的每个默认用户和角色创建匹配的架构,但我认为您的目的是您可以自定义它以满足您组织的需求。

This article 提供了有关所有者和模式之间差异的更多信息。 Stack Overflow 上的This question 也可能有用。

【讨论】:

这篇文章很有用。因此,从您的回答中,我认为 db_accessadmin 架构是无用的,并且是 db_accessadmin 角色的副作用。没有人在 db_accessadmin 架构下创建表,而是您使用与您的数据更相关的架构。是否有一个对象/模式的“所有权”列表给你?对那个对象来说,所有的权利都可以想象吗?或者您可以成为没有阅读权限的所有者吗? 查看这篇文章msdn.microsoft.com/en-us/library/ms189462.aspx了解更多详情。具体来说,“在模式中创建的对象归模式所有者所有,并且在 sys.objects 中具有 NULL principal_id。包含模式的对象的所有权可以转移到任何数据库级主体,但模式所有者始终保留 CONTROL架构内对象的权限。”所以看起来所有者总是可以完全控制模式中的对象。【参考方案2】:

我从以下链接引用以下内容。

https://msdn.microsoft.com/en-us/library/bb669061(v=vs.110).aspx

SQL Server 附带十个与内置数据库用户和角色同名的预定义架构。这些存在主要是为了向后兼容。如果不需要,可以删除与固定数据库角色同名的模式。您不能删除以下架构:

dbo guest sys INFORMATION_SCHEMA

【讨论】:

以上是关于SQL Server 角色、架构、用户的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 数据库中设计用户/角色架构?

SQL SERVER 2008 服务器登录名角色,数据库用户角色架构知识点总结

SQL Server 可以根据用户或用户角色在两个架构之间进行仲裁吗?

SQL Server 2008 - 删除架构所有权

简化 SQL Server 的登录名/所有者/架构/角色/主体等

SQL Server 授予的权限不起作用