ALTER AUTHORIZATION (Transact-SQL)

更改安全对象的所有权。

主题链接图标 Transact-SQL 语法约定

语法

ALTER AUTHORIZATION
   ON [ <class_type>:: ] entity_name
   TO { SCHEMA OWNER | principal_name }
[;]

<class_type> ::=
    {
        OBJECT | ASSEMBLY | ASYMMETRIC KEY | CERTIFICATE 
    | CONTRACT | TYPE | DATABASE | ENDPOINT | FULLTEXT CATALOG 
    | FULLTEXT STOPLIST | MESSAGE TYPE | REMOTE SERVICE BINDING
    | ROLE | ROUTE | SCHEMA | SEARCH PROPERTY LIST | SERVER ROLE 
    | SERVICE | SYMMETRIC KEY | XML SCHEMA COLLECTION
    }

参数

  • <class_type>
    更改其所有者的实体的安全对象类。 OBJECT 是默认值。

  • entity_name
    实体名。

  • principal_name
    将拥有实体的主体名称。

注释

ALTER AUTHORIZATION 可用于更改任何具有所有者的实体的所有权。 数据库包含的实体的所有权,可以转移给任何数据库级的主体。 服务器级实体的所有权只能转移给服务器级主体。

重要说明重要提示

从 SQL Server 2005 开始,用户可以拥有由另一个数据库用户拥有的架构所包含的 OBJECT 或 TYPE。 这是对早期版本的 SQL Server 的行为的更改。 有关详细信息,请参阅 OBJECTPROPERTY (Transact-SQL)TYPEPROPERTY (Transact-SQL)

以下包含在架构中、类型为“object”的实体的所有权可以转移:表、视图、函数、过程、队列和同义词。

不能传输以下实体的所有权:链接服务器、统计信息、约束、规则、默认值、触发器、Service Broker 队列、凭据、分区函数、分区方案、数据库主密钥、服务主密钥和事件通知。

以下安全对象类的成员所有权不能进行转移:服务器、登录、用户、应用程序角色和列。

仅当转移架构包含的实体的所有权时,SCHEMA OWNER 选项才有效。 SCHEMA OWNER 将实体所有权转移给它所在的架构所有者。 只有类 OBJECT、TYPE 或 XML SCHEMA COLLECTION 的实体是架构包含的。

如果目标实体不是数据库,且该实体正被转移给新的所有者,则该目标的所有权限将被删除。

注意事项注意

在 SQL Server 2005 中,架构的行为与早期版本的 SQL Server 中的行为不同。 假设架构与数据库用户等效的代码可能不会返回正确的结果。 旧目录视图(包括 sysobjects)不应用于曾使用下列任何 DDL 语句的数据库中:CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA、CREATE USER、ALTER USER、DROP USER、CREATE ROLE、ALTER ROLE、DROP ROLE、CREATE APPROLE、ALTER APPROLE、DROP APPROLE 或 ALTER AUTHORIZATION。 在曾经使用过这些语句中的任意一个语句的数据库中,必须使用新的目录视图。 新目录视图将采用在 SQL Server 2005 中引入的使主体和架构分离的方法。 有关目录视图的详细信息,请参阅目录视图 (Transact-SQL)

另请注意下列事项:

重要说明重要提示

查找对象所有者的唯一可靠的方式是查询 sys.objects 目录视图。 查找类型所有者的唯一可靠的方式是使用 TYPEPROPERTY 函数。

特殊事例和条件

下表列出了适用于更改授权的特殊事例、异常和条件。

条件

DATABASE

无法更改 master、model 和 tempdb 系统数据库、资源数据库或用作分发数据库的数据库的所有者。 主体必须为登录名。 如果主体是没有相应 SQL Server 登录的 Windows 登录,则该主体必须拥有数据库的 CONTROL SERVER 权限和 TAKE OWNERSHIP 权限。 如果主体为 SQL Server 登录,则无法将该主体映射到证书或非对称密钥。 相关别名将映射到新数据库所有者。 将在当前数据库和 sys.databases 中更新 DBO SID。

OBJECT

无法更改触发器、约束、规则、默认值、统计信息、系统对象、队列、索引视图或具有索引视图的表的所有权。

SCHEMA

转移所有权时,将删除没有显式所有者的架构包含对象的权限。 无法更改 sys、dbo 或 information_schema 的所有者。

TYPE

无法更改属于 sys 或 information_schema 的 TYPE 的所有权。

CONTRACT、MESSAGE TYPE 或 SERVICE

无法更改系统实体的所有权。

SYMMETRIC KEY

无法更改全局临时密钥的所有权。

CERTIFICATE 或 ASYMMETRIC KEY

无法将这些实体的所有权转移给角色或组。

ENDPOINT

主体必须为登录名。

权限

要求具有实体的 TAKE OWNERSHIP 权限。 如果新所有者不是执行该语句的用户,那么:1) 如果新所有者是用户或登录名,则要求具有该所有者的 IMPERSONATE 权限;2) 如果新所有者是角色,则要求具有该角色的成员身份或该角色的 ALTER 权限;3) 如果新所有者是应用程序角色,则要求具有该应用程序角色的 ALTER 权限。

示例

A.转移表的所有权

以下示例将 Sprockets 表的所有权转移给 MichikoOsada 用户。 该表位于 Parts 架构内。

ALTER AUTHORIZATION ON OBJECT::Parts.Sprockets TO MichikoOsada;
GO

该查询可能如下所示:

ALTER AUTHORIZATION ON Parts.Sprockets TO MichikoOsada;
GO

B.将视图的所有权转移给架构所有者

以下示例将 ProductionView06 视图的所有权转移给包含它的架构的所有者。 该视图位于 Production 架构内。

ALTER AUTHORIZATION ON OBJECT::Production.ProductionView06 TO SCHEMA OWNER;
GO

C.将架构所有权转移给用户

以下示例将 SeattleProduction11 架构的所有权转移给 SandraAlayo 用户。

ALTER AUTHORIZATION ON SCHEMA::SeattleProduction11 TO SandraAlayo;
GO

D.将端点的所有权转移给 SQL Server 登录名

以下示例将 CantabSalesServer1 端点的所有权转移给 JaePak。 由于该端点是服务器级安全对象,因此只能将它转移给服务器级主体。

ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak;
GO

请参阅

参考

OBJECTPROPERTY (Transact-SQL)

TYPEPROPERTY (Transact-SQL)

EVENTDATA (Transact-SQL)