ALTER AUTHORIZATION (Transact-SQL)

Si applica a:yes SQL Server (tutte le versioni supportate) database SQL di Azure Istanza gestita di SQL di Azure YesyesAzure Synapse Analytics Analytics yesPlatform System (PDW) Yes

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

Topic link iconConvenzioni di sintassi Transact-SQL

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

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.

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

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 e versioni successive, database SQL di Azure, Azure Synapse Analytics, Analytics Platform System (PDW).
ASSEMBLY SI APPLICA A: SQL Server 2008 e versioni successive, database SQL di Azure.
ASYMMETRIC KEY SI APPLICA A: SQL Server 2008 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 e versioni successive, database SQL di Azure.
CONTRACT SI APPLICA A: SQL Server 2008 e versioni successive.
DATABASE SI APPLICA A: SQL Server 2008 e versioni successive, database SQL di Azure. Per altre informazioni, vedere ALTER AUTHORIZATION per i database.
ENDPOINT SI APPLICA A: SQL Server 2008 e versioni successive.
FULLTEXT CATALOG SI APPLICA A: SQL Server 2008 e versioni successive, database SQL di Azure.
FULLTEXT STOPLIST SI APPLICA A: SQL Server 2008 e versioni successive, database SQL di Azure.
MESSAGE TYPE SI APPLICA A: SQL Server 2008 e versioni successive.
REMOTE SERVICE BINDING SI APPLICA A: SQL Server 2008 e versioni successive.
ROLE SI APPLICA A: SQL Server 2008 e versioni successive, database SQL di Azure.
ROUTE SI APPLICA A: SQL Server 2008 e versioni successive.
SCHEMA SI APPLICA A: SQL Server 2008 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 e versioni successive.
SERVICE SI APPLICA A: SQL Server 2008 e versioni successive.
SYMMETRIC KEY SI APPLICA A: SQL Server 2008 e versioni successive, database SQL di Azure.
TYPE SI APPLICA A: SQL Server 2008 e versioni successive, database SQL di Azure.
XML SCHEMA COLLECTION SI APPLICA A: SQL Server 2008 e versioni successive, database SQL di Azure.

entity_name Nome dell'entità.

principal_name | NOME PROPRIETARIO SCHEMA dell'entità di sicurezza che possiede l'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à 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ò possedere un OGGETTO o TYPE contenuto da uno schema di proprietà di un altro utente del database. Si tratta di una modifica del comportamento da 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.

Impossibile trasferire la proprietà delle entità seguenti: server collegati, statistiche, vincoli, regole, impostazioni predefinite, trigger, code di Service Broker, credenziali, funzioni di partizione, schemi di partizione, chiavi master del database, chiave master del servizio e notifiche degli 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 è cambiato dal comportamento nelle versioni precedenti di SQL Server. È possibile che il codice in cui gli schemi sono equivalenti agli utenti del database non restituisca risultati corretti. Le viste del catalogo precedenti, inclusa sysobjects, non devono essere usate in un database in cui è stata usata una delle istruzioni DDL 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, Le nuove viste del catalogo tengono conto della separazione delle entità e degli schemi introdotti in SQL Server 2005 (9,x). Per ulteriori 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.
TYPE 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à proprietario deve essere una delle 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 deve avere l'autorizzazione IMPERSONATE per il nuovo account di accesso proprietario.

Per database SQL di Azure

Requisiti per il nuovo proprietario: La nuova entità proprietario deve essere una delle seguenti:

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

Se il nuovo proprietario è un utente di Azure Active Directory, non può esistere come utente nel database in cui il nuovo proprietario diventerà il nuovo proprietario del database. È necessario rimuovere l'utente di Azure AD dal database prima di eseguire l'istruzione ALTER AUTHORIZATION che modifica la proprietà del database impostandola sul nuovo utente. Per altre informazioni sulla configurazione di un Azure Active Directory utenti con database SQL, vedere Connessione a database SQL o Azure Synapse Analytics usando l'autenticazione Azure Active Directory.

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

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

  • L'account di accesso dell'entità di livello servizio (l'amministratore di SQL Azure indicato durante la creazione del server di database SQL).
  • L'amministratore di Azure Active Directory per il server SQL di Azure.
  • 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 Operazione completata
Account di accesso con autenticazione di SQL Server Utente di Azure AD Esito negativo
Utente di Azure AD Account di accesso con autenticazione di SQL Server Operazione completata
Utente di Azure AD Utente di Azure AD Operazione completata

Per verificare un proprietario del database di Azure AD, 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 identificatore ,ad esempio 6D8B81F6-7C79-444C-8858-4AF896C03C67, che corrisponde a Azure AD ObjectID assegnato a Quando un utente di accesso di richel@cqclinic.onmicrosoft.com autenticazione SQL Server è il proprietario del database, 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 Azure AD come singoli proprietari del database, usare un gruppo di Azure AD 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 trasformare un gruppo di Azure Active Directory (mydbogroup) in un membro del ruolo db_owner.

  1. Accedere a SQL Server come amministratore di Azure AD e modificare il proprietario del database in un account di accesso con 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 di Azure AD che diventerà 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 di Azure AD 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 di Azure AD, perdono automaticamente le autorizzazioni dbo per il database.
  • Analogamente, i nuovi membri aggiunti al gruppo di Azure Active Directory mydbogroup, ottengono l'accesso dbo per il 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 nell'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 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 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 SQL in un utente di AD Azure

Nell'esempio seguente un amministratore di Azure Active Directory per SQL Server in un'organizzazione con un'istanza di active directory denominata cqclinic.onmicrosoft.com, può modificare la proprietà corrente di un database e creare un utente richel@cqclinic.onmicorsoft.com AAD il nuovo proprietario del database targetDB usando il comando seguente:

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

Azure AD richiede parentesi quadre [] intorno al nome utente.

Vedere anche

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