La sicurezza dei dati è un pilastro cruciale nell'amministrazione dei database, e SQL Server si distingue per le sue capacità avanzate di proteggere informazioni sensibili. Con il continuo aggiornamento e miglioramento della piattaforma, SQL Server ha integrato meccanismi di sicurezza sempre più raffinati e granulari. Tali miglioramenti non solo rispondono alle crescenti minacce informatiche ma offrono anche una flessibilità senza precedenti nella gestione delle autorizzazioni.
L'approccio granulare alla sicurezza in SQL Server permette agli amministratori di definire permessi specifici a livelli estremamente dettagliati. Questo significa che le autorizzazioni possono essere impostate non solo a livello di tabelle o database interi ma possono arrivare fino al dettaglio di singole colonne e righe. Come vedremo nel caso studio, è possibile configurare permessi che limitano l'accesso a determinate informazioni in base al ruolo o al contesto di lavoro dell'utente, assicurando che ciascuno possa accedere solo ai dati necessari per le proprie funzioni specifiche. Questo modello di sicurezza dettagliato è particolarmente vantaggioso in ambienti con elevati standard di compliance e sicurezza, dove la minima esposizione di dati sensibili può comportare rischi significativi. L'implementazione di politiche di sicurezza a livello di riga (Row-Level Security, RLS), la mascheratura dinamica dei dati (Dynamic Data Masking, DDM) e la creazione di viste per limitare la visibilità dei dati sensibili, sono esempi di come SQL Server permetta agli amministratori di mettere in pratica una sicurezza personalizzata e ad alta definizione.
Le recenti versioni di SQL Server hanno ulteriormente potenziato queste capacità introducendo nuovi ruoli e permessi specifici che facilitano la gestione degli accessi senza necessariamente concedere diritti amministrativi completi, riducendo così il rischio di accessi non autorizzati o abusi.

Caso studio

- CustomerID: Identificativo unico per ogni cliente.
- Title: Titolo del cliente (es. Mr., Ms.).
- FirstName: Nome del cliente.
- MiddleName: Secondo nome del cliente (se presente).
- LastName: Cognome del cliente.
- SalesPerson: Dipendente responsabile delle vendite che ha seguito il cliente.
- EmailAddress: Indirizzo email del cliente.
- AddressType: Tipo di indirizzo (es. Main Office).
- Phone: Numero di telefono del cliente.
- Password: Hash della password del cliente.
- ModifiedDate: Data dell'ultima modifica del record.

Creazione di una Vista per limitare l’accesso ai dati sensibili


CREATE VIEW [SalesLT].[HR_CustomerDetails] AS SELECT Title ,FirstName ,MiddleName ,LastName ,SalesPerson ,EmailAddress ,ModifiedDate FROM [RoadTrip].[SalesLT].[CustomersDetails];
Codice 1 – Codice T-SQL per la creazione della vista HR_CustomerDetails

Creazione di un Login e di uno User
- Windows Login: utilizzano le credenziali di autenticazione di Windows, permettendo agli utenti e ai gruppi definiti nel dominio Windows di accedere a SQL Server. L'autenticazione avviene attraverso il controllo di sicurezza di Windows, il che significa che gli utenti non hanno bisogno di fornire ulteriori credenziali quando accedono all’istanza SQL Server.
- SQL Server Login: sono specifici per SQL Server e non dipendono da Windows. Gli utenti devono fornire un nome utente e una password specifici quando si connettono a SQLServer. Questo tipo di login è utile per gli utenti che non fanno parte dell'ambiente di rete Windows, come nel caso di accessi da applicazioni web o da sistemi non Windows.
- Azure Active Directory Login: in ambienti cloud o ibridi che utilizzano Azure SQL Database, SQL Server supporta l'autenticazione tramite Azure Active Directory (Azure AD). Questo permette l'integrazione con le politiche e i controlli di sicurezza di Azure, facilitando la gestione degli accessi e delle identità.

USE [master] CREATE LOGIN [HR_viewers] WITH PASSWORD = N’ * * * ’ ,DEFAULT_DATABASE = [RoadTrip]; USE [RoadTrip] CREATE USER [HR_viewers] FOR LOGIN [HR_viewers]; ALTER USER [HR_viewers] WITH DEFAULT_SCHEMA = [SalesLT]; GO
- db_owner: completo controllo amministrativo su tutte le funzioni del database
- db_datareader: permesso di leggere tutte le tabelle e le viste del database.
- db_datawriter: permesso di modificare dati aggiungendo, eliminando o modificando le righe nelle tabelle.
- db_ddladmin: permesso di eseguire comandi DDL (Data Definition Language), come CREATE, ALTER, e DROP.
- public: collegamento al database, senza nessun permesso

USE [RoadTrip] GRANT SELECT ON [SalesLT].[HR_CustomerDetails] TO [HR_viewers];
Limitare l’Accesso ai dati Filtrando per Riga
CREATE FUNCTION SalesLT.SalesFilter (@SalesPerson NVARCHAR(128)) RETURNS TABLE WITH SCHEMABINDING AS RETURN SELECT 1 AS SalesResult WHERE @SalesPerson = CONCAT ( N'adventure-works\' ,SUSER_NAME() );
CREATE SECURITY POLICY SalesLT.SalesPersonFilter ADD FILTER PREDICATE SalesLT.SalesFilter (SalesPerson) ON SalesLT.CustomerDetails;
Codice 5 – Codice T-SQL per la creazione della politica di sicurezza SalesPersonFilter
