Partilhar via


ALTER AUTHORIZATION (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW) Ponto de extremidade de análise de SQL no Microsoft Fabric Warehouse no Microsoft Fabric Banco de Dados SQL no Microsoft Fabric

Altera a propriedade de um protegível.

Convenções de sintaxe de Transact-SQL

Observação

O Microsoft Entra ID era conhecido como Azure Active Directory (Azure AD).

Sintaxe

-- 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
    }

Observação

Não há suporte a essa sintaxe para o pool de SQL sem servidor no Azure Synapse Analytics.

Argumentos

<class_type> é a classe protegível da entidade da qual o proprietário está sendo alterado. OBJECT é o padrão.

Classe Produto
OBJECT Aplica-se a: SQL Server 2008 2008 (10.0.x) e posterior, Banco de Dados SQL do Azure, Azure Synapse Analytics e Analytics Platform System (PDW).
ASSEMBLY Aplica-se a: SQL Server 2008 (10.0.x) e posterior e Banco de Dados SQL do Azure.
ASYMMETRIC KEY Aplica-se a: SQL Server 2008 (10.0.x) e posterior e Banco de Dados SQL do Azure.
AVAILABILITY GROUP Aplica-se a: SQL Server 2012 e versões posteriores.
CERTIFICATE Aplica-se a: SQL Server 2008 (10.0.x) e posterior e Banco de Dados SQL do Azure.
CONTRACT Aplica-se a: SQL Server 2008 (10.0.x) e posterior.
DATABASE Aplica-se a: SQL Server 2008 (10.0.x) e posterior e Banco de Dados SQL do Azure. Para obter mais informações, confira ALTER AUTHORIZATION para bancos de dados.
ENDPOINT Aplica-se a: SQL Server 2008 (10.0.x) e posterior.
FULLTEXT CATALOG Aplica-se a: SQL Server 2008 (10.0.x) e posterior e Banco de Dados SQL do Azure.
FULLTEXT STOPLIST Aplica-se a: SQL Server 2008 (10.0.x) e posterior e Banco de Dados SQL do Azure.
MESSAGE TYPE Aplica-se a: SQL Server 2008 (10.0.x) e posterior.
REMOTE SERVICE BINDING Aplica-se a: SQL Server 2008 (10.0.x) e posterior.
ROLE Aplica-se a: SQL Server 2008 (10.0.x) e posterior e Banco de Dados SQL do Azure.
ROUTE Aplica-se a: SQL Server 2008 (10.0.x) e posterior.
SCHEMA Aplica-se a: SQL Server 2008 2008 (10.0.x) e posterior, Banco de Dados SQL do Azure, Azure Synapse Analytics e Analytics Platform System (PDW).
SEARCH PROPERTY LIST Aplica-se a: SQL Server 2012 (11.x) e versões posteriores, Banco de Dados SQL do Azure
SERVER ROLE Aplica-se a: SQL Server 2008 (10.0.x) e posterior.
SERVICE Aplica-se a: SQL Server 2008 (10.0.x) e posterior.
SYMMETRIC KEY Aplica-se a: SQL Server 2008 (10.0.x) e posterior e Banco de Dados SQL do Azure.
TYPE Aplica-se a: SQL Server 2008 (10.0.x) e posterior e Banco de Dados SQL do Azure.
XML SCHEMA COLLECTION Aplica-se a: SQL Server 2008 (10.0.x) e posterior e Banco de Dados SQL do Azure.

entity_name É o nome da entidade.

principal_name | SCHEMA OWNER Nome da entidade de segurança que possuirá a entidade. Os objetos de banco de dados devem ser de propriedade de um banco de dados principal; um usuário de banco de dados ou função. Os objetos de servidor (como bancos de dados) devem ser de propriedade de uma entidade de servidor (um logon). Especifique SCHEMA OWNER como o *principal_name para indicar que o objeto deve ser de propriedade de uma entidade de segurança que tenha o esquema do objeto.

