Ruoli a livello di database
Si applica a:SQL Server
Database SQL di
Azure Istanza
gestita di SQL di Azure Azure Synapse Analytics Platform
System (PDW)
Per gestire facilmente le autorizzazioni nei database, SQL Server fornisce diversi ruoli che sono entità di sicurezza che raggruppano altre entità. Sono come gruppi nel sistema operativo Microsoft Windows. L'ambito delle autorizzazioni dei ruoli a livello di database è l'intero database.
Per aggiungere e rimuovere utenti a un ruolo del database, usare le opzioni ADD MEMBER
e DROP MEMBER
dell'istruzione ALTER ROLE . Analytics Platform System (PDW) e Azure Synapse Analytics non supporta l'uso di ALTER ROLE
. Usare invece le stored procedure sp_addrolemember e sp_droprolemember .
Esistono due tipi di ruoli a livello di database: i ruoli predefiniti del database , che sono predefiniti nel database, e i ruoli del database definiti dall'utente , che possono essere creati.
I ruoli predefiniti del database vengono definiti a livello di database e sono presenti in ogni database. I membri del ruolo del database db_owner possono gestire l'appartenenza ai ruoli predefiniti del database. Nel database msdb sono presenti anche alcuni ruoli predefiniti del database per scopi specifici.
È possibile aggiungere qualsiasi account di database e altri ruoli di SQL Server nei ruoli a livello di database.
Suggerimento
Evitare di aggiungere ruoli del database definiti dall'utente come membri dei ruoli predefiniti, poiché in tal modo si potrebbe provocare un'imprevista intensificazione dei privilegi.
Le autorizzazioni dei ruoli di database definiti dall'utente possono essere personalizzate usando le istruzioni GRANT, DENY e REVOKE . Per altre informazioni, vedere Autorizzazioni (motore di database).
Per un elenco di tutte le autorizzazioni, vedere il poster Autorizzazioni del motore di database . Le autorizzazioni a livello di server non possono essere concesse ai ruoli del database. Gli account di accesso e altre entità a livello di server (ad esempio i ruoli del server) non possono essere aggiunti ai ruoli del database. Per la sicurezza a livello di server in SQL Server, usare invece i ruoli del server. Le autorizzazioni a livello di server non possono essere concesse tramite ruoli nel database SQL di Azure e in Azure Synapse Analytics.
Ruoli predefiniti del database
La tabella seguente contiene i ruoli predefiniti del database e le rispettive caratteristiche. Questi ruoli esistono in tutti i database. Ad eccezione del ruolo del database pubblico , non è possibile modificare le autorizzazioni assegnate ai ruoli predefiniti del database.
Nome del ruolo predefinito del database | Descrizione |
---|---|
db_owner | I membri del ruolo predefinito del database db_owner possono eseguire tutte le attività di configurazione e manutenzione nel database e anche drop il database in SQL Server. In Database SQL e Azure Synapse alcune attività di manutenzione richiedono autorizzazioni a livello di server e non possono essere eseguite da db_owners. |
db_securityadmin | I membri del ruolo predefinito del database db_securityadmin possono modificare le appartenenze al ruolo solo per i ruoli personalizzati e gestire le autorizzazioni. I membri di questo ruolo possono potenzialmente elevare i propri privilegi ed è consigliabile monitorarne le azioni. |
db_accessadmin | I membri del ruolo predefinito del database db_accessadmin possono aggiungere o rimuovere l'accesso al database per account di accesso di Windows, gruppi di Windows e account di accesso di SQL Server. |
db_backupoperator | I membri del ruolo predefinito del database db_backupoperator possono eseguire il backup del database. |
db_ddladmin | I membri del ruolo predefinito del database db_ddladmin possono eseguire qualsiasi comando DDL (Data Definition Language) in un database. I membri di questo ruolo possono potenzialmente elevare i propri privilegi modificando il codice che può essere eseguito con privilegi elevati e le relative azioni devono essere monitorate. |
db_datawriter | I membri del ruolo predefinito del database db_datawriter possono aggiungere, eliminare o modificare i dati di tutte le tabelle utente. Nella maggior parte dei casi d'uso questo ruolo verrà combinato con db_datareader appartenenza per consentire la lettura dei dati da modificare. |
db_datareader | I membri del ruolo predefinito del database db_datareader possono leggere tutti i dati da tutte le tabelle e le viste utente. Gli oggetti utente possono esistere in qualsiasi schema ad eccezione di sys e INFORMATION_SCHEMA. |
db_denydatawriter | I membri del ruolo predefinito del database db_denydatawriter non possono aggiungere, modificare o eliminare dati nelle tabelle utente all'interno di un database. |
db_denydatareader | I membri del ruolo predefinito del database db_denydatareader non possono leggere dati dalle tabelle utente e dalle viste all'interno di un database. |
Non è possibile modificare le autorizzazioni assegnate ai ruoli predefiniti del database. La figura seguente mostra le autorizzazioni assegnate ai ruoli predefiniti del database:
Ruoli speciali per il database SQL e Azure Synapse
Questi ruoli del database esistono solo nel database virtuale master
. Le relative autorizzazioni sono limitate alle azioni eseguite in master
. Solo gli utenti del database in master
possono essere aggiunti a questi ruoli. Gli account di accesso non possono essere aggiunti a questi ruoli, ma gli utenti possono essere creati in base agli account di accesso e quindi questi utenti possono essere aggiunti ai ruoli. Gli utenti del database indipendente in master
possono anche essere aggiunti a questi ruoli. Tuttavia, gli utenti del database indipendente aggiunti al ruolo dbmanager in master
non possono essere usati per creare nuovi database.
Nome ruolo | Descrizione |
---|---|
dbmanager | Può creare ed eliminare database. Un membro del ruolo dbmanager che crea un database diventa il proprietario di tale database, che consente all'utente di connettersi a tale database come utente dbo. L'utente dbo ha tutte le autorizzazioni database nel database. I membri del ruolo dbmanager non hanno necessariamente l'autorizzazione per accedere ai database di cui non sono proprietari. |
db_exporter | Si applica solo ai pool SQL dedicati di Azure Synapse Analytics (in precedenza SQL Data Warehouse). I membri del ruolo predefinito del database db_exporter possono eseguire tutte le attività di esportazione dei dati. Le autorizzazioni concesse tramite questo ruolo sono CREATE TABLE, ALTER ANY SCHEMA, ALTER ANY EXTERNAL DATA SOURCE, ALTER ANY EXTERNAL FILE FORMAT. |
loginmanager | Può creare ed eliminare account di accesso nel database virtuale master . |
Nota
L'entità a livello di server e l'amministratore di Azure Active Directory (se configurata) hanno tutte le autorizzazioni in Database SQL e Azure Synapse Analytics senza dover essere membri di alcun ruolo. Per altre informazioni, vedere Autenticazione e autorizzazione del database SQL: concessione dell'accesso.
Alcuni ruoli del database non sono applicabili ad Azure SQL o Azure Synapse:
- db_backupoperator non è applicabile nel database SQL di Azure (non nell'istanza gestita di SQL di Azure) e nel pool serverless di Azure Synapse Analytics perché i comandi T-SQL di backup e ripristino non sono disponibili.
- db_datawriter e db_denydatawriter non sono applicabili al serverless di Azure Synapse Analytics perché legge solo dati esterni.
Ruoli msdb
Il database msdb contiene ruoli specifici per uno scopo illustrati nella tabella seguente.
Nome del ruolo in msdb | Descrizione |
---|---|
db_ssisadmin db_ssisoperator db_ssisltduser |
I membri di questi ruoli del database possono amministrare e usare SSIS. Le istanze di SQL Server aggiornate da una versione precedente potrebbero contenere una versione precedente del ruolo denominata usando Data Transformation Services (DTS) anziché SSIS. Per altre informazioni, vedere Ruoli di Integration Services (servizio SSIS). |
dc_admin dc_operator dc_proxy |
I membri di tali ruoli del database possono amministrare e utilizzare l'agente di raccolta dati. Per altre informazioni, vedere Data Collection. |
PolicyAdministratorRole | I membri del ruolo del database db_ PolicyAdministratorRole possono eseguire tutte le attività di configurazione e manutenzione su criteri e condizioni della gestione basata su criteri. Per altre informazioni, vedere Amministrare server usando la gestione basata su criteri. |
ServerGroupAdministratorRole ServerGroupReaderRole |
I membri di questi ruoli del database possono amministrare e utilizzare gruppi di server registrati. |
dbm_monitor | Creato nel database msdb quando il primo database viene registrato in Monitoraggio mirroring del database. Il ruolo dbm_monitor non include alcun membro fino a quando un amministratore di sistema non provvede all'assegnazione di utenti al ruolo stesso. |
Importante
I membri dei ruoli db_ssisadmin e dc_admin possono essere in grado di elevare i propri privilegi a sysadmin. Questa elevazione dei privilegi può verificarsi perché tali ruoli possono modificare i pacchetti Integration Services e questi ultimi possono essere eseguiti da SQL Server usando il contesto di sicurezza sysadmin di SQL Server Agent. Per evitare questa elevazione dei privilegi quando si eseguono piani di manutenzione, set di raccolta dati e altri pacchetti di Integration Services, configurare i processi di SQL Server Agent che eseguono pacchetti per usare un account proxy con privilegi limitati o aggiungere solo membri sysadmin ai ruoli di db_ssisadmin e dc_admin .
Uso dei ruoli a livello di database
Nella tabella seguente vengono illustrati i comandi, le viste e le funzioni per l'uso dei ruoli a livello di database.
Funzionalità di | Type | Description |
---|---|---|
sp_helpdbfixedrole (Transact-SQL) | Metadati | Restituisce un elenco dei ruoli predefiniti del database. |
sp_dbfixedrolepermission (Transact-SQL) | Metadati | Visualizza le autorizzazioni di un ruolo predefinito del database. |
sp_helprole (Transact-SQL) | Metadati | Restituisce informazioni sui ruoli del database corrente. |
sp_helprolemember (Transact-SQL) | Metadati | Restituisce informazioni sui membri di un ruolo del database corrente. |
sys.database_role_members (Transact-SQL) | Metadati | Restituisce una riga per ogni membro di ogni ruolo del database. |
IS_MEMBER (Transact-SQL) | Metadati | Indica se l'utente corrente è membro del gruppo di Microsoft Windows o del ruolo di database di Microsoft SQL Server specificato. |
CREATE ROLE (Transact-SQL) | Comando | Crea un nuovo ruolo di database nel database corrente. |
ALTER ROLE (Transact-SQL) | Comando | Modifica il nome o l'appartenenza di un ruolo del database. |
DROP ROLE (Transact-SQL) | Comando | Rimuove un ruolo dal database. |
sp_addrole (Transact-SQL) | Comando | Crea un nuovo ruolo di database nel database corrente. |
sp_droprole (Transact-SQL) | Comando | Rimuove un ruolo del database dal database corrente. |
sp_addrolemember (Transact-SQL) | Comando | Aggiunge un utente del database, un ruolo del database, un account di accesso di Windows o un gruppo di Windows a un ruolo del database nel database corrente. Tutte le piattaforme ad eccezione di Analytics Platform System (PDW) e Azure Synapse devono invece usare ALTER ROLE . |
sp_droprolemember (Transact-SQL) | Comando | Rimuove un account di sicurezza da un ruolo di SQL Server nel database corrente. Tutte le piattaforme ad eccezione di Analytics Platform System (PDW) e Azure Synapse devono invece usare ALTER ROLE . |
GRANT | Autorizzazioni | Aggiunge autorizzazioni a un ruolo. |
DENY | Autorizzazioni | Nega un'autorizzazione a un ruolo. |
REVOKE | Autorizzazioni | Rimuove le autorizzazioni concesse o negate in precedenza. |
Ruolo database pubblico
Ogni utente di database appartiene al ruolo di database public . Quando un utente non ha concesso o negato autorizzazioni specifiche per un oggetto a protezione diretta, l'utente eredita le autorizzazioni concesse al pubblico su tale oggetto. Gli utenti del database non possono essere rimossi dal ruolo pubblico .
Esempi
Gli esempi in questa sezione illustrano come usare i ruoli a livello di database.
R. Aggiunta di un utente a un ruolo a livello di database
Nell'esempio seguente l'utente 'Ben' viene aggiunto al ruolo db_datareader
predefinito a livello di database .
ALTER ROLE db_datareader
ADD MEMBER Ben;
GO
B. Elenco di tutte le entità di database membri di un ruolo a livello di database
L'istruzione seguente restituisce tutti i membri di qualsiasi ruolo del database.
SELECT roles.principal_id AS RolePrincipalID
, roles.name AS RolePrincipalName
, database_role_members.member_principal_id AS MemberPrincipalID
, members.name AS MemberPrincipalName
FROM sys.database_role_members AS database_role_members
JOIN sys.database_principals AS roles
ON database_role_members.role_principal_id = roles.principal_id
JOIN sys.database_principals AS members
ON database_role_members.member_principal_id = members.principal_id;
GO