Procedura dettagliata per le funzionalità di sicurezza di SQL Server in LinuxWalkthrough for the security features of SQL Server on Linux

Nel caso di un utente di Linux che è una novità di SQL Server, le attività seguenti illustrano alcune delle attività di protezione.If you are a Linux user who is new to SQL Server, the following tasks walk you through some of the security tasks. Queste non sono specifiche di Linux o univoco, ma consente di farsi un'idea delle aree per approfondire la verifica.These are not unique or specific to Linux, but it helps to give you an idea of areas to investigate further. In ogni esempio viene fornito un collegamento alla documentazione approfondita per tale area.In each example, a link is provided to the in-depth documentation for that area.

Nota

L'esempio seguente usa il AdventureWorks2014 database di esempio.The following examples use the AdventureWorks2014 sample database. Per istruzioni su come ottenere e installare il database di esempio, vedere ripristinare un database di SQL Server da Windows a Linux.For instructions on how to obtain and install this sample database, see Restore a SQL Server database from Windows to Linux.

Creare un account di accesso e un utente del databaseCreate a login and a database user

Concedere ad altri utenti l'accesso a SQL Server mediante la creazione di un account di accesso nel database master utilizzando il CREATE LOGIN istruzione.Grant others access to SQL Server by creating a login in the master database using the CREATE LOGIN statement. Esempio:For example:

CREATE LOGIN Larry WITH PASSWORD = '************';  
Nota

Utilizzare sempre una password complessa al posto di asterischi precedente.Always use a strong password in place of the asterisks above.

Gli account di accesso possono connettersi a SQL Server e dispongono di accesso (con autorizzazioni limitate) al database master.Logins can connect to SQL Server and have access (with limited permissions) to the master database. Per connettersi a un database utente, un'identità corrispondente a livello di database, denominato di un utente del database è necessario un account di accesso.To connect to a user-database, a login needs a corresponding identity at the database level, called a database user. Gli utenti sono specifici di ogni database e devono essere creati separatamente in ogni database per concedere l'accesso.Users are specific to each database and must be separately created in each database to grant them access. Nell'esempio seguente consente di passare al database AdventureWorks2014 e quindi utilizza il CREATE USER istruzione per creare un utente denominato Larry che è associato con l'account di accesso denominato Larry.The following example moves you into the AdventureWorks2014 database, and then uses the CREATE USER statement to create a user named Larry that is associated with the login named Larry. Se l'account di accesso e l'utente sono correlati (mapping reciproco) sono oggetti diversi.Though the login and the user are related (mapped to each other), they are different objects. L'account di accesso è un'entità a livello di server.The login is a server-level principle. L'utente è un'entità a livello di database.The user is a database-level principal.

USE AdventureWorks2014;
GO
CREATE USER Larry;
GO
  • Un account di amministratore di SQL Server può connettersi a qualsiasi database e può creare più account di accesso e utenti in qualsiasi database.A SQL Server administrator account can connect to any database and can create more logins and users in any database.
  • Quando si crea un database diventano il proprietario del database, in grado di connettersi a tale database.When someone creates a database they become the database owner, which can connect to that database. I proprietari del database è possono creare altri utenti.Database owners can create more users.

In un secondo momento è possibile autorizzare altri account di accesso per creare un account di accesso più concedendo il ALTER ANY LOGIN autorizzazione.Later you can authorize other logins to create a more logins by granting them the ALTER ANY LOGIN permission. All'interno di un database, è possibile autorizzare altri utenti per creare altri utenti, concedendo il ALTER ANY USER autorizzazione.Inside a database, you can authorize other users to create more users by granting them the ALTER ANY USER permission. Esempio:For example:

GRANT ALTER ANY LOGIN TO Larry;   
GO   

USE AdventureWorks2014;   
GO   
GRANT ALTER ANY USER TO Jerry;    
GO   

A questo punto l'account di accesso erano può creare più account di accesso e l'utente erano possono creare altri utenti.Now the login Jerry can create more logins, and the user Jerry can create more users.

La concessione dell'accesso con privilegi minimiGranting access with least privileges

I primi utenti per connettersi a un database utente sarà l'amministratore e l'account del proprietario del database.The first people to connect to a user-database will be the administrator and database owner accounts. Tuttavia, questi utenti hanno tutti il le autorizzazioni del database.However these users have all the the permissions available on the database. Si tratta di autorizzazioni maggiori rispetto a cui la maggior parte degli utenti devono avere.This is more permission than most users should have.

