CREATE USER (Transact-SQL)
Aggiunge un utente al database corrente. Esistono undici tipi di utenti:
Utenti basati sugli account di accesso nel database master: tipo di utente più comune.
Utente basato su un account di accesso basato su un utente di Windows.
Utente basato su un account di accesso basato su un gruppo di Windows.
Utente basato su un account di accesso che utilizza l'autenticazione di SQL Server.
Utenti che eseguono l'autenticazione a livello di database: consentiti unicamente in un database indipendente.
Utente basato su un utente di Windows che non dispone di account di accesso.
Utente basato su un gruppo di Windows che non dispone di account di accesso.
Utente del database indipendente con password.
Utenti basati sulle entità di Windows che si connettono tramite account di accesso del gruppo di Windows
Utente basato su un utente di Windows che non dispone di account di accesso, ma che può connettersi al Motore di database tramite l'appartenenza a un gruppo di Windows.
Utente basato su un gruppo di Windows che non dispone di account di accesso, ma che può connettersi al Motore di database tramite l'appartenenza a un gruppo di Windows diverso.
Utenti che non possono eseguire l'autenticazione: questi utenti non possono effettuare l'accesso a SQL Server.
Utente che non dispone di account di accesso. Non può effettuare l'accesso ma è possibile concedergli autorizzazioni.
Utente basato su un certificato. Non può effettuare l'accesso, ma può firmare moduli ed è possibile concedergli autorizzazioni.
Utente basato su una chiave asimmetrica. Non può effettuare l'accesso, ma può firmare moduli ed è possibile concedergli autorizzazioni.
Convenzioni della sintassi Transact-SQL
Sintassi
Users based on logins in master
CREATE USER user_name
[
{ FOR | FROM } LOGIN login_name
]
[ WITH DEFAULT_SCHEMA = schema_name ]
[ ; ]
Users that authenticate at the database
CREATE USER
{
windows_principal [ WITH <options_list> [ ,... ] ]
| user_name WITH PASSWORD = 'password' [ , <options_list> [ ,... ]
}
[ ; ]
Users based on Windows principals that connect through Windows group logins
CREATE USER
{
windows_principal [ { FOR | FROM } LOGIN windows_principal ]
| user_name { FOR | FROM } LOGIN windows_principal
}
[ WITH DEFAULT_SCHEMA = schema_name ]
[ ; ]
Users that cannot authenticate
CREATE USER user_name
{
WITHOUT LOGIN [ WITH DEFAULT_SCHEMA = schema_name ]
| { FOR | FROM } CERTIFICATE cert_name
| { FOR | FROM } ASYMMETRIC KEY asym_key_name
}
[ ; ]
<options_list> ::=
DEFAULT_SCHEMA = schema_name
| DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
| SID = sid
Argomenti
user_name
Specifica il nome con cui viene identificato l'utente all'interno del database. user_name è di tipo sysname. Non può superare la lunghezza di 128 caratteri. Quando si crea un utente basato su un'entità di Windows, il nome dell'entità di Windows diventa il nome utente, a meno che non ne sia stato specificato un altro.LOGIN login_name
Specifica l'account di accesso per cui viene creato l'utente del database. login_name deve essere un account di accesso valido nel server. Può essere un account di accesso basato su un'entità di Windows (utente o gruppo) o un account di accesso che utilizza l'autenticazione di SQL Server. Quando si accede al database tramite questo account di accesso di SQL Server, si acquisisce il nome e l'ID dell'utente del database che si sta creando. Quando si crea un account di accesso con mapping da un'entità di Windows, utilizzare il formato [<domainName>\<loginName>]. Per gli esempi, vedere Riepilogo della sintassi.WITH DEFAULT_SCHEMA = schema_name
Specifica il primo schema in cui verrà eseguita una ricerca nel server durante la risoluzione dei nomi di oggetti per l'utente del database.windows_principal'
Specifica l'entità di Windows per la quale viene creato l'utente del database. windows_principal può essere un utente o un gruppo di Windows. L'utente verrà creato anche se windows_principal non dispone di un account di accesso. Quando si effettua la connessione a SQL Server, se windows_principal non dispone di un account di accesso, l'entità di Windows deve eseguire l'autenticazione a livello del Motore di database tramite l'appartenenza a un gruppo di Windows che dispone di un account di accesso. In alternativa, la stringa di connessione deve specificare il database indipendente come catalogo iniziale. Quando si crea un utente da un'entità di Windows, utilizzare il formato [<domainName>\<loginName>]. Per gli esempi, vedere Riepilogo della sintassi.WITH PASSWORD = 'password'
Può essere utilizzato solo in un database indipendente. Specifica la password per l'utente che viene creato.WITHOUT LOGIN
Specifica che sull'utente non deve essere eseguito il mapping a un account di accesso esistente.CERTIFICATE cert_name
Specifica il certificato per cui viene creato l'utente del database.ASYMMETRIC KEY asym_key_name
Specifica la chiave asimmetrica per cui viene creato l'utente del database.DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }
Specifica la lingua predefinita per il nuovo utente. Se per l'utente viene specificata una lingua predefinita e la lingua predefinita del database viene modificata in seguito, la lingua predefinita dell'utente rimane quella specificata. Se non viene specificata alcuna lingua predefinita, la lingua predefinita dell'utente sarà la lingua predefinita del database. Se per l'utente non viene specificata la lingua predefinita e la lingua predefinita del database viene modificata in seguito, la lingua predefinita dell'utente sarà la nuova lingua predefinita del database.Importante DEFAULT_LANGUAGE viene utilizzato unicamente per l'utente di un database indipendente.
SID = sid
Si applica solo agli utenti con password (autenticazione di SQL Server) in un database indipendente. Specifica il SID del nuovo utente del database. Se questa opzione è inclusa, tramite SQL Server viene assegnato un SID automaticamente. Utilizzare il parametro SID per creare utenti in più database con la stessa identità (SID). Ciò risulta utile per la creazione di utenti in più database per preparare il failover AlwaysOn. Per determinare il SID di un utente, eseguire una query su sys.database_principals.
Osservazioni
Se si omette FOR LOGIN, per il nuovo utente del database verrà eseguito il mapping all'account di accesso di SQL Server con lo stesso nome.
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. Non è possibile selezionare in modo esplicito uno degli schemi predefiniti disponibili come schema preferito. Se non può essere determinato alcuno schema predefinito per un utente, viene utilizzato lo schema dbo.
È possibile impostare DEFAULT_SCHEMA prima della creazione dello schema a cui punta.
Non è possibile specificare DEFAULT_SCHEMA quando si crea un utente con mapping a un certificato o a una chiave asimmetrica.
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.
La clausola WITHOUT LOGIN crea un utente su cui non è stato eseguito il mapping a un account di accesso di SQL Server. Può connettersi ad altri database come guest. È possibile concedere autorizzazioni a questo utente senza account di accesso. Quando il contesto di sicurezza viene modificato in un utente senza account di accesso, gli utenti originali ricevono le autorizzazioni dell'utente senza account di accesso. Vedere l'esempio D. Creazione e utilizzo di un utente senza account di accesso.
Solo gli utenti di cui è stato eseguito il mapping a entità di Windows possono contenere un carattere barra rovesciata (\).
Non è possibile utilizzare CREATE USER per creare un utente guest perché l'utente guest esiste già all'interno di ogni database. È possibile abilitare l'utente guest concedendogli l'autorizzazione CONNECT, come illustrato di seguito:
GRANT CONNECT TO guest;
GO
Le informazioni sugli utenti del database sono visibili nella vista del catalogo sys.database_principals.
Riepilogo della sintassi
Utenti basati su account di accesso nel database master
Nell'elenco seguente viene illustrata la sintassi possibile per gli utenti basati su account di accesso. Le opzioni dello schema predefinito non sono elencate.
CREATE USER [Domain1\WindowsUserBarry]
CREATE USER [Domain1\WindowsUserBarry] FOR LOGIN Domain1\WindowsUserBarry
CREATE USER [Domain1\WindowsUserBarry] FROM LOGIN Domain1\WindowsUserBarry
CREATE USER [Domain1\WindowsGroupManagers]
CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]
CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]
CREATE USER SQLAUTHLOGIN
CREATE USER SQLAUTHLOGIN FOR LOGIN SQLAUTHLOGIN
CREATE USER SQLAUTHLOGIN FROM LOGIN SQLAUTHLOGIN
Utenti che eseguono l'autenticazione a livello del database
Nell'elenco seguente viene illustrata la sintassi possibile per gli utenti che possono essere utilizzati solo in un database indipendente. Gli utenti creati non saranno correlati ad alcun account di accesso nel database master. Le opzioni della lingua e dello schema predefinito non sono elencate.
Nota sulla sicurezza |
---|
Questa sintassi concede agli utenti l'accesso al database e il nuovo accesso al Motore di database. |
CREATE USER [Domain1\WindowsUserBarry]
CREATE USER [Domain1\WindowsGroupManagers]
CREATE USER Barry WITH PASSWORD = 'sdjklalie8rew8337!$d'
Utenti basati su entità di Windows senza account di accesso nel database master
Nell'elenco seguente viene illustrata la sintassi possibile per gli utenti che dispongono dell'accesso al Motore di database attraverso un gruppo di Windows, ma che non dispongono di un account di accesso nel database master. Questa sintassi può essere utilizzata in tutti i tipi di database. Le opzioni della lingua e dello schema predefinito non sono elencate.
Questa sintassi è simile agli utenti basati su account di accesso nel database master, tuttavia questa categoria di utente non dispone di un account di accesso nel database master. L'utente deve disporre dell'accesso al Motore di database attraverso un account di accesso basato su un gruppo di Windows.
Questa sintassi è simile a utenti del database indipendente basati su entità di Windows, tuttavia questa categoria di utente non ottiene il nuovo accesso al Motore di database.
CREATE USER [Domain1\WindowsUserBarry]
CREATE USER [Domain1\WindowsUserBarry] FOR LOGIN Domain1\WindowsUserBarry
CREATE USER [Domain1\WindowsUserBarry] FROM LOGIN Domain1\WindowsUserBarry
CREATE USER [Domain1\WindowsGroupManagers]
CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]
CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]
Utenti che non eseguono l'autenticazione
Nell'elenco seguente viene illustrata la sintassi possibile per gli utenti che non possono effettuare l'accesso a SQL Server.
CREATE USER RIGHTSHOLDER WITHOUT LOGIN
CREATE USER CERTUSER FOR CERTIFICATE SpecialCert
CREATE USER CERTUSER FROM CERTIFICATE SpecialCert
CREATE USER KEYUSER FOR ASYMMETRIC KEY SecureKey
CREATE USER KEYUSER FROM ASYMMETRIC KEY SecureKey
Sicurezza
Quando si crea un utente si concede l'accesso a un database, ma non si concede automaticamente alcun accesso agli oggetti contenuti in un database. Dopo avere creato un utente, le azioni comuni consistono nell'aggiungere utenti a ruoli del database con autorizzazione ad accedere a oggetti del database o nel concedere autorizzazioni all'utente per gli oggetti.
Considerazioni speciali relative ai database indipendenti
Quando si effettua la connessione a un database indipendente, se l'utente non dispone di un account di accesso nel database master, la stringa di connessione deve includere il nome del database indipendente come catalogo iniziale. Il parametro del catalogo iniziale è sempre obbligatorio per un utente del database indipendente con password.
In un database indipendente, la creazione di utenti agevola la separazione del database dall'istanza del Motore di database. In questo modo, risulterà più facile spostare il database in un'altra istanza di SQL Server. Per ulteriori informazioni, vedere Database indipendenti. Per modificare un utente del database basato su un account di accesso dell'autenticazione di SQL Server in un utente del database indipendente con password, vedere sp_migrate_user_to_contained (Transact-SQL).
In un database indipendente non è necessario che gli utenti dispongano di account di accesso nel database master. Gli amministratori del Motore di database devono essere consapevoli che l'accesso a un database indipendente può essere concesso al livello del database, anziché al livello del Motore di database. Per ulteriori informazioni, vedere Procedure consigliate per la sicurezza in database indipendenti.
Autorizzazioni
È richiesta l'autorizzazione ALTER ANY USER per il database.
Esempi
A.Creazione di un utente del database basato su un account di accesso di SQL server
Nell'esempio seguente viene innanzitutto creato un account di accesso di SQL Server denominato AbolrousHazem, quindi viene creato un utente del database corrispondente AbolrousHazem in AdventureWorks2012.
CREATE LOGIN AbolrousHazem
WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
USE AdventureWorks2012;
GO
CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;
GO
B.Creazione di un utente del database con uno schema predefinito
Nell'esempio seguente viene innanzitutto creato un account di accesso al server denominato WanidaBenshoof con una password, quindi viene creato un corrispondente utente del database Wanida con lo schema predefinito Marketing.
CREATE LOGIN WanidaBenshoof
WITH PASSWORD = '8fdKJl3$nlNv3049jsKK';
USE AdventureWorks2012;
CREATE USER Wanida FOR LOGIN WanidaBenshoof
WITH DEFAULT_SCHEMA = Marketing;
GO
C.Creazione di un utente del database da un certificato
Nell'esempio seguente viene creato un utente del database JinghaoLiu dal certificato CarnationProduction50.
USE AdventureWorks2012;
CREATE CERTIFICATE CarnationProduction50
WITH SUBJECT = 'Carnation Production Facility Supervisors',
EXPIRY_DATE = '11/11/2011';
GO
CREATE USER JinghaoLiu FOR CERTIFICATE CarnationProduction50;
GO
D.Creazione e utilizzo di un utente senza un account di accesso
Nell'esempio seguente viene creato un utente del database CustomApp che non esegue il mapping a un account di accesso di SQL Server. Nell'esempio viene quindi concessa l'autorizzazione adventure-works\tengiz0 di un utente per rappresentare l'utente CustomApp.
USE AdventureWorks2012 ;
CREATE USER CustomApp WITHOUT LOGIN ;
GRANT IMPERSONATE ON USER::CustomApp TO [adventure-works\tengiz0] ;
GO
Per utilizzare le credenziali di CustomApp, l'utente adventure-works\tengiz0 esegue la seguente istruzione.
EXECUTE AS USER = 'CustomApp' ;
GO
Per ripristinare le credenziali di adventure-works\tengiz0, l'utente esegue l'istruzione seguente.
REVERT ;
GO
E.Creazione di un utente del database indipendente con password
Nell'esempio seguente viene creato un utente del database indipendente con password. Questo esempio può essere eseguito solo in un database indipendente.
USE AdventureWorks2012 ;
GO
CREATE USER Carlo
WITH PASSWORD='RN92piTCh%$!~3K9844 Bl*'
, DEFAULT_LANGUAGE=[Brazilian]
, DEFAULT_SCHEMA=[dbo]
GO
F.Creazione di un utente del database indipendente per un account di accesso al dominio
Nell'esempio seguente viene creato un utente del database indipendente per un account di accesso denominato Fritz in un dominio denominato Contoso. Questo esempio può essere eseguito solo in un database indipendente.
USE AdventureWorks2012 ;
GO
CREATE USER [Contoso\Fritz] ;
GO
G.Creazione di un utente del database indipendente con un SID specifico
Nell'esempio seguente viene creato un utente del database indipendente con autenticazione di SQL Server denominato CarmenW. Questo esempio può essere eseguito solo in un database indipendente.
USE AdventureWorks2012 ;
GO
CREATE USER CarmenW WITH PASSWORD = 'a8ea v*(Rd##+'
, SID = 0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7;
Vedere anche
Riferimento
sys.database_principals (Transact-SQL)