ALTER USER (Transact-SQL)
Rinomina un utente del database oppure ne modifica lo schema predefinito.
Convenzioni della sintassi Transact-SQL
Sintassi
ALTER USER userName
WITH <set_item> [ ,...n ]
<set_item> ::=
NAME = newUserName
| DEFAULT_SCHEMA = { schemaName | NULL }
| LOGIN = loginName
| PASSWORD = 'password' [ OLD_PASSWORD = 'oldpassword' ]
| DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }
Argomenti
userName
Specifica il nome con cui viene identificato l'utente all'interno del database.LOGIN **=**loginName
Modifica il mapping di un utente associandolo a un altro account di accesso, modificando l'ID di sicurezza (SID) dell'utente in modo che corrisponda all'ID di sicurezza dell'account di accesso.NAME **=**newUserName
Specifica il nuovo nome dell'utente. newUserName non deve essere già presente nel database corrente.DEFAULT_SCHEMA = { schemaName | NULL }
Specifica il primo schema nel quale il server eseguirà una ricerca durante la risoluzione dei nomi di oggetti per l'utente. L'impostazione dello schema predefinito su NULL comporta la rimozione di uno schema predefinito da un gruppo di Windows. Non è possibile utilizzare NULL con un utente di Windows.PASSWORD = 'password'
Specifica la password per l'utente che viene modificato. Per le password viene fatta distinzione tra maiuscole e minuscole.[!NOTA]
Questa opzione è disponibile solo per gli utenti contenuti. Per ulteriori informazioni, vedere Database indipendenti e sp_migrate_user_to_contained (Transact-SQL).
OLD_PASSWORD ='oldpassword'
Password dell'utente corrente che verrà sostituita da 'password'. Per le password viene fatta distinzione tra maiuscole e minuscole. OLD_PASSWORD è necessaria per modificare una password, a meno che non si disponga dell'autorizzazione ALTER ANY USER. La richiesta di OLD_PASSWORD impedisce agli utenti con l'autorizzazione IMPERSONATION di modificare la password.[!NOTA]
Questa opzione è disponibile solo per gli utenti contenuti.
DEFAULT_LANGUAGE ={ NONE | <lcid> | <language name> | <language alias> }
Specifica una lingua predefinita da assegnare all'utente. Se questa opzione è impostata su NONE, la lingua predefinita viene impostata sulla lingua predefinita corrente del database. Se la lingua predefinita del database viene modificata in seguito, la lingua predefinita dell'utente rimarrà invariata. DEFAULT_LANGUAGE può essere l'ID locale (lcid), il nome della lingua o l'alias della lingua.[!NOTA]
È possibile specificare questa opzione solo in un database indipendente e solo per utenti contenuti.
Osservazioni
Lo schema predefinito sarà il primo schema in cui verrà eseguita la ricerca nel server durante la risoluzione dei nomi di oggetti per l'utente del database. Se non specificato diversamente, lo schema predefinito sarà il proprietario degli oggetti creati dall'utente del database.
Se l'utente dispone di uno schema predefinito, verrà utilizzato tale schema. Se l'utente non dispone di uno schema predefinito, ma è un membro di un gruppo che dispone di uno schema predefinito, verrà utilizzato lo schema predefinito del gruppo. Se l'utente non dispone di uno schema predefinito ed è un membro di più gruppi, lo schema predefinito per l'utente sarà quello del gruppo di Windows con principal_id inferiore e uno schema predefinito impostato in modo esplicito. Se non può essere determinato alcuno schema predefinito per un utente, viene utilizzato lo schema dbo.
È possibile impostare DEFAULT_SCHEMA su uno schema non attualmente presente nel database. È pertanto possibile assegnare uno schema predefinito tramite DEFAULT_SCHEMA a un utente prima della creazione dello schema.
Non è possibile specificare DEFAULT_SCHEMA per un utente di cui è stato eseguito il mapping a un certificato o a una chiave asimmetrica.
Importante |
---|
Il valore di DEFAULT_SCHEMA viene ignorato se l'utente è un membro del ruolo predefinito del server sysadmin. Tutti i membri del ruolo predefinito del server sysadmin dispongono di uno schema predefinito di dbo. |
È possibile modificare il nome di un utente sul quale viene eseguito il mapping a un account di accesso o a un gruppo di Windows solo se il SID del nuovo nome utente corrisponde al SID registrato nel database. Questa verifica consente di impedire lo spoofing degli account di accesso di Windows nel database.
La clausola WITH LOGIN consente di modificare il mapping di un utente associandolo a un account di accesso diverso. Tramite questa clausola non è possibile modificare il mapping di utenti senza un account accesso, utenti sui quali viene eseguito il mapping a un certificato o utenti sui quali viene eseguito il mapping a una chiave asimmetrica. È possibile modificare il mapping solo di utenti di SQL e di utenti (o gruppi) di Windows. Non è possibile utilizzare la clausola WITH LOGIN per modificare il tipo di utente, ad esempio modificando un account di Windows in un account di accesso di SQL Server.
Se vengono soddisfatte le seguenti condizioni, il nome dell'utente viene automaticamente modificando nel nome dell'account di accesso.
L'utente è un utente di Windows.
Il nome è un nome di Windows (contiene una barra rovesciata).
Non è stato specificato alcun nome.
Il nome corrente è diverso dal nome dell'account di accesso.
In caso contrario, l'utente non verrà rinominato, a meno che il chiamante non richiami anche la clausola NAME.
Il nome di un utente di cui è stato eseguito il mapping a un account di accesso di SQL Server, un certificato o una chiave asimmetrica non può contenere il carattere barra rovesciata (\).
Attenzione |
---|
A partire da SQL Server 2005, il funzionamento degli schemi è stato modificato. È pertanto possibile che il codice in cui gli schemi vengono considerati 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 tali database è invece necessario utilizzare le nuove viste del catalogo. Le nuove viste del catalogo prendono in considerazione la separazione tra entità e schemi introdotta in SQL Server 2005. Per ulteriori informazioni sulle viste del catalogo, vedere Viste del catalogo (Transact-SQL). |
Sicurezza
[!NOTA]
Un utente che dispone dell'autorizzazione ALTER ANY USER può modificare lo schema predefinito di qualsiasi utente. È possibile che un utente con uno schema modificato selezioni involontariamente i dati dalla tabella errata o esegua codice dallo schema errato.
Autorizzazioni
Per modificare il nome di un utente, è richiesta l'autorizzazione ALTER ANY USER.
Per modificare il nome utente, l'account di accesso di destinazione o il SID di un utente con autorizzazione CONTROL per il database è richiesta l'autorizzazione CONTROL per il database.
Per modificare la lingua o lo schema predefinito, è richiesta l'autorizzazione ALTER per l'utente. Gli utenti possono modificare solo il proprio schema predefinito o la lingua.
Esempi
A.Modifica del nome di un utente del database
Nell'esempio seguente il nome dell'utente del database Mary5 viene modificato in Mary51.
USE AdventureWorks2012;
ALTER USER Mary5 WITH NAME = Mary51;
GO
B.Modifica dello schema predefinito di un utente
Nell'esempio seguente lo schema predefinito dell'utente Mary51 viene modificato in Purchasing.
USE AdventureWorks2012;
ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing;
GO
C.Modifica contemporanea di diverse opzioni
Nell'esempio seguente vengono modificate diverse opzioni per un utente del database indipendente in un'istruzione.
USE AdventureWorks2012;
GO
ALTER USER Philip
WITH NAME = Philipe
, DEFAULT_SCHEMA = Development
, PASSWORD = 'W1r77TT98%ab@#’ OLD_PASSWORD = 'New Devel0per'
, DEFAULT_LANGUAGE = French ;
GO
Vedere anche
Riferimento
sp_migrate_user_to_contained (Transact-SQL)