Quando sono semplicemente operazioni preliminari, è possibile assegnare alcune categorie generali di autorizzazioni tramite l'oggetto incorporato ruoli predefiniti del database.When you are just getting started, you can assign some general categories of permissions by using the built-in fixed database roles. Ad esempio, il db_datareader , leggere tutte le tabelle nel database del ruolo predefinito del database, ma non apportare alcuna modifica.For example, the db_datareader fixed database role can read all tables in the database, but make no changes. Concedere l'appartenenza a un ruolo predefinito del database utilizzando il ALTER ROLE istruzione.Grant membership in a fixed database role by using the ALTER ROLE statement. Nell'esempio seguente viene aggiunta l'utente Jerry per il db_datareader ruolo predefinito del database.The following example add the user Jerry to the db_datareader fixed database role.

USE AdventureWorks2014;   
GO   

ALTER ROLE db_datareader ADD MEMBER Jerry;   

Per un elenco dei ruoli predefiniti del database, vedere ruoli a livello di Database.For a list of the fixed database roles, see Database-Level Roles.

In un secondo momento, quando si è pronti per configurare l'accesso più precisa ai dati (scelta consigliati), creare ruoli del database definiti dall'utente utilizzando CREATE ROLE istruzione.Later, when you are ready to configure more precise access to your data (highly recommended), create your own user-defined database roles using CREATE ROLE statement. Quindi, assegnare autorizzazioni granulari specifiche all'utente, ruoli personalizzati.Then assign specific granular permissions to you custom roles.

Ad esempio, le istruzioni che seguono creano un ruolo del database denominato Sales, concede il Sales gruppo la possibilità di visualizzare, aggiornare ed eliminare le righe il Orders tabella e quindi aggiunge l'utente Jerry per il Sales ruolo.For example, the following statements create a database role named Sales, grants the Sales group the ability to see, update, and delete rows from the Orders table, and then adds the user Jerry to the Sales role.

CREATE ROLE Sales;   
GRANT SELECT ON Object::Sales TO Orders;   
GRANT UPDATE ON Object::Sales TO Orders;   
GRANT DELETE ON Object::Sales TO Orders;   
ALTER ROLE Sales ADD MEMBER Jerry;   

Per ulteriori informazioni sul sistema di autorizzazione, vedere Introduzione alle autorizzazioni del motore di Database.For more information about the permission system, see Getting Started with Database Engine Permissions.

Configurare la sicurezza a livello di rigaConfigure row-level security

Sicurezza a livello di riga consente di limitare l'accesso alle righe in un database in base all'utente che esegue una query.Row-Level Security enables you to restrict access to rows in a database based on the user executing a query. Questa funzionalità è utile per scenari come garantire che i clienti possono accedere solo i propri dati o che lavoratori possano accedere solo dati inerenti al proprio reparto.This feature is useful for scenarios like ensuring that customers can only access their own data or that workers can only access data that is pertinent to their department.

Accesso a livello di riga descritta di seguito una procedura di impostazione di due utenti diversi di Sales.SalesOrderHeader tabella.The steps below walk through setting up two Users with different row-level access to the Sales.SalesOrderHeader table.

Creare due account utente per testare la sicurezza a livello di riga:Create two user accounts to test the row level security:

USE AdventureWorks2014;   
GO   

CREATE USER Manager WITHOUT LOGIN;     

CREATE USER SalesPerson280 WITHOUT LOGIN;    

Concedere l'accesso in lettura nel Sales.SalesOrderHeader tabella per entrambi gli utenti:Grant read access on the Sales.SalesOrderHeader table to both users:

GRANT SELECT ON Sales.SalesOrderHeader TO Manager;      
GRANT SELECT ON Sales.SalesOrderHeader TO SalesPerson280;    

Creare un nuovo schema e inline con valori di tabella (funzione).Create a new schema and inline table-valued function. La funzione restituisce 1 quando una riga di SalesPersonID colonna corrisponde all'ID di un SalesPerson account di accesso o se l'utente che esegue la query è l'utente di gestione.The function returns 1 when a row in the SalesPersonID column matches the ID of a SalesPerson login or if the user executing the query is the Manager user.

CREATE SCHEMA Security;   
GO   

CREATE FUNCTION Security.fn_securitypredicate(@SalesPersonID AS int)     
    RETURNS TABLE   
WITH SCHEMABINDING   
AS     
   RETURN SELECT 1 AS fn_securitypredicate_result    
WHERE ('SalesPerson' + CAST(@SalesPersonId as VARCHAR(16)) = USER_NAME())     
    OR (USER_NAME() = 'Manager');    

Creare un criterio di sicurezza aggiungendo la funzione come un filtro e predicato di blocco della tabella:Create a security policy adding the function as both a filter and a block predicate on the table:

CREATE SECURITY POLICY SalesFilter   
ADD FILTER PREDICATE Security.fn_securitypredicate(SalesPersonID)    
  ON Sales.SalesOrderHeader,   
ADD BLOCK PREDICATE Security.fn_securitypredicate(SalesPersonID)    
  ON Sales.SalesOrderHeader   