Comentários

ALTER AUTHORIZATION pode ser usado para alterar a propriedade de qualquer entidade que tenha um proprietário. A propriedade de entidades contidas no banco de dados pode ser transferida a qualquer entidade em nível de banco de dados. A propriedade de entidades em nível de servidor pode ser transferida apenas a entidades em nível de servidor.

Importante

A partir do SQL Server 2005 (9.x), um usuário pode possuir um OBJECT ou TYPE que esteja contido por um esquema de propriedade de outro usuário do banco de dados. Essa é uma alteração de comportamento de versões anteriores do SQL Server. Para obter mais informações, confira OBJECTPROPERTY (Transact-SQL) e TYPEPROPERTY (Transact-SQL).

A propriedade das seguintes entidades contidas por esquema de tipo "objeto" pode ser transferida: tabelas, exibições, funções, procedimentos, filas e sinônimos.

A propriedade das seguintes entidades não pode ser transferida: servidores vinculados, estatísticas, restrições, regras, padrões, gatilhos, filas do Agente de Serviço, credenciais, funções de partição, esquemas de partição, chaves mestras de banco de dados, chave mestra de serviço e notificações de eventos.

A propriedade de membros das seguintes classes protegíveis não pode ser transferida: servidor, logon, usuário, função de aplicativo e coluna.

A opção SCHEMA OWNER é válida apenas quando você está transferindo propriedade de uma entidade contida por esquema. SCHEMA OWNER transferirá a propriedade da entidade ao proprietário do esquema no qual ela reside. Apenas entidades de classe OBJECT, TYPE ou XML SCHEMA COLLECTION são contidas por esquema.

Se a entidade de destino não for um banco de dados e estiver sendo transferida a um novo proprietário, todas as permissões no destino serão descartadas.

Cuidado

No SQL Server 2005 (9.x), o comportamento de esquemas mudou em relação ao comportamento em versões anteriores do SQL Server. O código que pressupõe que esquemas são equivalentes a usuários de banco de dados pode não retornar resultados corretos. Exibições antigas do catálogo, incluindo sysobjects, não devem ser usadas em um banco de dados no qual uma das instruções DDL a seguir já tenha sido utilizada: 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. Em um banco de dados no qual qualquer uma dessas instruções tenha sido usada alguma vez, você deve usar as novas exibições do catálogo. As novas exibições do catálogo levam em conta a separação de entidades e esquemas introduzida no SQL Server 2005 (9.x). Para mais informações sobre exibições do catálogo, consulte Exibições do catálogo (Transact-SQL).

Além disso, observe o seguinte:

Importante

O único modo confiável de localizar o proprietário de um objeto é consultar a exibição do catálogo sys.objects. O único modo seguro para localizar o proprietário de um tipo é usar a função TYPEPROPERTY.

Casos e condições especiais

A tabela a seguir lista casos, exceções e condições especiais que se aplicam a autorização de alteração.

Classe Condição
OBJECT Não pode alterar propriedade de gatilhos, restrições, regras, padrões, estatísticas, objetos de sistema, filas, exibições indexadas ou tabelas com exibições indexadas.
SCHEMA Quando a propriedade é transferida, permissões em objetos contidos por esquema que não têm proprietários explícitos serão descartadas. Não é possível alterar o proprietário de sys, dbo ou information_schema.
TYPE Não é possível alterar a propriedade de um TYPE que pertença a sys ou information_schema.
CONTRACT, MESSAGE TYPE ou SERVICE Não podem alterar a propriedade de entidades do sistema.
SYMMETRIC KEY Não pode alterar a propriedade de chaves temporárias globais.
CERTIFICATE ou ASYMMETRIC KEY Não pode transferir a propriedade dessas entidades a uma função ou grupo.
ENDPOINT A entidade deve ser um logon.

ALTER AUTHORIZATION para bancos de dados

