Sdílet prostřednictvím


Návod k funkcím zabezpečení SQL Serveru v Linuxu

Platí pro:SQL Server v Linuxu

Pokud jste uživatelem Linuxu, který s SQL Serverem začíná, provedou vás následující úlohy některými úlohami zabezpečení. Nejsou jedinečné nebo specifické pro Linux, ale pomáhají vám získat představu o oblastech, které je potřeba prozkoumat podrobněji. V každém příkladu je k dispozici odkaz na podrobnou dokumentaci pro danou oblast.

Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .

Vytvoření přihlášení a uživatele databáze

Udělte ostatním přístup k SQL Serveru vytvořením přihlášení v master databázi pomocí příkazu CREATE LOGIN . Například:

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

Upozornění

Vaše heslo by mělo postupovat podle výchozích zásad hesel SQL Serveru . Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.

Přihlášení se můžou připojit k SQL Serveru a mít přístup (s omezenými oprávněními) k master databázi. Pro připojení k uživatelské databázi potřebuje přihlášení odpovídající identitu na úrovni databáze označovanou jako uživatel databáze. Uživatelé jsou specifičtí pro každou databázi a musí být v každé databázi zvlášť vytvořeni, aby jim byl udělen přístup. Následující příklad vás přesune do AdventureWorks2025 databáze a pak pomocí příkazu CREATE USER vytvoří uživatele s názvem Larry, který je přidružený k přihlašovacímu jménem Larry. I když přihlášení a uživatel spolu souvisí (namapované na sebe), jsou to různé objekty. Přihlášení je hlavní entita na úrovni serveru. Uživatel je principál na úrovni databáze.

USE AdventureWorks2022;
GO

CREATE USER Larry;
GO
  • Účet správce SQL Serveru se může připojit k jakékoli databázi a může vytvářet další přihlášení a uživatele v jakékoli databázi.
  • Když někdo vytvoří databázi, stane se vlastníkem databáze, která se může k této databázi připojit. Vlastníci databází můžou vytvářet více uživatelů.

Později můžete autorizovat další přihlášení a vytvořit další přihlášení tím, že jim ALTER ANY LOGIN udělíte oprávnění. V databázi můžete ostatním uživatelům autorizovat, aby vytvořili více uživatelů tím, že jim udělíte ALTER ANY USER oprávnění. Například:

GRANT ALTER ANY LOGIN TO Larry;
GO

USE AdventureWorks2022;
GO

GRANT ALTER ANY USER TO Jerry;
GO

Teď může Larry vytvořit další přihlášení a uživatel Jerry může vytvořit více uživatelů.

Udělení přístupu s nejnižšími oprávněními

Prvním uživatelem, kteří se budou připojovat k uživatelské databázi, jsou účty správce a vlastníka databáze. Tito uživatelé ale mají všechna oprávnění dostupná v databázi. Toto je více oprávnění, než by měla mít většina uživatelů.

Když teprve začínáte, můžete přiřadit některé obecné kategorie oprávnění pomocí předdefinovaných pevných databázových rolí. Například db_datareader pevná role databáze může číst všechny tabulky v databázi, ale provádět žádné změny. Pomocí příkazu ALTER ROLE udělte členství v pevné databázové roli. Následující příklad přidá uživatele Jerry do db_datareader pevné databázové role.

USE AdventureWorks2022;
GO

ALTER ROLE db_datareader ADD MEMBER Jerry;

Seznam pevných databázových rolí najdete v tématu Role na úrovni databáze.

Až budete později připraveni nakonfigurovat přesnější přístup k vašim datům (důrazně doporučujeme), vytvořte vlastní uživatelsky definované databázové role pomocí příkazu CREATE ROLE . Pak vlastním rolím přiřaďte konkrétní podrobná oprávnění.

Následující příkazy například vytvoří roli databáze s názvem Sales, udělí Sales skupině možnost zobrazit, aktualizovat a odstranit řádky z Orders tabulky a pak přidá uživatele Jerry do 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;

Další informace o systému oprávnění najdete v tématu Začínáme s oprávněními databázového stroje.

Konfigurace zabezpečení na úrovni řádků

Zabezpečení na úrovni řádků umožňuje omezit přístup k řádkům v databázi na základě uživatele, který spouští dotaz. Tato funkce je užitečná pro scénáře, jako je zajištění přístupu zákazníků pouze k vlastním datům nebo k datům, která se týkají jejich oddělení, můžou pracovníci přistupovat jenom k datům, která se týkají jejich oddělení.

Následující postup provede nastavením dvou uživatelů s různým přístupem na úrovni řádků k Sales.SalesOrderHeader tabulce.

Vytvořte dva uživatelské účty pro otestování zabezpečení na úrovni řádků:

USE AdventureWorks2022;
GO

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

Udělte oběma uživatelům přístup pro čtení v Sales.SalesOrderHeader tabulce:

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

Vytvořte nové schéma a řádkovou tabulkovou funkci. Funkce vrátí hodnotu 1, když řádek ve SalesPersonID sloupci odpovídá ID SalesPerson přihlášení nebo pokud uživatel, který dotaz spouští, je uživatel Správce.

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

Vytvořte zásadu zabezpečení, která do tabulky přidá funkci jako filtr i blokovací predikát.

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

