Delen via


Overzicht van de beveiligingsfuncties van SQL Server op Linux

Van toepassing op:SQL Server op Linux

Als u een Linux-gebruiker bent die niet bekend is met SQL Server, worden enkele van de beveiligingstaken door de volgende taken begeleid. Deze zijn niet uniek of specifiek voor Linux, maar het helpt u een idee te geven van gebieden om verder te onderzoeken. In elk voorbeeld wordt een koppeling naar de uitgebreide documentatie voor dat gebied gegeven.

De codevoorbeelden in dit artikel gebruiken de AdventureWorks2025 of AdventureWorksDW2025 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .

Een aanmelding en een databasegebruiker maken

Anderen toegang verlenen tot SQL Server door een aanmelding in de master database te maken met behulp van de instructie CREATE LOGIN . Voorbeeld:

CREATE LOGIN Larry
    WITH PASSWORD = '<password>';

Waarschuwing

Uw wachtwoord moet voldoen aan het standaard SQL Server-wachtwoordbeleid . Standaard moet het wachtwoord ten minste acht tekens lang zijn en tekens bevatten uit drie van de volgende vier sets: hoofdletters, kleine letters, basis-10 cijfers en symbolen. Wachtwoorden mogen maximaal 128 tekens lang zijn. Gebruik wachtwoorden die zo lang en complex mogelijk zijn.

Gebruikersaccounts kunnen verbinding maken met SQL Server en toegang hebben (met beperkte machtigingen) tot de master database. Als u verbinding wilt maken met een gebruikersdatabase, moet een aanmelding een bijbehorende identiteit hebben op databaseniveau, een databasegebruiker genoemd. Gebruikers zijn specifiek voor elke database en moeten afzonderlijk worden gemaakt in elke database om hen toegang te verlenen. In het volgende voorbeeld gaat u naar de database en gebruikt u vervolgens de AdventureWorks2025 om een gebruiker met de naam Larry te maken die is gekoppeld aan de aanmeldingsnaamLarry. Hoewel de aanmelding en de gebruiker gerelateerd zijn (toegewezen aan elkaar), zijn ze verschillende objecten. De login is een principal op het niveau van de server. De gebruiker is een principal op databaseniveau.

USE AdventureWorks2022;
GO

CREATE USER Larry;
GO
  • Een SQL Server-beheerdersaccount kan verbinding maken met elke database en meer aanmeldingen en gebruikers in elke database maken.
  • Wanneer iemand een database maakt, wordt deze de eigenaar van de database, die verbinding kan maken met die database. Database-eigenaren kunnen meer gebruikers maken.

Later kunt u andere aanmeldingen autoriseren om meer aanmeldingen te maken door hen de ALTER ANY LOGIN machtiging te geven. In een database kunt u andere gebruikers machtigen om meer gebruikers te maken door hen de ALTER ANY USER machtiging te geven. Voorbeeld:

GRANT ALTER ANY LOGIN TO Larry;
GO

USE AdventureWorks2022;
GO

GRANT ALTER ANY USER TO Jerry;
GO

Nu kan login Larry meer logins creëren, en kan de gebruiker Jerry meer gebruikers creëren.

Toegang verlenen met minimale bevoegdheden

De eerste personen die verbinding maken met een gebruikersdatabase, zijn de beheerders- en database-eigenaaraccounts. Deze gebruikers hebben echter alle machtigingen die beschikbaar zijn voor de database. Dit is meer machtigingen dan de meeste gebruikers moeten hebben.

Wanneer u net aan de slag gaat, kunt u enkele algemene categorieën machtigingen toewijzen met behulp van de ingebouwde vaste databaserollen. De db_datareader vaste databaserol kan bijvoorbeeld alle tabellen in de database lezen, maar geen wijzigingen aanbrengen. Verleen lidmaatschap van een vaste databaserol door de ALTER ROLE instructie te gebruiken. In het volgende voorbeeld wordt de gebruiker Jerry toegevoegd aan de db_datareader vaste databaserol.

USE AdventureWorks2022;
GO

ALTER ROLE db_datareader ADD MEMBER Jerry;

