Condividi tramite


ALTER AUTHORIZATION (Transact-SQL)

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure endpoint di analisi SQL di Azure Synapse AnalyticsPlatform System (PDW)in Microsoft FabricWarehouse nel database SQL di Microsoft Fabricin 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
OGGETTO Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure, Azure Synapse Analytics, Analytics Platform System (PDW).
ASSEMBLEA/ASSEMBLAGGIO Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.
CHIAVE ASIMMETRICA Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.
GRUPPO DI DISPONIBILITÀ Si applica a: SQL Server 2012 e versioni successive.
CERTIFICATO Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.
CONTRATTO Si applica a: SQL Server 2008 (10.0.x) e versioni successive.
BANCA DATI 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.
punto finale Si applica a: SQL Server 2008 (10.0.x) e versioni successive.
CATALOGO TESTO COMPLETO Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.
Lista di Parole Escluse per il Testo Completo Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.
TIPO DI MESSAGGIO Si applica a: SQL Server 2008 (10.0.x) e versioni successive.
COLLEGAMENTO AL SERVIZIO REMOTO Si applica a: SQL Server 2008 (10.0.x) e versioni successive.
RUOLO Si applica a: SQL Server 2008 (10.0.x) e versioni successive, database SQL di Azure.
PERCORSO 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).
ELENCO RICERCA IMMOBILI Si applica a: SQL Server 2012 (11.x) e versioni successive, database SQL di Azure.
RUOLO SERVER Si applica a: SQL Server 2008 (10.0.x) e versioni successive.
SERVIZIO Si applica a: SQL Server 2008 (10.0.x) e versioni successive.
CHIAVE SIMMETRICA 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.
Collezione XML Schema 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.

Nota

Gli schemi non sono equivalenti agli utenti del database. Usare le viste del catalogo di sistema per identificare eventuali differenze tra gli utenti del database e gli schemi.

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
OGGETTO 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.
CHIAVE SIMMETRICA 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.
punto finale 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:

Esecutore Destinazione Risultato
Account di accesso con autenticazione di SQL Server Account di accesso con autenticazione di SQL Server Successo
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 Successo
Utente di Microsoft Entra Utente di Microsoft Entra Successo

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 mydbogroup di Microsoft Entra group ().

  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 [email protected] esistente di Microsoft Entra il nuovo proprietario del database usando il comando seguente:

ALTER AUTHORIZATION ON database::targetDB TO [[email protected]];

Vedi anche

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