Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Database SQL in Microsoft Fabric
Aggiunge un utente al database corrente. La seguente lista mostra i 13 tipi di utenti insieme a un esempio della sintassi più basilare:
Note
Anche se Microsoft Entra ID è il nuovo nome per Azure Active Directory (Azure AD), per evitare l'interruzione degli ambienti esistenti, la denominazione Azure AD è tuttora mantenuta in alcuni elementi hardcoded, ad esempio campi dell'interfaccia utente, provider di connessioni, codici errore e cmdlet. All’interno di questo articolo i due nomi vengono utilizzati in modo intercambiabile.
Utenti basati sugli account di accesso in master
Utente basato su un account di accesso basato su un account Active Directory.
CREATE USER [Contoso\test];Utente basato su un account di accesso basato su un gruppo di Windows.
CREATE USER [Contoso\Sales];Utente basato su un login che utilizza l'autenticazione SQL Server.
CREATE USER Mary;Utente basato su un account di accesso di Microsoft Entra.
CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com]Note
Le entità server (account di accesso) di Microsoft Entra sono attualmente in anteprima pubblica per database SQL di Azure.
Note
Il database SQL in Microsoft Fabric non supporta i login o gli utenti basati sugli accessi.
Utenti che si autenticano nel database - Usa gli utenti contenuti per rendere il database più portabile.
Sempre consentito in database SQL di Azure. Consentiti solo in un database indipendente in SQL Server.
Utente basato su un utente di Windows che non dispone di account di accesso.
CREATE USER [Contoso\test];Utente basato su un gruppo di Windows che non dispone di account di accesso.
CREATE USER [Contoso\Sales];Utente in database SQL o Azure Synapse Analytics basato su un utente di Microsoft Entra.
CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;Utente del database indipendente con password. (Non disponibile in Azure Synapse Analytics.)
CREATE USER Mary WITH PASSWORD = '********';
Utenti basati sulle entità di sicurezza di Windows che si connettono tramite account di accesso del gruppo di Windows
Utente basato su un utente di Windows che non dispone di accesso, ma che può connettersi al motore di database tramite l'appartenenza a un gruppo di Windows.
CREATE USER [Contoso\test];Utente basato su un gruppo di Windows che non dispone di accesso, ma che può connettersi al motore di database tramite l'appartenenza a un gruppo di Windows diverso.
CREATE USER [Contoso\test];
Utenti che non possono eseguire l'autenticazione: questi utenti non possono accedere a SQL Server o database SQL.
- Utente che non dispone di account di accesso. Non è possibile accedere ma è possibile concedere le autorizzazioni.
CREATE USER CustomApp WITHOUT LOGIN; - Utente basato su un certificato. Non è possibile accedere ma è possibile concedere le autorizzazioni e firmare i moduli.
CREATE USER TestProcess FOR CERTIFICATE Contoso50; - Utente basato su una chiave asimmetrica. Non è possibile accedere ma è possibile concedere le autorizzazioni e firmare i moduli.
CREATE User TestProcess FROM ASYMMETRIC KEY Contoso09;
Convenzioni relative alla sintassi Transact-SQL
Syntax
Sintassi per SQL Server, database SQL di Azure e Istanza gestita di SQL di Azure
-- Syntax Users based on logins in master
CREATE USER user_name
[
{ FOR | FROM } LOGIN login_name
]
[ WITH <limited_options_list> [ , ... ] ]
[ ; ]
-- Users that authenticate at the database
CREATE USER
{
windows_principal [ WITH <options_list> [ , ... ] ]
| user_name WITH PASSWORD = 'password' [ , <options_list> [ , ... ]
| Microsoft_Entra_principal FROM EXTERNAL PROVIDER [ WITH OBJECT_ID = 'objectid' ]
}
[ ; ]
-- 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 <limited_options_list> [ , ... ] ]
[ ; ]
-- Users that cannot authenticate
CREATE USER user_name
{
WITHOUT LOGIN [ WITH <limited_options_list> [ , ... ] ]
| { 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
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]
<limited_options_list> ::=
DEFAULT_SCHEMA = schema_name ]
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]
-- SQL Database syntax when connected to a federation member
CREATE USER user_name
[;]
-- Syntax for users based on Microsoft Entra logins for Azure SQL Managed Instance
CREATE USER user_name
[ { FOR | FROM } LOGIN login_name ]
| FROM EXTERNAL PROVIDER
[ WITH <limited_options_list> [ , ... ] ]
[ ; ]
<limited_options_list> ::=
DEFAULT_SCHEMA = schema_name
| DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
| ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]
Sintassi per Azure Synapse Analytics
CREATE USER user_name
[ { { FOR | FROM } { LOGIN login_name }
| WITHOUT LOGIN
]
[ WITH DEFAULT_SCHEMA = schema_name ]
[;]
CREATE USER Microsoft_Entra_principal FROM EXTERNAL PROVIDER
[ WITH DEFAULT_SCHEMA = schema_name ]
[;]
Sintassi per database SQL in Microsoft Fabric e database SQL di Azure
CREATE USER
{
Microsoft_Entra_principal FROM EXTERNAL PROVIDER [ WITH <limited_options_list> [ , ... ] ]
| Microsoft_Entra_principal WITH <options_list> [ , ... ]
}
[ ; ]
-- 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
}
[ ; ]
<limited_options_list> ::=
DEFAULT_SCHEMA = schema_name
| OBJECT_ID = 'objectid'
<options_list> ::=
DEFAULT_SCHEMA = schema_name
| SID = sid
| TYPE = { X | E }
Arguments
user_name
Specifica il nome con cui viene identificato l'utente all'interno del database. user_name è un 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), un account di accesso tramite l'autenticazione di SQL Server o un account di accesso tramite un'entità Di sicurezza Microsoft Entra (utente, gruppo o applicazione). 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 accesso con mapping da un'entità di sicurezza di Windows, usare il formato [<domainName>\<loginName>]. Per alcuni esempi, vedere Riepilogo della sintassi.
Se l'istruzione CREATE USER è l'unica in un batch SQL, database SQL di Azure supporta la clausola WITHLOGIN. Se l'istruzione CREATE USER non è l'unica in un batch SQL o viene eseguita in SQL dinamico, la clausola WITH LOGIN non è supportata.
CON DEFAULT_SCHEMA = schema_name
Specifica il primo schema cercato dal server quando risolve i nomi degli oggetti per questo utente del database.
'windows_principal'
Specifica l'entità di Windows per la quale viene creato l'utente del database. The windows_principal può essere un utente o un gruppo di Windows. L'utente verrà creato anche se windows_principal non ha un accesso. Quando si effettua la connessione a SQL Server, se windows_principal non ha un accesso, l'entità di sicurezza di Windows deve eseguire l'autenticazione al motore di database tramite l'appartenenza a un gruppo di Windows che abbia un accesso. In alternativa, la stringa di connessione deve specificare il database indipendente come catalogo iniziale. Quando si crea un utente da un'entità di sicurezza di Windows, usare il formato [<domainName>\<loginName>]. Per alcuni esempi, vedere Riepilogo della sintassi. I nomi degli utenti basati su utenti di Active Directory devono avere un numero di caratteri inferiore a 21.
'Microsoft_Entra_principal'
Si applica a: SQL Server 2022 (16.x) e versioni successive, SQL Database, Istanza gestita di SQL, Azure Synapse Analytics, database SQL in Microsoft Fabric
Specifica l'entità di sicurezza Microsoft Entra per cui viene creato l'utente del database. Il Microsoft_Entra_principal può essere un utente di Microsoft Entra, un gruppo Microsoft Entra o un'applicazione Microsoft Entra. Gli utenti di Microsoft Entra non possono avere account di accesso con autenticazione di Windows in database SQL; solo gli utenti del database. Il stringa di connessione deve specificare il database indipendente come catalogo iniziale.
Per i principi Microsoft Entra, la CREATE USER sintassi richiede:
UserPrincipalName dell'oggetto Microsoft Entra per gli utenti di Microsoft Entra.
CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;CREATE USER [alice@fabrikam.onmicrosoft.com] FROM EXTERNAL PROVIDER;
Microsoft Entra server principals (account di accesso) introduce la creazione di utenti di cui è stato eseguito il mapping agli account di accesso di Microsoft Entra nel
masterdatabase. Ad esempio,CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com];Gli utenti di Microsoft Entra e le entità servizio (applicazioni) membri di più di 2048 gruppi di sicurezza di Microsoft Entra non sono supportati per accedere ai database in database SQL di Azure, Istanza gestita di SQL di Azure o Azure Synapse.
DisplayName dell'oggetto Microsoft Entra per i gruppi di Microsoft Entra e Microsoft Entra Applications. Nel caso del gruppo di sicurezza Nurses si userebbe:
CREATE USER [Nurses] FROM EXTERNAL PROVIDER;
Per altre informazioni, vedere Connessione al database SQL con l'autenticazione di Microsoft Entra.
Per altre informazioni sull'autenticazione di Microsoft Entra in SQL Server, vedere Esercitazione: Configurare l'autenticazione di Microsoft Entra per SQL Server abilitata da Azure Arc.
CON PASSWORD = 'password'
Vale a: SQL Server 2012 (11.x) e versioni successive, SQL Database.
Può essere usato solo in un database indipendente. Specifica la password per l'utente che viene creato.
A partire da SQL Server 2012 (11.x), SQL Server e database SQL di Azure utilizzavano un hash SHA-512 combinato con un sale casuale e unico a 32 bit. Questo metodo ha reso statisticamente infeasible per gli utenti malintenzionati di dedurre le password.
SQL Server 2025 (17.x) introduce un algoritmo hash iterato, RFC2898, noto anche come funzione di derivazione della chiave basata su password (PBKDF). Questo algoritmo usa ancora SHA-512, ma esegue l'hashing della password più volte (100.000 iterazioni), rallentando significativamente gli attacchi di forza bruta. Questa modifica migliora la protezione delle password in risposta alle minacce alla sicurezza in continua evoluzione e aiuta i clienti a rispettare le linee guida NIST SP 800-63b. Questo miglioramento della sicurezza usa un algoritmo hash più avanzato, che può aumentare leggermente il tempo di accesso per gli account di accesso di autenticazione SQL. L'impatto è in genere inferiore negli ambienti con il pool di connessioni, ma potrebbe essere più evidente negli scenari senza pool o in cui la latenza di accesso viene monitorata attentamente.
SENZA LOGIN
Specifica che sull'utente non deve essere eseguito il mapping a un accesso esistente.
CERTIFICATE cert_name
Applicabile a: SQL Server 2008 (10.0.x) e versioni successive, SQL Database, SQL database in Microsoft Fabric
Specifica il certificato per cui viene creato l'utente del database.
ASYMMETRIC KEY asym_key_name
Applicabile a: SQL Server 2008 (10.0.x) e versioni successive, SQL Database, SQL database in Microsoft Fabric
Specifica la chiave asimmetrica per cui viene creato l'utente del database.
DEFAULT_LANGUAGE = { NONE | <lcid> | <nome> lingua | <language salias> }
Vale a: SQL Server 2012 (11.x) e versioni successive, SQL Database
Specifica la lingua predefinita per il nuovo utente. Se specifichi una lingua predefinita per l'utente e successivamente cambi la lingua predefinita del database, la lingua predefinita dell'utente rimane quella specificata. Se non specifichi una lingua predefinita, l'utente ottiene la lingua predefinita del database. Se non specifichi una lingua predefinita per l'utente e successivamente cambi la lingua predefinita del database, la lingua predefinita dell'utente cambia nella nuova lingua predefinita del database.
Important
DEFAULT_LANGUAGE viene usato unicamente per gli utenti di database indipendenti.
SID = sid
Si applica a: SQL Server 2012 (11.x) e versioni successive, e al database SQL in Microsoft Fabric.
In SQL Server 2012 (11.x) e versioni successive, si applica solo agli utenti con password (autenticazione SQL Server) in un database contenuto. Specifica il SID del nuovo utente del database. Se non selezioni questa opzione, SQL Server assegna automaticamente un SID. Usare il parametro SID per creare utenti in più database con la stessa identità (SID). Questa funzione è utile quando si creano utenti in più database per prepararsi al failover Always On. Per determinare il SID di un utente, si verifica sys.database_principals.
Nel database SQL in Microsoft Fabric sid deve essere un ID valido dell'entità Microsoft Entra specificata. Se il principale è un utente o un gruppo, l'ID dovrebbe essere un ID oggetto Microsoft Entra dell'utente o del gruppo. Se il principale Microsoft Entra è un principale di servizio (un'applicazione o un'identità gestita), l'ID dovrebbe essere un ID applicazione o un ID client. L'ID specificato deve essere un binary(16) valore. Il motore di database non convalida l'ID specificato in Microsoft Entra. Se usi l'argomento SID , devi includere TYPE.
TYPE = [ E | X ]
Si applica a: database SQL in Microsoft Fabric e nel database SQL di Azure.
Specifica il tipo di un'entità Microsoft Entra.
E indica che l'entità è un utente o un'entità servizio (un'applicazione o un'identità gestita).
X indica che l'entità è un gruppo.
ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ACCESO | SPENTO ]
Vale a: SQL Server 2016 (13.x) e versioni successive, SQL Database.
Elimina i controlli sui metadati di crittografia nel server nelle operazioni di copia bulk. Ciò consente all'utente di eseguire la copia bulk dei dati crittografati tra tabelle o database senza decrittografare i dati. Il valore predefinito è OFF.
Warning
L'uso improprio di questa opzione può causare il danneggiamento dei dati. Per altre informazioni, vedere Migrare dati sensibili protetti da Always Encrypted.
DA FORNITORE ESTERNO
Vale a: SQL Server 2022 (16.x) e versioni successive, SQL Database, Istanza gestita di SQL di Azure, database SQL in Microsoft Fabric
Specifica che l'entità è per l'autenticazione di Microsoft Entra. SQL Server convalida automaticamente il nome dell'entità specificato in Microsoft Entra.
Se il principale che emette la CREATE USER dichiarazione è un utente principale di Microsoft Entra, il principale o il gruppo del principale devono ricoprire il ruolo di Directory Readers in Microsoft Entra.
In database SQL e Istanza gestita di SQL di Azure, se l'entità che emette l'istruzione CREATE USER è un'entità servizio, l'identità del server di database o dell'istanza gestita deve essere nel ruolo Lettori directory in Microsoft Entra.
Nel database SQL in Microsoft Fabric, non puoi usare FROM EXTERNAL PROVIDER se un principale che emette CREATE USER è un principale di servizio in Microsoft Entra. Le entità servizio devono usare TYPE e SID argomenti per creare utenti per le entità Di sicurezza di Microsoft Entra.
CON OBJECT_ID = 'oggetto'
Si applica a: SQL Server 2025 (17.x) e versioni successive, SQL Database, Istanza gestita di SQL di Azure, database SQL in Microsoft Fabric
Specifica l'ID oggetto Microsoft Entra. Se specifichi , OBJECT_IDpuò user_name essere un alias definito dall'utente formato dal nome di visualizzazione principale originale con un suffisso aggiunto. Il user_name deve essere un nome univoco nella sys.database_principals visualizzazione e rispettare tutte le altre sysname limitazioni. Per maggiori informazioni sull'utilizzo dell'opzioneWITH OBJECT_ID, consulta Microsoft Entra login e utenti con nomi di visualizzazione non unici.
Note
A partire da SQL Server 2025 (17.x), l'opzione WITH OBJECT_ID è supportata per gli accessi Microsoft Entra e per gli utenti con nomi di visualizzazione unici.
Se il nome visualizzato del principale del servizio non è un duplicato, usa il predefinito CREATE LOGIN o CREATE USER l'istruzione. L'estensione WITH OBJECT_ID è un elemento di ripristino della risoluzione dei problemi implementato per l'uso con entità servizio non univoche. Non è consigliabile usarlo con un'entità servizio univoca. L'uso dell'estensione per un'entità WITH OBJECT_ID servizio senza aggiungere un suffisso viene eseguito correttamente, ma non è ovvio per quale entità servizio è stato creato l'account di accesso o l'utente. Si consiglia di creare un alias usando un suffisso per identificare in modo univoco il principale del servizio.
Remarks
Se ometti FOR LOGIN, il nuovo utente del database viene mappato all'accesso di SQL Server con lo stesso nome.
Lo schema predefinito è il primo schema che il server cerca quando risolve i nomi degli oggetti per questo utente del database. Se non diversamente specificato, lo schema predefinito è il proprietario degli oggetti creati dall'utente del database.
Se l'utente ha uno schema predefinito, il server utilizza quello schema predefinito. Se l'utente non ha uno schema predefinito ma è membro di un gruppo che ha uno schema predefinito, il server utilizza lo schema predefinito del gruppo. Se l'utente non ha uno schema predefinito e appartiene a più gruppi, il server utilizza lo schema predefinito configurato del gruppo Windows con il più basso principal_id tra i gruppi che hanno uno schema predefinito esplicitamente impostato. Non puoi selezionare esplicitamente uno degli schemi predefiniti disponibili come schema preferito. Se il server non può determinare uno schema predefinito per un utente, utilizza lo dbo schema.
Puoi impostare DEFAULT_SCHEMA prima di creare lo schema a cui punta.
Non puoi specificare DEFAULT_SCHEMA quando si crea un utente mappato su un certificato o una chiave asimmetrica.
Il server ignora il valore di DEFAULT_SCHEMA se l'utente è membro del sysadmin ruolo fisso del server. Tutti i membri del sysadmin ruolo server fisso hanno uno schema predefinito di dbo.
La WITHOUT LOGIN clausola crea un utente che non è mappato a un login autenticato tramite SQL. Tale utente può connettersi ad altri database come guest. Puoi assegnare permessi a questo utente senza effettuare un login. Quando il contesto di sicurezza cambia su un utente senza accesso, l'utente originale riceve i permessi dell'utente senza accesso. Per un esempio, vedi D. Creare e usare un utente senza accesso.
Solo gli utenti di cui è stato eseguito il mapping a entità di sicurezza di Windows possono contenere un carattere barra rovesciata (\).
Non puoi usare CREATE USER per creare un utente ospite perché l'utente ospite esiste già all'interno di ogni database. Puoi abilitare l'utente ospite concedendogli CONNECT il permesso, come mostrato:
GRANT CONNECT TO guest;
GO
Puoi visualizzare le informazioni sugli utenti del database nella vista sys.database_principals catalogo.
Usare l'estensione FROM EXTERNAL PROVIDER della sintassi per creare account di accesso di Microsoft Entra a livello di server in database SQL di Azure e Istanza gestita di SQL di Azure. Utilizzando gli accessi di Microsoft Entra, puoi mappare i principi Microsoft Entra a livello di database agli accessi Microsoft Entra a livello server. Per creare un utente Microsoft Entra da un login Microsoft Entra, usa la seguente sintassi:
CREATE USER [Microsoft_Entra_principal] FROM LOGIN [Microsoft Entra login];
Quando crei l'utente nel database Azure SQL, il login_name deve corrispondere a un login Microsoft Entra esistente. Altrimenti, l'uso della FROM EXTERNAL PROVIDER clausola crea solo un utente Microsoft Entra senza accesso nel master database. Ad esempio, il seguente comando crea un utente contenuto:
CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;
Sintassi
Utenti basati sugli account di accesso in 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\WindowsUserTest]CREATE USER [Domain1\WindowsUserTest] FOR LOGIN Domain1\WindowsUserTestCREATE USER [Domain1\WindowsUserTest] FROM LOGIN Domain1\WindowsUserTestCREATE USER [Domain1\WindowsGroupManagers]CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]CREATE USER SQLAUTHLOGINCREATE USER SQLAUTHLOGIN FOR LOGIN SQLAUTHLOGINCREATE 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 usati solo in un database indipendente. Gli utenti creati non saranno correlati ad alcun accesso nel database master. Le opzioni della lingua e dello schema predefinito non sono elencate.
Important
Questa sintassi concede agli utenti l'accesso al database e il nuovo accesso al motore di database.
CREATE USER [Domain1\WindowsUserTest]CREATE USER [Domain1\WindowsGroupManagers]CREATE USER Test WITH PASSWORD = '<strong password>'
Utenti basati su entità di windows senza account di accesso nel database di master sistema
L'elenco seguente mostra la sintassi possibile per gli utenti che hanno accesso al motore di database tramite un gruppo di Windows, ma non hanno un account di accesso nel database di master sistema. Questa sintassi può essere usata in tutti i tipi di database. Le opzioni della lingua e dello schema predefinito non sono elencate.
Questa sintassi è simile agli utenti basati sugli account di accesso in master, ma questa categoria di utenti non ha un account di accesso in master. L'utente deve disporre dell'accesso al motore di database attraverso un accesso basato su un gruppo di Windows.
Questa sintassi è simile per gli 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\WindowsUserTest]CREATE USER [Domain1\WindowsUserTest] FOR LOGIN Domain1\WindowsUserTestCREATE USER [Domain1\WindowsUserTest] FROM LOGIN Domain1\WindowsUserTestCREATE USER [Domain1\WindowsGroupManagers]CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]
Utenti che non possono eseguire l'autenticazione
L'elenco seguente mostra la sintassi possibile per gli utenti che non possono accedere a SQL Server.
CREATE USER RIGHTSHOLDER WITHOUT LOGINCREATE USER CERTUSER FOR CERTIFICATE SpecialCertCREATE USER CERTUSER FROM CERTIFICATE SpecialCertCREATE USER KEYUSER FOR ASYMMETRIC KEY SecureKeyCREATE USER KEYUSER FROM ASYMMETRIC KEY SecureKey
Security
Quando si crea un utente si concede l'accesso a un database, ma non si concede automaticamente alcun accesso agli oggetti contenuti nel 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. Per informazioni sulla progettazione di un sistema di autorizzazioni, vedere Introduzione alle autorizzazioni del motore di database.
Considerazioni speciali per i database contenuti
Quando ci si connette a un database indipendente, se l'utente non dispone di un account di accesso nel master database, il 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 altre informazioni, vedere Database indipendenti e Utenti di database indipendente: rendere portabile un database. Per cambiare un utente del database da utente basato su un login autenticato SQL a un utente del database contenuto con password, vedi sp_migrate_user_to_contained (Transact-SQL).
In un database indipendente gli utenti non devono avere account di accesso nel master database. Gli amministratori del motore di database devono essere consapevoli del fatto che l'accesso a un database indipendente può essere concesso a livello del database, anziché al livello del motore di database. Per altre informazioni, vedere Security Best Practices with Contained Databases.
Quando si usano utenti di database indipendenti nel database SQL di Azure, configurare l'accesso usando una regola del firewall a livello di database, invece di una regola del firewall a livello di server. Per altre informazioni, vedere sp_set_database_firewall_rule (database SQL di Azure).
Per gli utenti di database contenuti SQL Server 2022 (16.x), database SQL di Azure, Istanza gestita di SQL di Azure e Azure Synapse Analytics con database, SSMS supporta l'autenticazione multifattoriale. Per ulteriori informazioni, vedere Utilizzare l'autenticazione a più fattori di Microsoft Entra.
Permissions
È richiesta l'autorizzazione ALTER ANY USER per il database.
Permessi per SQL Server 2022 e versioni successive
È richiesta l'autorizzazione CREATE USER per il database.
Examples
A. Crea un utente database basandosi su un login SQL Server
Il seguente esempio crea prima un login SQL Server denominato testmaster nel database, e poi crea un utente test corrispondente nel AdventureWorks2025database.
--Connect to the master database
CREATE LOGIN test
WITH PASSWORD = '<strong password>';
Passare a un database utente. Ad esempio, in SQL Server usare l'istruzione USE [AdventureWorks2022]. In database SQL di Azure, la USE dichiarazione non è disponibile. Invece, collegati direttamente al database previsto ed esegui il resto del campione di codice. Questo esempio basato su login non si applica al database SQL in Microsoft Fabric, che non supporta gli accessi o gli utenti basati sugli accessi.
--Connect to a user database
CREATE USER test FOR LOGIN test;
GO
B. Crea un utente del database con uno schema predefinito
Il seguente esempio crea innanzitutto un login server con una testlogin password che fornisci, e poi crea un utente testuserdel database corrispondente , con lo schema Marketingpredefinito .
--Connect to the master database
CREATE LOGIN testlogin
WITH PASSWORD = '<strong password>';
Passare a un database utente. Ad esempio, in SQL Server usare l'istruzione USE [AdventureWorks2022]. In database SQL di Azure e SQL database in Microsoft Fabric, l'USEaffermazione non è disponibile. Invece, collegati direttamente al database previsto ed esegui il resto del campione di codice.
--Connect to a user database
CREATE USER testuser FOR LOGIN testlogin
WITH DEFAULT_SCHEMA = Marketing;
C. Crea un utente database da un certificato
Nell'esempio seguente viene creato un utente del database test dal certificato Contoso_Cert. Per altre informazioni, vedere CREATE CERTIFICATE (Transact-SQL).
USE AdventureWorks2022;
CREATE CERTIFICATE Contoso_Cert
ENCRYPTION BY PASSWORD = '<strong password>'
WITH SUBJECT = 'Contoso Facility Supervisors',
EXPIRY_DATE = '11/11/2011';
GO
CREATE USER test FOR CERTIFICATE Contoso_Cert;
GO
D. Creare e utilizzare un utente senza accesso
Nell'esempio seguente viene creato un utente del database CustomApp che non esegue il mapping a un accesso di SQL Server. Nell'esempio viene concessa l'autorizzazioneadventure-works\test di un utente per rappresentare l'utente CustomApp.
USE AdventureWorks2022;
CREATE USER CustomApp WITHOUT LOGIN ;
GRANT IMPERSONATE ON USER::CustomApp TO [adventure-works\test] ;
GO
Per usare le credenziali di CustomApp, l'utente adventure-works\test esegue la seguente istruzione.
EXECUTE AS USER = 'CustomApp' ;
GO
Per ripristinare le credenziali adventure-works\test, l'utente esegue la seguente istruzione.
REVERT ;
GO
E. Crea un utente del database contenuto con password
Nell'esempio seguente viene creato un utente del database indipendente con password. Puoi eseguire questo esempio solo in un database contenuto.
Questo esempio funziona in SQL Database se si rimuovono DEFAULT_LANGUAGEi file .
USE AdventureWorks2022;
GO
CREATE USER test
WITH PASSWORD='<password>'
, DEFAULT_LANGUAGE=[Brazilian]
, DEFAULT_SCHEMA=[dbo]
GO
F. Crea un utente del database contenuto per un login di dominio
Il seguente esempio crea un utente di database contenuto per un login nominato test in un dominio chiamato Contoso. Puoi eseguire questo esempio solo in un database contenuto.
USE AdventureWorks2022;
GO
CREATE USER [Contoso\test] ;
GO
G. Crea un utente database contenuto con un SID specifico
Il seguente esempio crea un utente di database contenuto autenticato da SQL Server chiamato TestUser. Puoi eseguire questo esempio solo in un database contenuto.
USE AdventureWorks2022;
GO
CREATE USER TestUser WITH PASSWORD = '<strong password>'
, SID = 0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7;
H. Crea un utente per copiare dati criptati
L'esempio seguente consente di creare un utente che può copiare dati protetti dalla funzionalità Always Encrypted da un set di tabelle contenenti colonne crittografate in un altro set di tabelle con colonne crittografate, nello stesso database o in un database diverso. Per altre informazioni, vedere Migrare dati sensibili protetti da Always Encrypted.
Vale a: SQL Server 2016 (13.x) e versioni successive, SQL Database.
CREATE USER [test]
WITH
DEFAULT_SCHEMA = dbo
, ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON ;
I. Crea un utente Microsoft Entra da un login Microsoft Entra in database SQL di Azure e Istanza gestita di SQL di Azure
Per creare un utente di Microsoft Entra da un account di accesso di Microsoft Entra, usare la sintassi seguente.
Accedi al tuo server logico database SQL di Azure o Istanza gestita di SQL utilizzando un login Microsoft Entra. Usa il login amministratore del server o un login che sia membro del loginmanager ruolo in SQL Database, o che abbia ottenuto il sysadmin ruolo in Istanza gestita di SQL.
Lo script T-SQL seguente crea un utente test@contoso.comDi Microsoft Entra dall'account di accesso test@contoso.com. Questo login è stato creato nell'esempio CREATE LOGIN .
CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com];
GO
Important
Quando si crea un USER login da un Microsoft Entra, specifica il user_name come lo stesso login_name da LOGIN.
È supportata la creazione di un utente di Microsoft Entra come gruppo da un account di accesso di Microsoft Entra che è un gruppo.
CREATE USER [MS Entra group] FROM LOGIN [MS Entra group];
GO
È anche possibile creare un utente di Microsoft Entra da un account di accesso di Microsoft Entra che è un gruppo.
CREATE USER [test@contoso.com] FROM LOGIN [MS Entra group];
GO
J. Creare un utente di database indipendente da un'entità microsoft Entra
La sintassi seguente crea un utente test@contoso.comdi Microsoft Entra in un database senza un account di accesso associato in master. Il motore di database convalida che l'utente specificato esiste in Microsoft Entra.
CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;
GO
Nel database SQL in Microsoft Fabric, non puoi usare FROM EXTERNAL PROVIDER se un principale che emette CREATE USER è un principale di servizio in Microsoft Entra.
K. Creare un utente di database indipendente da un'entità di accesso Microsoft senza convalida
Si applica a: database SQL in Microsoft Fabric e database SQL di Azure
Gli esempi in questa sezione creano utenti di database per le entità di sicurezza di Microsoft Entra, senza convalidare i nomi delle entità in Microsoft Entra.
Nell'esempio T-SQL seguente viene creato un utente di database per l'utente di Microsoft Entra, denominato test@contoso.com. Sostituire <unique identifier sid> con il SID del nuovo utente con l'ID oggetto dell'utente Microsoft Entra.
DECLARE @principal_name SYSNAME = 'test@contoso.com';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- user's object ID in Microsoft Entra
-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);
-- Construct command: CREATE USER [@principal_name] WITH SID = @castObjectId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = E;'
EXEC (@cmd);
Nell'esempio seguente viene creato un utente di database per l'entità servizio Microsoft Entra, denominata HRApp. Sostituire <unique identifier sid> con il SID del nuovo utente con l'ID client dell'entità servizio in Microsoft Entra.
Note
Utilizzare l'ID client, non l'ID dell'oggetto, quando si specifica un Microsoft Entra main di servizio, User-Assigned Managed Identity (UAMI) o System-Assigned Managed Identity (SAMI).
DECLARE @principal_name SYSNAME = 'HRApp';
DECLARE @clientId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's client ID in Microsoft Entra
-- Convert the guid to the right type
DECLARE @castClientId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @clientId), 1);
-- Construct command: CREATE USER [@principal_name] WITH SID = @castClientId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castClientId + ', TYPE = E;'
EXEC (@cmd);
Nell'esempio seguente viene creato un utente di database per il gruppo Microsoft Entra denominato HR. Sostituire <unique identifier sid> con il SID del nuovo utente con l'ID oggetto del gruppo.
DECLARE @principal_name SYSNAME = 'HR';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's object ID in Microsoft Entra
-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);
-- Construct command: CREATE USER [@principal_name] WITH SID = @castObjectId, TYPE = X;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = X;'
EXEC (@cmd);
Contenuti correlati
- Creare un utente del database
- sys.database_principals (Transact-SQL)
- ALTER USER (Transact-SQL)
- DROP USER (Transact-SQL)
- CREATE LOGIN (Transact-SQL)
- DATI EVENTO (Transact-SQL)
- Database contenuti
- Autenticazione Microsoft Entra per Azure SQL
- Introduzione alle autorizzazioni del motore di database
- ALTER ROLE (Transact-SQL)
- GRANT autorizzazioni per gli oggetti (Transact-SQL)
- Autorizzazioni (Motore di database)