Para o SQL Server

Requisitos para o novo proprietário: A nova entidade de segurança do proprietário deve ser uma das seguintes:

  • Um logon de autenticação do SQL Server.
  • Um logon de autenticação do Windows que representa um usuário do Windows (não um grupo).
  • Um usuário do Windows que se autentica por meio de um logon de autenticação do Windows que representa um grupo do Windows.

Requisitos para a pessoa que está executando a instrução ALTER AUTHORIZATION: Se você não for um membro da função de servidor fixa sysadmin, deverá ter pelo menos a permissão TAKE OWNERSHIP no banco de dados e a permissão IMPERSONATE no novo logon do proprietário.

Para o Banco de Dados SQL do Azure

Requisitos para o novo proprietário: A nova entidade de segurança do proprietário deve ser uma das seguintes:

  • Um logon de autenticação do SQL Server.
  • Um usuário federado (não um grupo) presente na ID do Microsoft Entra.
  • Um usuário gerenciado (não um grupo) ou um aplicativo presente na ID do Microsoft Entra.

Se o novo proprietário for um usuário do Microsoft Entra, ele não poderá existir como um usuário no banco de dados em que o novo proprietário se tornará o novo proprietário do banco de dados (dbo). O usuário do Microsoft Entra deve primeiro ser removido do banco de dados antes de executar a instrução ALTER AUTHORIZATION, alterando a propriedade do banco de dados para o novo usuário. Para obter mais informações sobre como configurar usuários do Microsoft Entra com o Banco de Dados SQL, consulte Configurar a autenticação do Microsoft Entra.

Requisitos para a pessoa que está executando a instrução ALTER AUTHORIZATION: Você deve se conectar ao banco de dados de destino para alterar o proprietário daquele banco de dados.

Os seguintes tipos de contas podem alterar o proprietário de um banco de dados.

  • O logon da entidade de segurança de nível de serviço, que é o administrador do SQL provisionado quando o servidor lógico no Azure foi criado.
  • O administrador do Microsoft Entra para o servidor lógico.
  • O proprietário atual do banco de dados.

A tabela a seguir resume os requisitos:

Executor Destino Result
Logon de Autenticação do SQL Server Logon de Autenticação do SQL Server Sucesso
Logon de Autenticação do SQL Server Usuário do Microsoft Entra Falha
Usuário do Microsoft Entra Logon de Autenticação do SQL Server Sucesso
Usuário do Microsoft Entra Usuário do Microsoft Entra Êxito

Para verificar um proprietário do banco de dados do Microsoft Entra, execute o seguinte comando Transact-SQL em um banco de dados de usuário (neste exemplo testdb).

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

A saída será um GUID (como XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) que corresponde à ID de objeto do usuário ou entidade de serviço do Microsoft Entra atribuída como o proprietário do banco de dados. Você pode verificar isso verificando a ID do objeto do usuário na ID do Microsoft Entra. Quando um usuário de logon de autenticação do SQL Server for o proprietário do banco de dados, execute a seguinte instrução no banco de dados mestre para verificar o proprietário do banco de dados:

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;

Melhor prática

Em vez de usar usuários do Microsoft Entra como proprietários individuais do banco de dados, use um grupo do Microsoft Entra como membro da função de banco de dados fixa db_owner . As etapas a seguir mostram como configurar um logon desabilitado como o proprietário do banco de dados e tornar um grupo do Microsoft Entra (mydbogroup) um membro da função db_owner .

  1. Faça logon no SQL Server como administrador do Microsoft Entra e altere o proprietário do banco de dados para um logon de autenticação do SQL Server desabilitado. Por exemplo, do banco de dados de usuário, execute:

    ALTER AUTHORIZATION ON database::testdb TO DisabledLogin;
    
  2. Crie um grupo do Microsoft Entra que deve possuir o banco de dados e adicione-o como um usuário ao banco de dados do usuário. Por exemplo:

    CREATE USER [mydbogroup] FROM EXTERNAL PROVIDER;
    
  3. No banco de dados do usuário, adicione o usuário que representa o grupo do Microsoft Entra à db_owner função de banco de dados fixa. Por exemplo:

    ALTER ROLE db_owner ADD MEMBER mydbogroup;
    