Zie Rollen op databaseniveau voor een lijst met de vaste databaserollen.

Wanneer u later klaar bent om preciezere toegang tot uw gegevens te configureren (sterk aanbevolen), maakt u uw eigen door de gebruiker gedefinieerde databaserollen met de instructie CREATE ROLE . Wijs vervolgens specifieke gedetailleerde machtigingen toe aan uw aangepaste rollen.

Met de volgende instructies maakt u bijvoorbeeld een databaserol met de naam Sales, verleent de groep de Sales mogelijkheid om rijen uit de Orders tabel te zien, bij te werken en te verwijderen en vervolgens de gebruiker Jerry toe te voegen aan de Sales rol.

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;

Zie Aan de slag met database-enginemachtigingen voor meer informatie over het machtigingssysteem.

Beveiliging op rijniveau configureren

Met beveiliging op rijniveau kunt u de toegang tot rijen in een database beperken op basis van de gebruiker die een query uitvoert. Deze functie is handig voor scenario's zoals ervoor zorgen dat klanten alleen toegang hebben tot hun eigen gegevens of dat werknemers alleen toegang hebben tot gegevens die relevant zijn voor hun afdeling.

In de volgende stappen wordt uitgelegd hoe u twee gebruikers instelt met verschillende toegang op rijniveau tot de Sales.SalesOrderHeader tabel.

Maak twee gebruikersaccounts om de beveiliging op rijniveau te testen:

USE AdventureWorks2022;
GO

CREATE USER Manager WITHOUT LOGIN;
CREATE USER SalesPerson280 WITHOUT LOGIN;

Verleen leestoegang op de Sales.SalesOrderHeader-tabel aan beide gebruikers:

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

Maak een nieuw schema en een inline-tabelwaardefunctie. De functie retourneert 1 wanneer een rij in de SalesPersonID kolom overeenkomt met de id van een SalesPerson aanmelding of als de gebruiker die de query uitvoert de managergebruiker is.

CREATE SCHEMA Security;
GO

CREATE FUNCTION Security.fn_securitypredicate
(@SalesPersonID 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')

Maak een beveiligingsbeleid voor het toevoegen van de functie als filter en een blokpredicaat in de tabel:

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);

Voer het volgende uit om een query uit te voeren op de SalesOrderHeader tabel als elke gebruiker. SalesPerson280 Controleer of alleen de 95 rijen van hun eigen verkoop worden weergegeven en of alle Manager rijen in de tabel kunnen worden weergegeven.

EXECUTE AS USER = 'SalesPerson280';

SELECT *
FROM Sales.SalesOrderHeader;

REVERT;

EXECUTE AS USER = 'Manager';

SELECT *
FROM Sales.SalesOrderHeader;

REVERT;

Wijzig het beveiligingsbeleid om het beleid uit te schakelen. Nu hebben beide gebruikers toegang tot alle rijen.

ALTER SECURITY POLICY SalesFilter
    WITH (STATE = OFF);

Dynamische gegevensmaskering inschakelen

Met dynamische gegevensmaskering kunt u de blootstelling van gevoelige gegevens aan gebruikers van een toepassing beperken door bepaalde kolommen volledig of gedeeltelijk te maskeren.

Gebruik een ALTER TABLE instructie om een maskeringsfunctie toe te voegen aan de EmailAddress kolom in de Person.EmailAddress tabel:

USE AdventureWorks2022;
GO

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

Maak een nieuwe gebruiker TestUser met SELECT machtigingen voor de tabel en voer vervolgens een query TestUser uit om de gemaskeerde gegevens weer te geven:

CREATE USER TestUser WITHOUT LOGIN;

GRANT SELECT
    ON Person.EmailAddress TO TestUser;

EXECUTE AS USER = 'TestUser';

SELECT EmailAddressID,
       EmailAddress
FROM Person.EmailAddress;

REVERT;

Controleer of de maskeringsfunctie het e-mailadres in de eerste record wijzigt van:

E-mailadresID E-mailadres
1 ken0@adventure-works.com

in

E-mailadresID E-mailadres
1 kXXX@XXXX.com

Transparante gegevensversleuteling inschakelen

