Condividi tramite


ALTER AUTHORIZATION (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW) Endpoint di analisi SQL in Microsoft Fabric Warehouse in Microsoft Fabric

Modifica la proprietà di un'entità a protezione diretta.

Convenzioni relative alla sintassi Transact-SQL

Nota

Microsoft Entra ID era precedentemente conosciuto come Azure Active Directory (Azure AD).

Sintassi

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

Nota

Questa sintassi non è supportata da pool SQL serverless in Azure Synapse Analytics.

Argomenti

<class_type> Classe a protezione diretta dell'entità per cui viene modificato il proprietario. OBJECT è l'impostazione predefinita.

Classe Prodotto
OBJECT Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure, Azure Synapse Analytics, Analytics Platform System (PDW).
ASSEMBLY Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.
ASYMMETRIC KEY Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.
AVAILABILITY GROUP Si applica a: SQL Server 2012 e versioni successive.
CERTIFICATE Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.
CONTRACT Si applica a: SQL Server 2008 (10.0.x) e versioni successive.
DATABASE Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure. Per altre informazioni, vedere ALTER AUTHORIZATION per i database.
ENDPOINT Si applica a: SQL Server 2008 (10.0.x) e versioni successive.
FULLTEXT CATALOG Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.
FULLTEXT STOPLIST Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.
MESSAGE TYPE Si applica a: SQL Server 2008 (10.0.x) e versioni successive.
REMOTE SERVICE BINDING Si applica a: SQL Server 2008 (10.0.x) e versioni successive.
ROLE Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.
ROUTE Si applica a: SQL Server 2008 (10.0.x) e versioni successive.
SCHEMA Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure, Azure Synapse Analytics, Analytics Platform System (PDW).
SEARCH PROPERTY LIST Si applica a: SQL Server 2012 (11.x) e versioni successive, database SQL di Azure.
SERVER ROLE Si applica a: SQL Server 2008 (10.0.x) e versioni successive.
SERVICE Si applica a: SQL Server 2008 (10.0.x) e versioni successive.
SYMMETRIC KEY Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.
TIPO Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.
XML SCHEMA COLLECTION Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.

entity_name Nome dell'entità.

principal_name | SCHEMA OWNER Nome dell'entità di sicurezza proprietaria dell'entità. Gli oggetti di database devono essere di proprietà di un'entità di database oppure di un utente o ruolo del database. Gli oggetti server, ad esempio i database, devono essere di proprietà di un'entità server (un account di accesso). Specificare SCHEMA OWNER come *principal_name- per indicare che l'oggetto deve essere di proprietà dell'entità di sicurezza proprietaria dello schema dell'oggetto.

Osservazioni:

È possibile utilizzare l'istruzione ALTER AUTHORIZATION per modificare la proprietà di qualsiasi entità associata a un proprietario. La proprietà di entità incluse in un database può essere trasferita a qualsiasi entità a livello di database. La proprietà di entità a livello di server può essere trasferita solo a entità a livello di server.

Importante

A partire da SQL Server 2005 (9.x), un utente può essere proprietario di un oggetto OBJECT o TYPE contenuto in uno schema di proprietà di un altro utente di database. Si tratta di un comportamento diverso rispetto alle versioni precedenti di SQL Server. Per altre informazioni, vedere OBJECTPROPERTY (Transact-SQL) e TYPEPROPERTY (Transact-SQL).

È possibile trasferire la proprietà delle seguenti entità incluse nello schema di tipo "object": tabelle, viste, funzioni, procedure, code e sinonimi.

Non è possibile trasferire la proprietà di queste entità: server collegati, statistiche, vincoli, regole, valori predefiniti, trigger, code di Service Broker, credenziali, funzioni di partizione, schemi di partizione, chiavi master del database, chiavi master del servizio e notifiche di eventi.

Non è possibile trasferire la proprietà di membri delle classi a protezione diretta seguenti: server, account di accesso, utenti, ruoli applicazione e colonne.

L'opzione SCHEMA OWNER è valida solo in caso di trasferimento della proprietà di un'entità inclusa nello schema. L'opzione SCHEMA OWNER trasferirà la proprietà dell'entità al proprietario dello schema in cui si trova. Solo le entità della classe OBJECT, TYPE o XML SCHEMA COLLECTION sono incluse nello schema.

Se l'entità di destinazione non è un database e l'entità sta per essere trasferita a un nuovo proprietario, verranno eliminate tutte le autorizzazioni per la destinazione.

Attenzione

In SQL Server 2005 (9.x) il comportamento degli schemi è diverso rispetto alle versioni precedenti di SQL Server. È possibile che il codice in cui gli schemi sono equivalenti agli utenti del database non restituisca risultati corretti. Non utilizzare le viste del catalogo delle versioni precedenti, inclusa sysobjects, nei database in cui sia già stata utilizzata una delle istruzioni DLL seguenti: 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. In questi database è necessario usare le nuove viste del catalogo, che tengono conto della separazione tra entità di sicurezza e schemi introdotta in SQL Server 2005 (9.x). Per altre informazioni sulle viste del catalogo, vedere Viste del catalogo (Transact-SQL).

