ALTER AUTHORIZATION (Transact-SQL)

Aplica-se a: SQL Server (todas as versões com suporte) Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)

Altera a propriedade de um protegível.

Topic link iconConvenções de sintaxe do Transact-SQL

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

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.

Observação

Para ver a sintaxe do Transact-SQL para o SQL Server 2014 e versões anteriores, confira a Documentação das versões anteriores.

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 e versões posteriores, Banco de Dados SQL do Azure, Azure Synapse Analytics, PDW (Analytics Platform System).
ASSEMBLY Aplica-se a: SQL Server 2008 e posterior, Banco de Dados SQL do Azure.
ASYMMETRIC KEY Aplica-se a: SQL Server 2008 e posterior, 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 e posterior, Banco de Dados SQL do Azure.
CONTRACT Aplica-se a: SQL Server 2008 e posteriores.
DATABASE Aplica-se a: SQL Server 2008 e posterior, 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 e posteriores.
FULLTEXT CATALOG Aplica-se a: SQL Server 2008 e posterior, Banco de Dados SQL do Azure.
FULLTEXT STOPLIST Aplica-se a: SQL Server 2008 e posterior, Banco de Dados SQL do Azure.
MESSAGE TYPE Aplica-se a: SQL Server 2008 e posteriores.
REMOTE SERVICE BINDING Aplica-se a: SQL Server 2008 e posteriores.
ROLE Aplica-se a: SQL Server 2008 e posterior, Banco de Dados SQL do Azure.
ROUTE Aplica-se a: SQL Server 2008 e posteriores.
SCHEMA Aplica-se a: SQL Server 2008 e versões posteriores, Banco de Dados SQL do Azure, Azure Synapse Analytics, PDW (Analytics Platform System).
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 e posteriores.
SERVICE Aplica-se a: SQL Server 2008 e posteriores.
SYMMETRIC KEY Aplica-se a: SQL Server 2008 e versões posteriores, Banco de Dados SQL do Azure.
TYPE Aplica-se a: SQL Server 2008 e versões posteriores, Banco de Dados SQL do Azure.
XML SCHEMA COLLECTION Aplica-se a: SQL Server 2008 e versões posteriores, 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 no Azure AD.
  • Um usuário gerenciado (não um grupo) ou um aplicativo presente no Azure AD.

Se o novo proprietário for um usuário do Azure Active Directory, ele não poderá existir como um usuário no banco de dados em que o novo proprietário vá se tornar o novo DBO. Esse usuário do Azure AD deve primeiro ser removido do banco de dados antes de executar a instrução ALTER AUTHORIZATION alterando a propriedade de banco de dados para o novo usuário. Para obter mais informações de como configurar usuários do Azure Active Directory com o Banco de Dados SQL, confira Como se conectar ao Banco de Dados SQL ou ao Azure Synapse Analytics usando a Autenticação do Azure Active Directory.

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 em nível de serviço. (O administrador do SQL Azure provisionado quando o servidor de Banco de Dados SQL foi criado.)
  • O administrador do Azure Active Directory para o SQL Server do Azure.
  • 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 Azure AD Falha
Usuário do Azure AD Logon de Autenticação do SQL Server Sucesso
Usuário do Azure AD Usuário do Azure AD Sucesso

Para verificar um proprietário do banco de dados do Azure AD, execute o seguinte comando do 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 identificador (como 6D8B81F6-7C79-444C-8858-4AF896C03C67) que corresponde ao ObjectID do Azure AD atribuído a richel@cqclinic.onmicrosoft.com 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 os usuários do Azure AD como proprietários individuais do banco de dados, use um grupo do Azure AD como um membro da função fixa de banco de dados 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 Azure Active Directory (mydbogroup) um membro da função db_owner.

  1. Faça logon no SQL Server como administrador do Azure AD 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 Azure AD que deve ser o proprietário do banco de dados e adicioná-lo como um usuário ao banco de dados do usuário. Por exemplo:

    CREATE USER [mydbogroup] FROM EXTERNAL PROVIDER;
    
  3. No banco de dados de usuário, adicione o usuário que representa o grupo do Azure AD, como a função fixa de banco de dados db_owner. 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 Azure AD, eles perdem automaticamente as permissões de dbo do banco de dados.
  • Da mesma forma, se novos membros são adicionados ao mydbogroup grupo do Azure AD, eles obtêm automaticamente acesso de 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 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 e versões posteriores, PDW (Analytics Platform System), 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 do Banco de Dados SQL para um usuário do Azure AD

No exemplo a seguir, um administrador do Azure Active Directory para o SQL Server em uma organização com um Active Directory denominado cqclinic.onmicrosoft.com poderá alterar a propriedade atual de um banco de dados targetDB e tornar um usuário do AAD richel@cqclinic.onmicorsoft.com o novo proprietário do banco de dados do usando o seguinte comando:

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

O Azure AD exige colchetes [] em volta do nome de usuário.

Consulte Também

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