Questa pagina descrive il funzionamento di Cloud SQL con gli utenti e i ruoli di SQL Server. I ruoli SQL Server consentono di controllare l'accesso e le funzionalità degli utenti che accedono a un'istanza SQL Server.
Per informazioni sulla creazione e la gestione degli utenti Cloud SQL, consulta Creazione e gestione degli utenti.
Ruoli e utenti di SQL Server
I ruoli di SQL Server possono essere singoli ruoli o gruppi di ruoli.
Un utente è un ruolo con la possibilità di accedere (il ruolo ha l'autorizzazione LOGIN
). Tutti i ruoli creati da Cloud SQL hanno l'autorizzazione LOGIN
,
pertanto Cloud SQL utilizza i termini "ruolo" e "utente" in modo intercambiabile. Tuttavia, se crei un ruolo con il client, questo non dispone necessariamente dell'autorizzazione LOGIN
.
Tutti gli utenti SQL Server devono avere una password. Quindi, non puoi accedere con un utente che non ha una password.
Super user e stored procedure di sistema
Cloud SQL per SQL Server è un servizio gestito, perciò limita l'accesso ad alcune stored procedure e tabelle di sistema che richiedono privilegi avanzati. In Cloud SQL, non puoi creare o avere accesso agli utenti con autorizzazioni come super user.
Utenti SQL Server predefiniti
Quando crei una nuova istanza di Cloud SQL per SQL Server, l'utente sqlserver
predefinito viene già creato, anche se devi impostare la relativa password.
L'utente sqlserver
fa parte del ruolo CustomerDbRootRole
e le relative autorizzazioni (privilegi) includono quanto segue:
ALTER ANY CONNECTION
ALTER ANY LOGIN
ALTER ANY SERVER ROLE
ALTER SERVER STATE
ALTER TRACE
CONNECT SQL
CREATE ANY DATABASE
CREATE SERVER ROLE
VIEW ANY DATABASE
VIEW ANY DEFINITION
VIEW SERVER STATE
Puoi anche aggiungere cloudsql enable linked servers
all'istanza se vuoi utilizzarlo con i server collegati. Questo flag concede la seguente autorizzazione al tuo server:
ALTER ANY LINKED SERVER
Concessione di autorizzazioni server
Quando concedi i privilegi utilizzando qualsiasi comando GRANT
, devi passare CustomerDbRootRole
come, ad esempio, il valore di grantor_principal
.
Il seguente esempio GRANT ALTER ANY LOGIN
è valido:
GRANT ALTER ANY LOGIN TO [Account] AS CustomerDbRootRole
Il seguente esempio di GRANT ALTER ANY LOGIN
non è valido:
GRANT ALTER ANY LOGIN TO [Account]
Altri utenti di SQL Server
Puoi creare altri utenti o ruoli di SQL Server. A tutti gli utenti che crei utilizzando Cloud SQL vengono concesse le stesse autorizzazioni di database dell'accesso a sqlserver
. Tuttavia, se utilizzi una procedura diversa per creare un utente
(anziché crearlo utilizzando Cloud SQL), l'utente non avrà le stesse
autorizzazioni degli account amministratore del cliente o dell'utente sqlserver
. Ad esempio, se utilizzi la procedura di creazione dell'accesso e aggiungi l'accesso al ruolo del server CustomerDbRootRole
, l'utente non avrà le stesse autorizzazioni degli account amministratore del cliente o dell'utente sqlserver
. Di conseguenza, puoi utilizzare Cloud SQL per creare un utente se intendi che questo abbia le stesse autorizzazioni di database dell'accesso sqlserver
.
Per convalidare la differenza di autorizzazioni tra due account qualsiasi, puoi utilizzare la seguente funzione:
sys.fn_my_permissions.
Importazioni del database: autorizzazioni proprietario
Quando importi un database, il trattamento del proprietario varia come segue, in base al tipo:
- Per un accesso esistente diverso da
sa
: Cloud SQL conserva il proprietario e crea un utente chiamatosqlserver
che mappa all'accessosqlserver
. Cloud SQL concede le autorizzazioniCONTROL
eALTER ANY USER
all'utentesqlserver
. - Per gli accessi sconosciuti o creati dal sistema: Cloud SQL
trasferisce la proprietà del database all'accesso
sqlserver
.
Modificare le autorizzazioni degli utenti
Il comando ALTERROLE è disponibile per modificare le autorizzazioni utente. Se crei un nuovo utente con un client, puoi associarlo a un ruolo diverso o fornire autorizzazioni diverse.
Risoluzione dei problemi
Errore durante l'accesso al database
Quando provi ad accedere a un database che hai creato, in qualità di utente che hai creato viene visualizzato il seguente errore:
The server principal USERNAME is not able to access the database DATABASE_NAME under the current security context.
Il problema potrebbe essere
L'utente non è membro del database.
Da provare
Connettiti al database come utente sqlserver
e aggiungi il nuovo utente, poi
assegna al nuovo utente il ruolo db_owner
per il database. Ad esempio:
EXEC sp_adduser 'user'; EXEC sp_addrolemember 'db_owner', 'user'