Si noti inoltre quanto segue:

Importante

L'unico modo affidabile per individuare il proprietario di un oggetto consiste nell'eseguire una query sulla vista del catalogo sys.objects. L'unico modo affidabile per cercare il proprietario di un tipo consiste nell'utilizzare la funzione TYPEPROPERTY.

Casi e condizioni speciali

Nella tabella seguente sono elencati casi, eccezioni e condizioni speciali validi per la modifica delle autorizzazioni.

Classe Condizione
OBJECT Non è possibile modificare la proprietà di trigger, vincoli, regole, valori predefiniti, statistiche, oggetti di sistema, code, viste indicizzate o tabelle con viste indicizzate.
SCHEMA In caso di trasferimento della proprietà, verranno eliminate le autorizzazioni per gli oggetti inclusi nello schema che non dispongono di proprietari espliciti. Non è possibile modificare il proprietario di sys, dbo o information_schema.
TIPO Non è possibile modificare la proprietà di una classe TYPE appartenente a sys o information_schema.
CONTRACT, MESSAGE TYPE o SERVICE Non è possibile modificare la proprietà delle entità di sistema.
SYMMETRIC KEY Non è possibile modificare la proprietà delle chiavi temporanee globali.
CERTIFICATE o ASYMMETRIC KEY Non è possibile trasferire la proprietà di queste entità a un ruolo o gruppo.
ENDPOINT L'entità deve essere un account di accesso.

ALTER AUTHORIZATION per i database

Per SQL Server

Requisiti per il nuovo proprietario: la nuova entità di sicurezza proprietaria deve essere uno degli elementi seguenti:

  • Un account di accesso con autenticazione di SQL Server.
  • Un account di accesso con autenticazione di Windows che rappresenta un utente di Windows (non un gruppo).
  • Un utente di Windows che esegue l'autenticazione usando un account di accesso con autenticazione di Windows che rappresenta un gruppo di Windows.

Requisiti per la persona che esegue l'istruzione ALTER AUTHORIZATION: se non si è membri del ruolo predefinito del server sysadmin, è necessario avere almeno l'autorizzazione TAKE OWNERSHIP per il database e l'autorizzazione IMPERSONATE per il nuovo account di accesso proprietario.

Per il database SQL di Azure

Requisiti per il nuovo proprietario: la nuova entità di sicurezza proprietaria deve essere uno degli elementi seguenti:

  • Un account di accesso con autenticazione di SQL Server.
  • Un utente federato (non un gruppo) presente in Microsoft Entra ID.
  • Un utente gestito (non un gruppo) o un'applicazione presente in Microsoft Entra ID.

Se il nuovo proprietario è un utente di Microsoft Entra, non può esistere come utente nel database in cui il nuovo proprietario diventerà il nuovo proprietario del database (dbo). L'utente di Microsoft Entra deve essere rimosso dal database prima di eseguire l'istruzione ALTER AUTHORIZATION che modifica la proprietà del database al nuovo utente. Per altre informazioni sulla configurazione degli utenti di Microsoft Entra con database SQL, vedere Configurare l'autenticazione di Microsoft Entra.

Requisiti per la persona che esegue l'istruzione ALTER AUTHORIZATION: è necessario connettersi al database di destinazione per modificare il proprietario di questo database.

Il proprietario di un database può essere modificato dai tipi seguenti di account.

  • L'account di accesso dell'entità a livello di servizio, ovvero l'amministratore SQL di cui è stato effettuato il provisioning al momento della creazione del server logico in Azure .
  • Amministratore di Microsoft Entra per il server logico.
  • Il proprietario corrente del database.

Nella tabella seguente vengono riepilogati i requisiti:

Executor Destinazione Risultato
Account di accesso con autenticazione di SQL Server Account di accesso con autenticazione di SQL Server Success
Account di accesso con autenticazione di SQL Server Utente di Microsoft Entra Errore
Utente di Microsoft Entra Account di accesso con autenticazione di SQL Server Success
Utente di Microsoft Entra Utente di Microsoft Entra Success

Per verificare un proprietario di Microsoft Entra del database, eseguire il comando Transact-SQL seguente in un database utente (in questo esempio testdb).

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

L'output sarà un GUID (ad esempio XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXX) che corrisponde all'ID oggetto dell'utente o dell'entità servizio Microsoft Entra assegnato come proprietario del database. È possibile verificarlo controllando l'ID oggetto dell'utente in Microsoft Entra ID. Quando il proprietario del database è un account di accesso con autenticazione di SQL Server, eseguire l'istruzione seguente nel database master per verificare il proprietario del database:

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;

