添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库

更改安全对象的所有权。

Transact-SQL 语法约定

Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。

-- Syntax for SQL Server
ALTER AUTHORIZATION
    ON [ <class_type>:: ] entity_name
    TO { principal_name | SCHEMA OWNER }
<class_type> ::=
      OBJECT | ASSEMBLY | ASYMMETRIC KEY | AVAILABILITY GROUP | 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
-- Syntax for SQL Database
ALTER AUTHORIZATION
    ON [ <class_type>:: ] entity_name
    TO { principal_name | SCHEMA OWNER }
<class_type> ::=
    OBJECT | ASSEMBLY | ASYMMETRIC KEY | CERTIFICATE
     | TYPE | DATABASE | FULLTEXT CATALOG
     | FULLTEXT STOPLIST
     | ROLE | SCHEMA | SEARCH PROPERTY LIST
     | SYMMETRIC KEY | XML SCHEMA COLLECTION
-- Syntax for Azure Synapse Analytics and Microsoft Fabric
ALTER AUTHORIZATION ON
     [ <class_type> :: ] <entity_name>
     TO { principal_name | SCHEMA OWNER }
    <class_type> ::= {
    SCHEMA
     | OBJECT
    <entity_name> ::=
    schema_name
     | [ schema_name. ] object_name
-- Syntax for Parallel Data Warehouse
ALTER AUTHORIZATION ON
     [ <class_type> :: ] <entity_name>
     TO { principal_name | SCHEMA OWNER }
<class_type> ::= {
    DATABASE
     | SCHEMA
     | OBJECT
<entity_name> ::=
    database_name
     | schema_name
     | [ schema_name. ] object_name

Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。

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

Products OBJECT 适用于:SQL Server 2008 (10.0.x) 及更高版本、Azure SQL 数据库、Azure Synapse Analytics、Analytics Platform System (PDW)。 ASSEMBLY 适用于:SQL Server 2008 (10.0.x) 及更高版本、Azure SQL 数据库。 ASYMMETRIC KEY 适用于:SQL Server 2008 (10.0.x) 及更高版本、Azure SQL 数据库。 AVAILABILITY GROUP 适用范围:SQL Server 2012 及更高版本。 CERTIFICATE 适用于:SQL Server 2008 (10.0.x) 及更高版本、Azure SQL 数据库。 CONTRACT 适用于:SQL Server 2008 (10.0.x) 及更高版本。 DATABASE 适用于:SQL Server 2008 (10.0.x) 及更高版本、Azure SQL 数据库。 有关详细信息,请参阅用于数据库的 ALTER AUTHORIZATION。 ENDPOINT 适用于:SQL Server 2008 (10.0.x) 及更高版本。 FULLTEXT CATALOG 适用于:SQL Server 2008 (10.0.x) 及更高版本、Azure SQL 数据库。 FULLTEXT STOPLIST 适用于:SQL Server 2008 (10.0.x) 及更高版本、Azure SQL 数据库。 MESSAGE TYPE 适用于:SQL Server 2008 (10.0.x) 及更高版本。 REMOTE SERVICE BINDING 适用于:SQL Server 2008 (10.0.x) 及更高版本。 适用于:SQL Server 2008 (10.0.x) 及更高版本、Azure SQL 数据库。 ROUTE 适用于:SQL Server 2008 (10.0.x) 及更高版本。 SCHEMA 适用于:SQL Server 2008 (10.0.x) 及更高版本、Azure SQL 数据库、Azure Synapse Analytics、Analytics Platform System (PDW)。 SEARCH PROPERTY LIST 适用范围:SQL Server 2012 (11.x) 及更高版本、Azure SQL 数据库。 SERVER ROLE 适用于:SQL Server 2008 (10.0.x) 及更高版本。 SERVICE 适用于:SQL Server 2008 (10.0.x) 及更高版本。 SYMMETRIC KEY 适用于:SQL Server 2008 (10.0.x) 及更高版本、Azure SQL 数据库。 适用于:SQL Server 2008 (10.0.x) 及更高版本、Azure SQL 数据库。 XML SCHEMA COLLECTION 适用于:SQL Server 2008 (10.0.x) 及更高版本、Azure SQL 数据库。

entity_name 是实体名称。

principal_name | SCHEMA OWNER:将拥有实体的安全主体的名称。 数据库对象必须为数据库主体、数据库用户或角色所拥有。 服务器对象(如数据库)必须为服务器主体(登录名)所拥有。 指定 SCHEMA OWNER 作为 *principal_name,以指明对象应该由拥有对象架构的主体拥有。

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

从 SQL Server 2005 (9.x) 开始,用户可以拥有由另一个数据库用户拥有的架构所包含的 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 (9.x) 中,架构的行为与早期版本的 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 (9.x) 中引入的使主体和架构分离的方法。 有关目录视图的详细信息,请参阅目录视图 (Transact-SQL)

另请注意下列事项:

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

特殊事例和条件

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

  • SQL Server 身份验证登录名。
  • 表示 Windows 用户(而不是组)的 Windows 身份验证登录名。
  • 表示 Windows 组的 Windows 用户,通过 Windows 身份验证登录名进行身份验证。
  • 对执行 ALTER AUTHORIZATION 语句的人员的要求: 如果不是 sysadmin 固定服务器角色的成员,则必须至少对数据库具有 TAKE OWNERSHIP 权限和对新所有者用户名具有 IMPERSONATE 权限。

    对于 Azure SQL 数据库

    对新所有者的要求:新所有者主体必须是以下项之一:

  • SQL Server 身份验证登录名。
  • Microsoft Entra ID 中存在的联合用户(而不是组)。
  • 托管用户(而不是组)或Microsoft Entra ID 中显示的应用程序。
  • 如果新所有者是 Microsoft Entra 用户,则它不能作为新所有者将成为新数据库所有者(dbo)的数据库中的用户存在。 在执行 ALTER AUTHORIZATION 语句,将数据库所有权更改为新用户之前,必须先从数据库中删除 Microsoft Entra 用户。 有关使用SQL 数据库配置 Microsoft Entra 用户的详细信息,请参阅“配置Microsoft Entra 身份验证”。

    对执行 ALTER AUTHORIZATION 语句的人员的要求: 必须连接到目标数据库才能更改数据库的所有者。

    以下类型的帐户可以更改数据库的所有者。

  • 服务级别主体登录名,这是在 Azure 中创建逻辑服务器时预配的 SQL 管理员。
  • 逻辑服务器的 Microsoft Entra 管理员。
  • 数据库的当前所有者。
  • 下表概述了这些要求:

    若要验证数据库的Microsoft Entra 所有者,在用户数据库中执行以下 Transact-SQL 命令(在本例 testdb中)。

    SELECT CAST(owner_sid as uniqueidentifier) AS Owner_SID
    FROM sys.databases
    WHERE name = 'testdb';
    

    输出将是 GUID(如 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXX),对应于作为数据库所有者分配的 Microsoft Entra 用户或服务主体的对象 ID。 可以通过在 Microsoft Entra ID 中检查用户的对象 ID 来验证这一点。 如果 SQL Server 身份验证登录名用户是数据库所有者,请在 master 数据库中执行以下语句以验证数据库所有者:

    SELECT d.name, d.owner_sid, sl.name
    FROM sys.databases AS d
    JOIN sys.sql_logins AS sl
    ON d.owner_sid = sl.sid;
    

    不使用 Microsoft Entra 用户作为数据库的单个所有者,而是使用 Microsoft Entra 组作为db_owner固定数据库角色的成员。 以下步骤演示如何将禁用的登录名配置为数据库所有者,并将Microsoft Entra 组(mydbogroup)设置为db_owner角色的成员

  • 以 Microsoft Entra 管理员身份登录到 SQL Server,并将数据库的所有者更改为禁用的 SQL Server 身份验证登录名。 例如,在用户数据库中执行:

    ALTER AUTHORIZATION ON database::testdb TO DisabledLogin;
    
  • 创建一个应拥有数据库的 Microsoft Entra 组,并将其作为用户添加到用户数据库。 例如:

    CREATE USER [mydbogroup] FROM EXTERNAL PROVIDER;
    
  • 在用户数据库中,将表示 Microsoft Entra 组的用户添加到 db_owner 固定数据库角色。 例如:

    ALTER ROLE db_owner ADD MEMBER mydbogroup;
    

    现在,mydbogroup 成员可将数据库作为 db_owner 角色的成员进行集中管理。

  • 从 Microsoft Entra 组中删除此组的成员时,会自动丢失此数据库的 dbo 权限。
  • 同样,如果将新成员添加到 mydbogroup Microsoft Entra 组,则它们会自动获取此数据库的 dbo 访问权限。
  • 若要检查特定用户是否具有有效的 dbo 权限,请让该用户执行以下语句:

    SELECT IS_MEMBER ('db_owner');
    

    返回值 1 表示该用户是角色的成员。

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

    A. 转移表的所有权

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

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

    该查询可能如下所示:

    ALTER AUTHORIZATION ON Parts.Sprockets TO MichikoOsada;
    

    如果语句中不包含对象架构,数据库引擎 将在用户默认架构中查找对象。 例如:

    ALTER AUTHORIZATION ON Sprockets TO MichikoOsada;
    ALTER AUTHORIZATION ON OBJECT::Sprockets TO MichikoOsada;
    

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

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

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

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

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

    ALTER AUTHORIZATION ON SCHEMA::SeattleProduction11 TO SandraAlayo;
    

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

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

    适用于:SQL Server 2008 (10.0.x) 及更高版本。

    ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak;
    

    E. 更改表所有者

    下面的每个示例都将 Parts 数据库中 Sprockets 表的所有者更改为数据库用户 MichikoOsada

    ALTER AUTHORIZATION ON Sprockets TO MichikoOsada;
    ALTER AUTHORIZATION ON dbo.Sprockets TO MichikoOsada;
    ALTER AUTHORIZATION ON OBJECT::Sprockets TO MichikoOsada;
    ALTER AUTHORIZATION ON OBJECT::dbo.Sprockets TO MichikoOsada;
    

    F. 更改数据库所有者

    适用于:SQL Server 2008 (10.0.x) 及更高版本、Analytics Platform System (PDW)、SQL 数据库。

    以下示例将 Parts 数据库的所有者更改为登录名 MichikoOsada

    ALTER AUTHORIZATION ON DATABASE::Parts TO MichikoOsada;
    

    G. 将数据库的所有者更改为 Microsoft Entra 用户

    在以下示例中,组织中名为 cqclinic.onmicrosoft.com自定义Microsoft Entra 域的 SQL Server 的 Microsoft Entra 管理员可以使用以下命令更改数据库的 targetDB 当前所有权,并使现有Microsoft Entra 用户 richel@cqclinic.onmicorsoft.com 成为新的数据库所有者:

    ALTER AUTHORIZATION ON database::targetDB TO [rachel@cqclinic.onmicrosoft.com];
    

    OBJECTPROPERTY (Transact-SQL)TYPEPROPERTY (Transact-SQL)EVENTDATA (Transact-SQL)

  •