ALTER AUTHORIZATION (Transact-SQL)
Si applica a: SQL Server Azure SQL Database
Istanza gestita di SQL di Azure Azure Synapse
Analytics Analytics
Platform System (PDW)
Modifica la proprietà di un'entità a protezione diretta.
Convenzioni 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 (10.0.x) e versioni successive, Azure SQL Database, Azure Synapse Analytics, Analytics Platform System (PDW). |
ASSEMBLY | Si applica a: SQL Server 2008 (10.0.x) e versioni successive, Azure SQL Database. |
ASYMMETRIC KEY | Si applica a: SQL Server 2008 (10.0.x) e versioni successive, Azure SQL Database. |
AVAILABILITY GROUP | Si applica a: SQL Server 2012 e versioni successive. |
CERTIFICATE | Si applica a: SQL Server 2008 (10.0.x) e versioni successive, Azure SQL Database. |
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, Azure SQL Database. 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, Azure SQL Database. |
FULLTEXT STOPLIST | Si applica a: SQL Server 2008 (10.0.x) e versioni successive, Azure SQL Database. |
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, Azure SQL Database. |
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, Azure SQL Database, Azure Synapse Analytics, Analytics Platform System (PDW). |
SEARCH PROPERTY LIST | Si applica a: SQL Server 2012 (11.x) e versioni successive, Azure SQL Database. |
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, Azure SQL Database. |
TYPE | Si applica a: SQL Server 2008 (10.0.x) e versioni successive, Azure SQL Database. |
XML SCHEMA COLLECTION | Si applica a: SQL Server 2008 (10.0.x) e versioni successive, Azure SQL Database. |
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. 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, che tengono conto della separazione tra entità di sicurezza e schemi introdotta 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à 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 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 utenti di Azure Active Directory con il database SQL, vedere Connessione al database SQL o ad Azure Synapse Analytics tramite l'autenticazione di Azure Active Directory.
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à 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 al valore di ObjectID di Azure AD assegnato a richel@cqclinic.onmicrosoft.com
. Quando un account utente di accesso con 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.
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;
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;
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 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 SQL in un utente di AD Azure
Nell'esempio seguente un amministratore di Azure Active Directory per SQL Server in un'organizzazione con una directory attiva denominata cqclinic.onmicrosoft.com
può modificare la proprietà corrente di un database targetDB
e impostare un utente AAD richel@cqclinic.onmicorsoft.com
come nuovo proprietario del database usando il comando seguente:
ALTER AUTHORIZATION ON database::targetDB TO [rachel@cqclinic.onmicrosoft.com];
In Azure AD è necessario racchiudere il nome utente tra parentesi quadre []
.
Vedere anche
OBJECTPROPERTY (Transact-SQL)TYPEPROPERTY (Transact-SQL)EVENTDATA (Transact-SQL)