Een bedreiging voor uw database is het risico dat iemand de databasebestanden van uw harde schijf steelt. Dit kan gebeuren met een inbraak die verhoogde toegang tot uw systeem krijgt, via de acties van een probleemmedewerker of door diefstal van de computer met de bestanden (zoals een laptop).

Met Transparent Data Encryption (TDE) worden de gegevensbestanden versleuteld terwijl ze op de harde schijf worden opgeslagen. De master database van de SQL Server-database-engine heeft de versleutelingssleutel, zodat de database-engine de gegevens kan bewerken. De databasebestanden kunnen niet worden gelezen zonder toegang tot de sleutel. Beheerders op hoog niveau kunnen de sleutel beheren, er een back-up van maken en de sleutel opnieuw maken, zodat de database kan worden verplaatst, maar alleen door geselecteerde personen. Wanneer TDE is geconfigureerd, wordt de tempdb database ook automatisch versleuteld.

Omdat de database-engine de gegevens kan lezen, beveiligt TDE niet tegen onbevoegde toegang door beheerders van de computer die rechtstreeks geheugen kunnen lezen of toegang hebben tot SQL Server via een beheerdersaccount.

TDE configureren

  • Een hoofdsleutel maken
  • Een certificaat maken of verkrijgen dat is beveiligd met de hoofdsleutel
  • Een databaseversleutelingssleutel maken en deze beveiligen door het certificaat
  • De database instellen voor het gebruik van versleuteling

Voor het configureren van TDE zijn CONTROL-machtigingen vereist voor de master-database en CONTROL-machtigingen voor de gebruikersdatabase. Doorgaans configureert een beheerder TDE.

In het volgende voorbeeld ziet u hoe u de AdventureWorks2025 database versleutelt en ontsleutelt met behulp van een certificaat dat is geïnstalleerd op de server met de naam MyServerCert.

USE master;
GO

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';
GO

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

USE AdventureWorks2022;
GO

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

ALTER DATABASE AdventureWorks2022
    SET ENCRYPTION ON;

Als u TDE wilt verwijderen, voert u de volgende opdracht uit:

ALTER DATABASE AdventureWorks2022
    SET ENCRYPTION OFF;

De versleutelings- en ontsleutelingsbewerkingen worden gepland op achtergrondthreads door SQL Server. U kunt de status van deze bewerkingen bekijken met behulp van de catalogusweergaven en dynamische beheerweergaven in de lijst die verderop in dit artikel wordt weergegeven.

Waarschuwing

Back-upbestanden van databases waarvoor TDE is ingeschakeld, worden ook versleuteld met behulp van de databaseversleutelingssleutel. Als u deze back-ups herstelt, moet het certificaat dat de databaseversleutelingssleutel beveiligt, beschikbaar zijn. Dit betekent dat u, naast het maken van een back-up van de database, back-ups van de servercertificaten onderhoudt om gegevensverlies te voorkomen. Gegevensverlies resulteert als het certificaat niet meer beschikbaar is. Zie SQL Server-certificaten en asymmetrische sleutels voor meer informatie.

Zie TDE (Transparent Data Encryption) voor meer informatie over TDE.

Back-upversleuteling configureren

SQL Server heeft de mogelijkheid om de gegevens te versleutelen tijdens het maken van een back-up. Door het versleutelingsalgoritmen en de versleuteler (een certificaat of asymmetrische sleutel) op te geven bij het maken van een back-up, kunt u een versleuteld back-upbestand maken.

Waarschuwing

Maak altijd een back-up van het certificaat of de asymmetrische sleutel en bij voorkeur op een andere locatie dan het back-upbestand dat is gebruikt om te versleutelen. Zonder het certificaat of de asymmetrische sleutel kunt u de back-up niet herstellen, waardoor het back-upbestand onbruikbaar wordt.

In het volgende voorbeeld wordt een certificaat gemaakt en wordt vervolgens een back-up gemaakt die wordt beveiligd door het certificaat.

USE master;
GO

CREATE CERTIFICATE BackupEncryptCert
    WITH SUBJECT = 'Database backups';
GO

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

Zie Back-upversleuteling voor meer informatie.