Agora, os membros do mydbogroup podem gerenciar centralmente o banco de dados como membros da função db_owner.

  • Quando os membros desse grupo são removidos do grupo do Microsoft Entra, eles perdem automaticamente as permissões dbo para esse banco de dados.
  • Da mesma forma, se novos membros forem adicionados ao mydbogroup grupo do Microsoft Entra, eles obterão automaticamente o acesso dbo para esse banco de dados.

Para verificar se um usuário específico tem a permissão de dbo efetiva, peça para o usuário executar a seguinte instrução:

SELECT IS_MEMBER ('db_owner');

Um valor retornado de 1 indica que o usuário é um membro da função.

Permissões

Requer permissão TAKE OWNERSHIP na entidade. Se o novo proprietário não for o usuário que está executando esta instrução, também requererá: 1) permissão IMPERSONATE no novo proprietário se ele for um usuário ou logon; ou 2) se o novo proprietário for uma função, associação na função ou permissão ALTER na função; ou 3) se o novo proprietário for uma função de aplicativo, permissão ALTER na função do aplicativo.

Exemplos

a. Transferir a propriedade de uma tabela

O exemplo a seguir transfere a propriedade da tabela Sprockets ao usuário MichikoOsada. A tabela está localizada dentro do esquema Parts.

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

A consulta também pode ser semelhante à seguinte:

ALTER AUTHORIZATION ON Parts.Sprockets TO MichikoOsada;
GO

Se o esquema de objetos não for incluído como parte da instrução, o Mecanismo de Banco de Dados procurará o objeto no esquema padrão de usuários. Por exemplo:

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

B. Transferir a propriedade de uma exibição ao proprietário do esquema

O exemplo a seguir transfere a propriedade da exibição ProductionView06 ao proprietário do esquema que a contém. A exibição está localizada dentro do esquema Production.

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

C. Transferir a propriedade de um esquema a um usuário

O exemplo a seguir transfere a propriedade do esquema SeattleProduction11 ao usuário SandraAlayo.

ALTER AUTHORIZATION ON SCHEMA::SeattleProduction11 TO SandraAlayo;
GO

D. Transferir a propriedade de um ponto de extremidade a um logon do SQL Server

O exemplo a seguir transfere a propriedade do ponto de extremidade CantabSalesServer1 a JaePak. Como o ponto de extremidade é um protegível em nível de servidor, o ponto de extremidade só pode ser transferido a uma entidade principal no nível de servidor.

Aplica-se a: SQL Server 2008 (10.0.x) e posterior.

ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak;
GO

E. Alterando o proprietário de uma tabela

Cada um dos exemplos a seguir altera o proprietário da tabela Sprockets no banco de dados Parts para o usuário do banco de dados 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. Alterar o proprietário de um banco de dados

Aplica-se a: SQL Server 2008 (10.0.x) e posterior, Analytics Platform System (PDW) e Banco de Dados SQL.

O exemplo a seguir alterar o proprietário do banco de dados Parts para o logon MichikoOsada.

ALTER AUTHORIZATION ON DATABASE::Parts TO MichikoOsada;

G. Alterando o proprietário de um banco de dados para um usuário do Microsoft Entra

No exemplo a seguir, um administrador do Microsoft Entra para SQL Server em uma organização com um domínio personalizado do Microsoft Entra chamado cqclinic.onmicrosoft.com, pode alterar a propriedade atual de um banco de dados targetDB e tornar um usuário richel@cqclinic.onmicorsoft.com existente do Microsoft Entra o novo proprietário do banco de dados usando o seguinte comando:

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

Confira também

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