ALTER AUTHORIZATION (Transact-SQL)

Modifica la proprietà di un oggetto a protezione diretta.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

ALTER AUTHORIZATION
   ON [ <class_type>:: ] entity_name
   TO { SCHEMA OWNER | principal_name }

<class_type> ::=
    {
        OBJECT | ASSEMBLY | ASYMMETRIC KEY | CERTIFICATE 
    | CONTRACT | TYPE | DATABASE | ENDPOINT | FULLTEXT CATALOG 
    | FULLTEXT STOPLIST | MESSAGE TYPE | REMOTE SERVICE BINDING
    | ROLE | ROUTE | SCHEMA | SERVICE | SYMMETRIC KEY 
    | XML SCHEMA COLLECTION
    }

Argomenti

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

  • entity_name
    Nome dell'entità.

  • principal_name
    Nome dell'entità server o di database a cui verrà trasferita la proprietà dell'entità.

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.

Nota importanteImportante

A partire da SQL Server 2005, un utente può essere proprietario di un elemento OBJECT o TYPE contenuto in uno schema di proprietà di un altro utente di database, diversamente da quanto consentito nelle versioni precedenti di SQL Server. Per ulteriori informazioni, vedere Separazione tra schema e utente, 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à delle entità seguenti: 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 di attenzioneAttenzione

Il comportamento degli schemi in SQL Server 2005 è 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 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 utilizzare le nuove viste del catalogo, in cui si tiene conto della separazione tra entità e schemi introdotta in SQL Server 2005. Per ulteriori informazioni sulle viste del catalogo, vedere Viste del catalogo (Transact-SQL).

Si noti inoltre quanto segue:

Nota importanteImportante

L'unico modo affidabile per cercare 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

DATABASE

Non è possibile modificare il proprietario dei database di sistema master, model e tempdb, del database delle risorse o di un database utilizzato come database di distribuzione. L'entità deve essere un account di accesso. Se l'entità è un account di accesso di Windows senza un account di accesso di SQL Server corrispondente, l'entità deve disporre delle autorizzazioni CONTROL SERVER e TAKE OWNERSHIP per il database. Se l'entità è un account di accesso di SQL Server, l'entità non può essere mappata a un certificato o una chiave asimmetrica. Gli alias dipendenti verranno mappati al nuovo proprietario di database. Il SID DBO verrà aggiornato nel database corrente e nel database sys.databases.

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.

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

A. Trasferimento della 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

B. Trasferimento della 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. Trasferimento della 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. Trasferimento della 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.

ALTER AUTHORIZATION ON ENDPOINT::CantabSalesServer1 TO JaePak;
GO