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
).
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;
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;
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)