Procedura consigliata

Anziché usare gli utenti di Microsoft Entra come singoli proprietari del database, usare un gruppo Microsoft Entra come membro del ruolo predefinito del database db_owner . La procedura seguente illustra come configurare un account di accesso disabilitato come proprietario del database e come membro del ruolo di db_owner di Microsoft Entra group (mydbogroup).

  1. Accedere a SQL Server come amministratore di Microsoft Entra e modificare il proprietario del database in un account di accesso di autenticazione di SQL Server disabilitato. Ad esempio, eseguire il comando seguente dal database utente:

    ALTER AUTHORIZATION ON database::testdb TO DisabledLogin;
    
  2. Creare un gruppo Microsoft Entra che deve essere proprietario del database e aggiungerlo come utente al database utente. Ad esempio:

    CREATE USER [mydbogroup] FROM EXTERNAL PROVIDER;
    
  3. Nel database utente aggiungere l'utente che rappresenta il gruppo Microsoft Entra al ruolo predefinito del database db_owner . Ad esempio:

    ALTER ROLE db_owner ADD MEMBER mydbogroup;
    

A questo punto i membri mydbogroup possono gestire centralmente il database come membri del ruolo db_owner.

  • Quando i membri di questo gruppo vengono rimossi dal gruppo Microsoft Entra, perdono automaticamente le autorizzazioni dbo per questo database.
  • Analogamente, se i nuovi membri vengono aggiunti al mydbogroup gruppo Microsoft Entra, ottengono automaticamente l'accesso dbo per questo database.

Per verificare se un utente specifico dispone dell'autorizzazione dbo valida, l'utente deve eseguire l'istruzione seguente:

SELECT IS_MEMBER ('db_owner');

Se il valore restituito è 1, significa che l'utente è un membro del ruolo.

Autorizzazioni

È richiesta l'autorizzazione TAKE OWNERSHIP per l'entità. Se il nuovo proprietario non è l'utente che sta eseguendo l'istruzione 1) è richiesta l'autorizzazione IMPERSONATE per il nuovo proprietario se si tratta di un utente o un account di accesso, oppure 2) se il nuovo proprietario è un ruolo, è richiesta l'appartenenza al ruolo o l'autorizzazione ALTER per tale ruolo, oppure 3) se il nuovo proprietario è un ruolo applicazione, è richiesta l'autorizzazione ALTER per il ruolo applicazione.

Esempi

R. Trasferire la proprietà di una tabella

Nell'esempio seguente la proprietà della tabella Sprockets viene trasferita all'utente MichikoOsada. La tabella è inclusa nello schema Parts.

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

La query potrebbe essere simile alla seguente:

ALTER AUTHORIZATION ON Parts.Sprockets TO MichikoOsada;
GO

Se lo schema degli oggetti non è incluso come parte dell'istruzione, il motore di database cercherà l'oggetto nello schema predefinito degli utenti. Ad esempio:

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

B. Trasferire la proprietà di una vista al proprietario dello schema

Nell'esempio seguente la proprietà della vista ProductionView06 viene trasferita al proprietario dello schema che la contiene. La vista è inclusa nello schema Production.

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

C. Trasferire la proprietà di uno schema a un utente

Nell'esempio seguente la proprietà dello schema SeattleProduction11 viene trasferita all'utente SandraAlayo.

ALTER AUTHORIZATION ON SCHEMA::SeattleProduction11 TO SandraAlayo;
GO

D. Trasferire la proprietà di un endpoint a un account di accesso di SQL Server

Nell'esempio seguente la proprietà dell'endpoint CantabSalesServer1 viene trasferita a JaePak. Poiché è un'entità a protezione diretta a livello di server, l'endpoint può essere trasferito solo a un'entità a livello di server.

Si applica a: SQL Server 2008 (10.0.x) e versioni successive.

ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak;
GO

E. Modifica del proprietario di una tabella

In tutti gli esempi seguenti il proprietario della tabella Sprockets nel database Parts viene modificato nell'utente database 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. Modifica del proprietario di un database

Si applica a: SQL Server 2008 (10.0.x) e versioni successive, Analytics Platform System (PDW), database SQL.

Nell'esempio seguente il proprietario del database Parts viene modificato nell'account di accesso MichikoOsada.

ALTER AUTHORIZATION ON DATABASE::Parts TO MichikoOsada;

G. Modifica del proprietario di un database in un utente di Microsoft Entra

Nell'esempio seguente, un amministratore di Microsoft Entra per SQL Server in un'organizzazione con un dominio Microsoft Entra personalizzato denominato cqclinic.onmicrosoft.com, può modificare la proprietà corrente di un database targetDB e rendere un utente richel@cqclinic.onmicorsoft.com esistente di Microsoft Entra il nuovo proprietario del database usando il comando seguente:

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

Vedi anche

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