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 2008 服务器登录名角色,数据库用户角色架构知识点总结
SQL Server 可以根据用户或用户角色在两个架构之间进行仲裁吗?