ALTER AUTHORIZATION (Transact-SQL)
更改安全对象的所有权。
适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。 |
语法
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 是默认值。OBJECT
ASSEMBLY
适用于:SQL Server 2008 到 SQL Server 2014。
ASYMMETRIC KEY
适用于:SQL Server 2008 到 SQL Server 2014。
CERTIFICATE
适用于:SQL Server 2008 到 SQL Server 2014。
CONTRACT
适用于:SQL Server 2008 到 SQL Server 2014。
TYPE
DATABASE
适用于:SQL Server 2008 到 SQL Server 2014。
ENDPOINT
适用于:SQL Server 2008 到 SQL Server 2014。
FULLTEXT CATALOG
适用于:SQL Server 2008 到 SQL Server 2014。
FULLTEXT STOPLIST
适用于:SQL Server 2008 到 SQL Server 2014。
MESSAGE TYPE
适用于:SQL Server 2008 到 SQL Server 2014。
REMOTE SERVICE BINDING
适用于:SQL Server 2008 到 SQL Server 2014。
ROLE
ROUTE
适用于:SQL Server 2008 到 SQL Server 2014。
SCHEMA
SEARCH PROPERTY LIST
适用于:SQL Server 2012 到 SQL Server 2014。
SERVER ROLE
适用于:SQL Server 2008 到 SQL Server 2014。
SERVICE
适用于:SQL Server 2008 到 SQL Server 2014。
SYMMETRIC KEY
适用于:SQL Server 2008 到 SQL Server 2014。
XML SCHEMA COLLECTION
适用于:SQL Server 2008 到 SQL Server 2014。
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。 由于该端点是服务器级安全对象,因此只能将它转移给服务器级别主体。
适用于:SQL Server 2008 到 SQL Server 2014。 |
ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak;
GO