WITH (STATE = ON);   

Eseguire la seguente query di SalesOrderHeader tabella ciascun utente.Execute the following to query the SalesOrderHeader table as each user. Verificare che SalesPerson280 vede solo le 95 righe le proprie vendite e che il Manager possono visualizzare tutte le righe nella tabella.Verify that SalesPerson280 only sees the 95 rows from their own sales and that the Manager can see all the rows in the table.

EXECUTE AS USER = 'SalesPerson280';   
SELECT * FROM Sales.SalesOrderHeader;    
REVERT; 

EXECUTE AS USER = 'Manager';   
SELECT * FROM Sales.SalesOrderHeader;   
REVERT;   

Modificare i criteri di sicurezza per disabilitarli.Alter the security policy to disable the policy. Ora entrambi gli utenti possono accedere a tutte le righe.Now both users can access all rows.

ALTER SECURITY POLICY SalesFilter   
WITH (STATE = OFF);    

Abilitare la maschera dati dinamicaEnable dynamic data masking

La maschera dati dinamica consente di limitare l'esposizione dei dati sensibili agli utenti di un'applicazione completamente o parzialmente maschera determinate colonne.Dynamic Data Masking enables you to limit the exposure of sensitive data to users of an application by fully or partially masking certain columns.

Utilizzare un ALTER TABLE istruzione per aggiungere una funzione di maschera per la EmailAddress colonna il Person.EmailAddress tabella:Use an ALTER TABLE statement to add a masking function to the EmailAddress column in the Person.EmailAddress table:

USE AdventureWorks2014;
GO
ALTER TABLE Person.EmailAddress    
ALTER COLUMN EmailAddress    
ADD MASKED WITH (FUNCTION = 'email()');

Creare un nuovo utente TestUser con SELECT autorizzazione per la tabella, quindi eseguire una query come TestUser per visualizzare i dati mascherati:Create a new user TestUser with SELECT permission on the table, then execute a query as TestUser to view the masked data:

CREATE USER TestUser WITHOUT LOGIN;   
GRANT SELECT ON Person.EmailAddress TO TestUser;    

EXECUTE AS USER = 'TestUser';   
SELECT EmailAddressID, EmailAddress FROM Person.EmailAddress;       
REVERT;    

Verificare che la funzione di maschera modifica l'indirizzo di posta elettronica del primo record da:Verify that the masking function changes the email address in the first record from:

EmailAddressIDEmailAddressID EmailAddressEmailAddress
11 ken0@adventure-works.com

intointo

EmailAddressIDEmailAddressID EmailAddressEmailAddress
11 kXXX@XXXX.com

Abilitazione di Transparent Data EncryptionEnable Transparent Data Encryption

Una minaccia per il database è il rischio che un utente verrà rubare i file di database dal disco rigido.One threat to your database is the risk that someone will steal the database files off of your hard-drive. Questo problema può verificarsi con un'intrusione che ottiene l'accesso con privilegi elevato al sistema, tramite le azioni di un dipendente di problema o furto del computer contenente i file (ad esempio un laptop).This could happen with an intrusion that gets elevated access to your system, through the actions of a problem employee, or by theft of the computer containing the files (such as a laptop).

Transparent Data Encryption (TDE) consente di crittografare i file di dati archiviati sul disco rigido.Transparent Data Encryption (TDE) encrypts the data files as they are stored on the hard drive. Il database master del motore di database di SQL Server con la chiave di crittografia, in modo che il motore di database può modificare i dati.The master database of the SQL Server database engine has the encryption key, so that the database engine can manipulate the data. Impossibile leggere i file di database senza accesso alla chiave.The database files cannot be read without access to the key. Gli amministratori di alto livello possono gestire, il backup e ricreare la chiave, pertanto può essere spostato il database, ma solo da utenti selezionati.High-level administrators can manage, backup, and recreate the key, so the database can be moved, but only by selected people. Quando TDE è configurato, il tempdb database viene crittografato automaticamente.When TDE is configured, the tempdb database is also automatically encrypted.

Poiché il motore di Database può leggere i dati, Transparent Data Encryption non fornisce protezione da accessi non autorizzati dagli amministratori del computer che possono leggere la memoria direttamente o accedere a SQL Server tramite un account amministratore.Since the Database Engine can read the data, Transparent Data Encryption does not protect against unauthorized access by administrators of the computer who can directly read memory, or access SQL Server through an administrator account.

Configurare Transparent Data EncryptionConfigure TDE

  • Creare una chiave masterCreate a master key
  • Creare o ottenere un certificato protetto dalla chiave masterCreate or obtain a certificate protected by the master key
  • Creare una chiave di crittografia del database e proteggerla mediante il certificatoCreate a database encryption key and protect it by the certificate
  • Impostare il database per l'uso della crittografiaSet the database to use encryption