Spuštěním následujícího příkazu odešlete dotaz na SalesOrderHeader tabulku jako každý uživatel. Ověřte, že SalesPerson280 vidí jenom 95 řádků z jejich vlastního prodeje a že Manager vidí všechny řádky v tabulce.

EXECUTE AS USER = 'SalesPerson280';

SELECT *
FROM Sales.SalesOrderHeader;

REVERT;

EXECUTE AS USER = 'Manager';

SELECT *
FROM Sales.SalesOrderHeader;

REVERT;

Upravte zásady zabezpečení tak, aby zásady zakázaly. Teď mají oba uživatelé přístup ke všem řádkům.

ALTER SECURITY POLICY SalesFilter
    WITH (STATE = OFF);

Povolení dynamického maskování dat

Dynamické maskování dat umožňuje omezit vystavení citlivých dat uživatelům aplikace tím, že plně nebo částečně maskuje určité sloupce.

Pomocí příkazu ALTER TABLE přidejte do sloupce EmailAddress funkci maskování Person.EmailAddress v tabulce.

USE AdventureWorks2022;
GO

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

Vytvořte nového uživatele TestUser s oprávněním SELECT k tabulce a pak spusťte dotaz pro TestUser zobrazení maskovaných dat:

CREATE USER TestUser WITHOUT LOGIN;

GRANT SELECT
    ON Person.EmailAddress TO TestUser;

EXECUTE AS USER = 'TestUser';

SELECT EmailAddressID,
       EmailAddress
FROM Person.EmailAddress;

REVERT;

Ověřte, že funkce maskování změní e-mailovou adresu v prvním záznamu z:

EmailAddressID Emailová adresa
1 ken0@adventure-works.com

do

EmailAddressID Emailová adresa
1 kXXX@XXXX.com

Povolení transparentního šifrování dat

Jednou z hrozeb pro vaši databázi je riziko, že někdo ukradne soubory databáze z vašeho pevného disku. K tomu může dojít v případě vniknutí, které zvýší přístup k vašemu systému, prostřednictvím akcí problémového zaměstnance nebo odcizením počítače obsahujícího soubory (například přenosného počítače).

Transparentní šifrování dat (TDE) šifruje datové soubory, protože jsou uložené na pevném disku. Databáze master databázového stroje SQL Serveru má šifrovací klíč, aby databázový stroj mohl manipulovat s daty. Soubory databáze nelze číst bez přístupu ke klíči. Hlavní administrátoři mohou klíč spravovat, zálohovat a obnovovat, díky čemuž je možné databázi přesunout, ale pouze vybraní lidé to mohou udělat. Při konfiguraci TDE se databáze také automaticky zašifruje.

Vzhledem k tomu, že databázový stroj může číst data, TDE nechrání před neoprávněným přístupem správců počítače, kteří mohou přímo číst paměť nebo přistupovat k SQL Serveru prostřednictvím účtu správce.

Konfigurace TDE (transparentního šifrování dat)

  • Vytvořte hlavní klíč.
  • Vytvoření nebo získání certifikátu chráněného hlavním klíčem
  • Vytvoření šifrovacího klíče databáze a jeho ochrana certifikátem
  • Nastavení databáze tak, aby používala šifrování

Konfigurace TDE vyžaduje CONTROL oprávnění k master databázi a CONTROL oprávnění k uživatelské databázi. Správce obvykle konfiguruje TDE.

Následující příklad znázorňuje šifrování a dešifrování AdventureWorks2025 databáze pomocí certifikátu nainstalovaného na serveru s názvem 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;

Pokud chcete odebrat TDE, spusťte následující příkaz:

ALTER DATABASE AdventureWorks2022
    SET ENCRYPTION OFF;

Operace šifrování a dešifrování jsou naplánovány na vlákna na pozadí sql Serverem. Stav těchto operací můžete zobrazit pomocí zobrazení katalogu a zobrazení dynamické správy v seznamu, který se zobrazí dále v tomto článku.

Výstraha

Zálohovací soubory databází, které mají povolené TDE, se také šifrují pomocí šifrovacího klíče databáze. V důsledku toho musí být při obnovení těchto záloh k dispozici certifikát, který chrání šifrovací klíč databáze. To znamená, že kromě zálohování databáze se ujistěte, že máte zálohy certifikátů serveru, abyste zabránili ztrátě dat. Ztráta dat bude mít za následek, že certifikát už není dostupný. Další informace najdete v tématu Certifikáty SQL Serveru a asymetrické klíče.

Další informace o transparentním šifrování dat najdete v tématu Transparentní šifrování dat (TDE).

Nakonfigurujte šifrování zálohování

SQL Server má možnost šifrovat data při vytváření zálohy. Zadáním šifrovacího algoritmu a šifrovacího algoritmu (certifikátu nebo asymetrického klíče) při vytváření zálohy můžete vytvořit šifrovaný záložní soubor.

Výstraha

Vždy zálohujte certifikát nebo asymetrický klíč a nejlépe do jiného umístění než záložní soubor, který se použil k šifrování. Bez certifikátu nebo asymetrického klíče nemůžete zálohu obnovit a záložní soubor se stane nepoužitelným.

Následující příklad vytvoří certifikát a pak vytvoří zálohu chráněnou certifikátem.

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

Další informace najdete v tématu Šifrování zálohování.