SQL Server 中的所有权和用户架构分离 (ADO.NET)

更新:November 2007

SQL Server 安全性的核心概念是对象的所有者具有管理这些对象的不可撤消的权限。 您不能取消对象所有者的特权,并且如果用户在数据库中拥有对象,您也不能将用户从数据库中删除。 在 SQL 2000 中,如果用户创建一个对象但未指定所有者,则此用户便成为该对象的所有者。 对象所有者具有管理该对象的不可撤消的权限,如果多个用户拥有对象,则将导致问题。 在 SQL Server 2000 中,通过利用所有权链接,由一个用户拥有所有数据库对象可简化管理权限,如 SQL Server 中的授权和权限 (ADO.NET) 中所述。

说明:

固定的服务器角色 sysadmin 的成员和固定的数据库角色 db_owner 的成员也对数据库中的所有对象拥有不可撤消的所有权权限。

早于 SQL Server 2005 的 SQL Server 版本使用下列由四部分组成的命名语法来引用对象。

Server.Database.ObjectOwner.DatabaseObject

如果数据库用户 Bob 和 Sue 分别创建了 Table1,则您需要使用完全限定名。 如果系统管理员或数据库所有者创建了一个对象,则该对象将由 dbo 用户帐户而不是单个用户拥有。

SELECT col1 FROM Bob.Table1
SELECT col1 FROM Sue.Table1
SELECT col1 FROM dbo.Table1
说明:

当引用 dbo 拥有的对象时,不必使用 ObjectOwner.DatabaseObject 语法(虽然使用它效率更高)。 如果未提供所有者的名称,SQL Server 2000 将首先检查当前用户是否拥有该对象,然后检查 dbo 是否拥有该对象。 提供由这两部分组成的名称可省去多余步骤。

用户架构分离

SQL Server 2005 引入了用户架构分离,它使用户能够更灵活地管理数据库对象权限。 “架构”是一个命名的数据库对象容器,它允许您将对象分组为单独的命名空间。 例如,AdventureWorks 示例数据库包含 Production、Sales 和 HumanResources 的架构。

用于引用对象的由四部分组成的命名语法指定架构名称。

Server.Database.DatabaseSchema.DatabaseObject

架构所有者和权限

任何数据库主体都可以拥有架构,并且一个主体可拥有多个架构。 您可以对架构应用安全规则,安全规则将由架构中的所有对象继承。 如果设置了对架构的访问权限,则当新对象添加到架构时,新对象会自动应用这些权限。 可以为用户分配一个默认的架构,且多个数据库用户可以共享同一架构。

默认情况下,当开发人员在架构中创建对象时,该对象由拥有架构的安全主体而不是开发人员拥有。 可以使用 ALTER AUTHORIZATION Transact-SQL 语句转移对象所有权。 虽因架构会增大管理权限的复杂度而不建议使用,但架构仍然可以包含由不同用户拥有的对象并可具有比分配给架构的权限更加细化的权限。 对象可以在架构之间移动,架构所有权也可以在主体之间转移。 可以在不影响架构的情况下删除数据库用户。

内置架构

SQL Server 随附了十个预定义的架构,它们与内置数据库用户和角色具有相同的名称。 这些架构主要用于向后兼容性。 如果您不需要与固定数据库角色具有相同名称的架构,则可以删除它们。 您不能删除下列架构:

  • dbo

  • guest

  • sys

  • INFORMATION_SCHEMA

如果从模型数据库中删除这些架构,它们将不会显示在新数据库中。

说明:

sys 和 INFORMATION_SCHEMA 架构是为系统对象而保留的。 您不能在这些架构中创建对象,而且不能删除它们。

dbo 架构

dbo 是新创建的数据库的默认架构。 dbo 架构由 dbo 用户帐户拥有。 默认情况下,使用 CREATE USER Transact-SQL 命令创建的用户的默认架构为 dbo。

分配了 dbo 架构的用户不继承 dbo 用户帐户的权限。 用户不从架构继承权限;架构权限由架构中包含的数据库对象继承。

说明:

当使用 SQL Server 2005 中的由一部分组成的名称引用数据库对象时,SQL Server 首先在用户默认架构中查找。 如果在此处未找到该对象,则 SQL Server 其次将在 dbo 架构中查找。 如果对象不在 dbo 架构中,则会返回一个错误。

外部资源

有关对象所有权和架构的更多信息,请参见下列资源。

资源

说明

User-Schema Separation(用户架构分离)(位于 SQL Server 2008 Books Online(《SQL Server 2008 联机丛书》中)

描述用户架构分离引发的变化, 包括新行为及其对所有权、目录视图和权限的影响。

User-Schema Separation(用户架构分离)(位于 SQL Server 2005 Books Online(《SQL Server 2005 联机丛书》中)

描述用户架构分离引发的变化, 包括新行为及其对所有权、目录视图和权限的影响。

Using Ownership Chains(使用所有权链)(位于 SQL Server 2000 Books Online(《SQL Server 2000 联机丛书》中)

描述用户如何从对象所有者继承权限。

请参见

概念

SQL Server 中的应用程序安全机制方案 (ADO.NET)

SQL Server 中的身份验证 (ADO.NET)

SQL Server 中的服务器和数据库角色 (ADO.NET)

SQL Server 中的授权和权限 (ADO.NET)

其他资源

保证 ADO.NET 应用程序的安全