ALTER AUTHORIZATION (Transact-SQL)
更改实体的所有权
备注
ALTER AUTHORIZATION 可用于更改任何具有所有者的实体的所有权。数据库包含的实体的所有权,可以传递给任何数据库级的主体。服务器级实体的所有权只能传递给服务器级主体。以下包含在架构中、类型为“object”的实体的所有权可以传递:表、视图、函数、过程、队列和同义词。 以下实体的所有权不能进行传递:链接服务器、统计信息、约束、规则、默认值、触发器、Service Broker 队列、凭据、分区函数、分区方案、数据库主密钥、服务主密钥和事件通知。以下安全对象类的成员所有权不能进行传递:服务器、登录、用户、应用程序角色和列。仅当传递架构包含的实体的所有权时,SCHEMA OWNER 选项才有效。SCHEMA OWNER 将实体所有权传递给它所在的架构所有者。只有类 OBJECT、TYPE 或 XML SCHEMA COLLECTION 的实体是架构包含的。如果目标实体不是数据库,且该实体正被传递给新的所有者,则该目标的所有权限将被删除。
特殊事例和条件
下表列出了适用于更改授权的特殊事例、异常和条件。
类 条件
DATABASE 无法更改系统数据库 master、model、temp、资源数据库或用作分发数据库的数据库的所有者。主体必须为登录名。如果主体是没有相应 SQL Server 登录的 Windows 登录,则该主体必须拥有数据库的 CONTROL SERVER 权限和 TAKE OWNERSHIP 权限。如果主体为 SQL Server 登录,则无法将该主体映射到证书或非对称密钥。相关别名将映射到新数据库所有者。DBO SID 将在当前数据库和 sys.databases 中更新。
OBJECT 无法更改触发器、约束、规则、默认值、统计信息、系统对象、队列、索引视图或具有索引视图的表的所有权。
SCHEMA 传递所有权时,没有显式所有者的架构包含的对象的权限将被删除。无法更改 sys、dbo 或 information_schema 的所有者。
TYPE 无法更改属于 sys 或 information_schema 的 TYPE 的所有权。
CONTRACT、MESSAGE TYPE 或 SERVICE 无法更改系统实体的所有权。
SYMMETRIC KEY 无法更改全局临时密钥的所有权。
CERTIFICATE 或 ASYMMETRIC KEY 无法将这些实体的所有权传递给角色或组。
ENDPOINT 主体必须为登录名。
参数:: 更改其所有者的实体的类。
Object 是默认值。
entity_name 实体名。
principal_name 将拥有实体的主体名称。
权限
需要对实体具有 TAKE OWNERSHIP 权限。如果新所有者不是执行该语句的用户,那么:1) 如果新所有者是用户或登录名,则需要该所有者的 IMPERSONATE 权限;2) 如果新所有者是角色,则需要该角色中的成员身份或该角色的 ALTER 权限;3) 如果新所有者是应用程序角色,则需要该应用程序角色的 ALTER 权限。
示例
A. 传递表的所有权以下示例将表 Sprockets 的所有权传递给用户MichikoOsada。
该查询可能如下所示:
实际使用中只要在“新建查询”
更改实体的所有权
1 ON [ <entity_type> :: ] entity_name
2 TO { SCHEMA OWNER | principal_name }
3
4 <entity_type> ::=
5 {
6 Object | Type | XML Schema Collection | Fulltext Catalog | Schema
7 | Assembly | Role | Message Type | Contract | Service
8 | Remote Service Binding | Route | Symmetric Key | Endpoint
9 | Certificate | Database
10 }
11
2 TO { SCHEMA OWNER | principal_name }
3
4 <entity_type> ::=
5 {
6 Object | Type | XML Schema Collection | Fulltext Catalog | Schema
7 | Assembly | Role | Message Type | Contract | Service
8 | Remote Service Binding | Route | Symmetric Key | Endpoint
9 | Certificate | Database
10 }
11
备注
ALTER AUTHORIZATION 可用于更改任何具有所有者的实体的所有权。数据库包含的实体的所有权,可以传递给任何数据库级的主体。服务器级实体的所有权只能传递给服务器级主体。以下包含在架构中、类型为“object”的实体的所有权可以传递:表、视图、函数、过程、队列和同义词。 以下实体的所有权不能进行传递:链接服务器、统计信息、约束、规则、默认值、触发器、Service Broker 队列、凭据、分区函数、分区方案、数据库主密钥、服务主密钥和事件通知。以下安全对象类的成员所有权不能进行传递:服务器、登录、用户、应用程序角色和列。仅当传递架构包含的实体的所有权时,SCHEMA OWNER 选项才有效。SCHEMA OWNER 将实体所有权传递给它所在的架构所有者。只有类 OBJECT、TYPE 或 XML SCHEMA COLLECTION 的实体是架构包含的。如果目标实体不是数据库,且该实体正被传递给新的所有者,则该目标的所有权限将被删除。
特殊事例和条件
下表列出了适用于更改授权的特殊事例、异常和条件。
类 条件
DATABASE 无法更改系统数据库 master、model、temp、资源数据库或用作分发数据库的数据库的所有者。主体必须为登录名。如果主体是没有相应 SQL Server 登录的 Windows 登录,则该主体必须拥有数据库的 CONTROL SERVER 权限和 TAKE OWNERSHIP 权限。如果主体为 SQL Server 登录,则无法将该主体映射到证书或非对称密钥。相关别名将映射到新数据库所有者。DBO SID 将在当前数据库和 sys.databases 中更新。
OBJECT 无法更改触发器、约束、规则、默认值、统计信息、系统对象、队列、索引视图或具有索引视图的表的所有权。
SCHEMA 传递所有权时,没有显式所有者的架构包含的对象的权限将被删除。无法更改 sys、dbo 或 information_schema 的所有者。
TYPE 无法更改属于 sys 或 information_schema 的 TYPE 的所有权。
CONTRACT、MESSAGE TYPE 或 SERVICE 无法更改系统实体的所有权。
SYMMETRIC KEY 无法更改全局临时密钥的所有权。
CERTIFICATE 或 ASYMMETRIC KEY 无法将这些实体的所有权传递给角色或组。
ENDPOINT 主体必须为登录名。
参数
Object 是默认值。
entity_name 实体名。
principal_name 将拥有实体的主体名称。
权限
需要对实体具有 TAKE OWNERSHIP 权限。如果新所有者不是执行该语句的用户,那么:1) 如果新所有者是用户或登录名,则需要该所有者的 IMPERSONATE 权限;2) 如果新所有者是角色,则需要该角色中的成员身份或该角色的 ALTER 权限;3) 如果新所有者是应用程序角色,则需要该应用程序角色的 ALTER 权限。
示例
A. 传递表的所有权以下示例将表 Sprockets 的所有权传递给用户MichikoOsada。
1 ALTER AUTHORIZATION ON OBJECT::Sprockets TO MichikoOsada;
2 GO
2 GO
1 ALTER AUTHORIZATION ON Sprockets TO MichikoOsada;
2 GO
B. 将视图的所有权传递给架构所有者以下示例将视图 ProductionView06 的所有权传递给包含它的架构的所有者。 2 GO
1 ALTER AUTHORIZATION ON OBJECT::ProductionView06 TO SCHEMA OWNER;
2 GO
C. 将架构的所有权传递给用户以下示例将架构 SeattleProduction11 的所有权传递给用户 SandraAlayo。 2 GO
1 ALTER AUTHORIZATION ON SCHEMA::SeattleProduction11 TO SandraAlayo; GO
D. 将端点的所有权传递给 SQL Server 登录以下示例将端点 CantabSalesServer1 的所有权传递给 JaePak。由于该端点是服务器级安全对象,因此只能将它传递给服务器级主体。
1 ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak; GO
实际使用中只要在“新建查询”
1 ALTER AUTHORIZATION ON Database::Loto TO sa;
2 GO
就可以了。
2 GO
浙公网安备 33010602011771号