Configurazione di TDE richiede CONTROL autorizzazione per il database master e CONTROL autorizzazione per il database utente.Configuring TDE requires CONTROL permission on the master database and CONTROL permission on the user database. In genere un amministratore configura Transparent Data Encryption.Typically an administrator configures TDE.

L'esempio seguente illustra come crittografare e decrittografare il database AdventureWorks2014 usando un certificato installato nel server denominato MyServerCert.The following example illustrates encrypting and decrypting the AdventureWorks2014 database using a certificate installed on the server named MyServerCert.

USE master;  
GO  

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**********';  
GO  

CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My Database Encryption Key Certificate';  
GO  

USE AdventureWorks2014;  
GO

CREATE DATABASE ENCRYPTION KEY  
WITH ALGORITHM = AES_256  
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;  
GO

ALTER DATABASE AdventureWorks2014  
SET ENCRYPTION ON;   

Per rimuovere Transparent Data Encryption, eseguireALTER DATABASE AdventureWorks2014 SET ENCRYPTION OFF;To remove TDE, execute ALTER DATABASE AdventureWorks2014 SET ENCRYPTION OFF;

Le operazioni di crittografia e decrittografia sono pianificate sui thread di background da SQL Server.The encryption and decryption operations are scheduled on background threads by SQL Server. Per visualizzare lo stato di queste operazioni, è possibile usare le viste del catalogo e le viste a gestione dinamica nell'elenco illustrato di seguito in questo argomento.You can view the status of these operations using the catalog views and dynamic management views in the list that appears later in this topic.

Avviso

I file di backup dei database in cui è abilitata la funzionalità TDE vengono crittografati anche tramite la chiave di crittografia del database.Backup files of databases that have TDE enabled are also encrypted by using the database encryption key. Di conseguenza, quando questi backup vengono ripristinati, è necessario disporre del certificato che protegge la chiave di crittografia del database.As a result, when you restore these backups, the certificate protecting the database encryption key must be available. Pertanto, oltre ad eseguire il backup del database, è necessario assicurarsi di conservare un backup dei certificati server per impedire la perdita di dati.This means that in addition to backing up the database, you have to make sure that you maintain backups of the server certificates to prevent data loss. Se il certificato non è più disponibile, si verificherà la perdita di dati.Data loss will result if the certificate is no longer available. Per altre informazioni, vedere SQL Server Certificates and Asymmetric Keys.For more information, see SQL Server Certificates and Asymmetric Keys.

Per ulteriori informazioni su TDE, vedere Transparent Data Encryption (TDE).For more information about TDE, see Transparent Data Encryption (TDE).

Configurare la crittografia dei backupConfigure backup encryption

SQL Server ha la possibilità di crittografare i dati durante la creazione di un backup.SQL Server has the ability to encrypt the data while creating a backup. Specificando l'algoritmo di crittografia e il componente di crittografia (certificato o chiave asimmetrica) durante la creazione di un backup, è possibile creare un file di backup crittografato.By specifying the encryption algorithm and the encryptor (a certificate or asymmetric key) when creating a backup, you can create an encrypted backup file.

Avviso

È molto importante eseguire il backup del certificato o della chiave asimmetrica e preferibilmente in un percorso diverso dal file di backup utilizzato per la crittografia.It is very important to back up the certificate or asymmetric key, and preferably to a different location than the backup file it was used to encrypt. Senza il certificato o la chiave asimmetrica, non è possibile ripristinare il backup, rendendo il file di backup inutilizzabile.Without the certificate or asymmetric key, you cannot restore the backup, rendering the backup file unusable.

Nell'esempio seguente viene creato un certificato e quindi creato un backup protetto dal certificato.The following example creates a certificate, and then creates a backup protected by the certificate.

USE master;  
GO  
CREATE CERTIFICATE BackupEncryptCert   
   WITH SUBJECT = 'Database backups';  
GO 
BACKUP DATABASE [AdventureWorks2014]  
TO DISK = N'/var/opt/mssql/backups/AdventureWorks2014.bak'  
WITH  
  COMPRESSION,  
  ENCRYPTION   
   (  
   ALGORITHM = AES_256,  
   SERVER CERTIFICATE = BackupEncryptCert  
   ),  
  STATS = 10  
GO  

Per ulteriori informazioni, vedere crittografia dei Backup.For more information, see Backup Encryption.

Passaggi successiviNext steps

Per ulteriori informazioni sulle caratteristiche di sicurezza di SQL Server, vedere centro di sicurezza per il motore di Database di SQL Server e Database SQL di Azure.For more information about the security features of SQL Server, see Security Center for SQL Server Database Engine and Azure SQL Database.