Finché usiamo il database per piccoli siti web, o per piccoli programmi di gestione, anche i processi di autenticazione e di sicurezza, possono essere presi alla leggera. Se però il sito web contiene informazioni aziendali o commerciali, o il programma è un CRM aziendale, il database deve seguire delle regole di sicurezza e autenticazione.
Con SQL Server siamo in grado di gestire l'autenticazione in due modi:
- tramite gli utenti e i ruoli presenti in windows;
- tramite gli utenti di SQL Server.
Con questa doppia scelta possiamo applicare i permessi offline o per progetti online.
Nel primo caso, sfruttando l'autenticazione fornita da Windows, l'utente di LDAP sarà presente nel server ed avrà particolari diritti che vengono replicati in SQL Server. Al contrario, con gli account SQL la sicurezza è inferiore e il numero di accessi raddoppia.
Anche gli stessi creatori di SQL Server consigliano, ove possibile, l'utilizzo dell'autenticazione Windows piuttosto che quella SQL.
Listato 1. Creazione utenti
--utente windows con ruolo bulkadmin e database MyDatabase
CREATE LOGIN [RAFFAEU-PCAdministrator]
FROM WINDOWS
WITH DEFAULT_DATABASE=[MyDatabase]
GO
EXEC
master..sp_addsrvrolemember @loginame = N'RAFFAEU-PCAdministrator',
@rolename = N'bulkadmin'
GO
--Utente SQL in lingua Italiano e controllo scadenza
CREATE LOGIN [raffaele]
WITH PASSWORD=N'oscar' MUST_CHANGE,
DEFAULT_DATABASE=[MyDatabase],
DEFAULT_LANGUAGE=[Italiano],
CHECK_EXPIRATION=ON, CHECK_POLICY=ON GO
Esistono due tipologie di autorizzazioni:
- una per gestire gli accessi al database e le funzioni di amministrazione possibili;
- una per l'accesso ai dati e agli oggetti.
Ruoli amministrativi
Ora che abbiamo due utenti nel database principale, possiamo giocare con i permessi. Vediamo quali sono i gruppi per operare nel database, quindi eseguire backup, modifiche, etc.
bulkadmin | Eseguono istruzioni di inserimento multiplo |
diskadmin | Gestiscono i file sul disco (.mdf) |
dbcreator | Creano e modificano database |
processadmin | Gestiscono i processi e i job |
serveradmin | Configurano il server (impostazioni) |
setupadmin | Gestiscono la replica |
sysadmin | Qualsiasi attività amministrativa sul database |
Ruoli del singolo database
Oltre ai ruoli amministrativi, abbiamo anche quelli di gestione e accesso ai dati. Sicuramente capiterà più spesso di dover gestire questi utenti ed il loro accesso a viste o oggetti vari. Conviene sempre prima progettare un modello relazionale di gruppi e permessi, per non perdersi poi nella giungla degli utenti del database.
db_accessadmin | Gestiscono gli utenti del database |
db_backupoperator | Possono eseguire le funzioni di backup |
db_datareader | Possono esclusivamente visualizzare i dati |
db_datawriter | Possono eseguire INSERT e UPDATE |
db_ddladmin | Possono modificare gli oggetti o vincolarli |
db_denydatareader | Non possono leggere i dati |
db_denydatawriter | Non possono eseguire modifiche ai dati |
Grazie a queste caratteristiche, oltre alla creazione personalizzata di ruoli, possiamo gestire al meglio la sicurezza. In questo modo siamo sicuri che un utente non autorizzato, per esempio, non potrà involontariamente cancellare dati.