Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server na 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í. Tyto úkoly nejsou unikátní ani specifické pro Linux, ale dávají vám představu o oblastech, které je třeba dále zkoumat. Každý příklad odkazuje 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 Server vytvořením přihlášení do databáze master pomocí CREATE LOGIN tohoto příkazu. Příklad:
CREATE LOGIN Larry
WITH PASSWORD = '<password>';
Caution
Vaše heslo by mělo splňovat výchozí zásady hesla pro SQL Server. 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, takže je musíte vytvářet zvlášť v každé databázi, abyste získali přístup.
Následující příklad přepne na AdventureWorks2025 databázi a poté použije CREATE USER příkaz k vytvoření uživatele jménem Larry , který se mapuje na přihlášení jménem Larry. Ačkoliv jsou přihlášení a uživatel propojeni (mapovaní 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 AdventureWorks2025;
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ž vytvoříte databázi, stanete se vlastníkem databáze a můžete se k ní 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í. Příklad:
GRANT ALTER ANY LOGIN TO Larry;
GO
USE AdventureWorks2025;
GO
GRANT ALTER ANY USER TO Jerry;
GO
Nyní může přihlášení Larry vytvořit více přihlašovacích údajů a uživatel Jerry může vytvořit další uživatele.
Udělení přístupu s nejnižšími oprávněními
Správci a vlastníci databází jsou obvykle prvními uživateli, kteří se připojují k uživatelské databázi. Tyto účty mají všechna oprávnění v databázi. Tyto účty nepoužívejte pro úkoly, které vyžadují méně oprávnění.
Když teprve začínáte, můžete přiřadit některé obecné kategorie oprávnění pomocí vestavěných pevných databázových rolí. Například role db_datareader pevné databáze může číst všechny tabulky v databázi, ale nemůže provádět změny. Udělit členství v pevné databázové roli pomocí ALTER ROLE prohlášení. Následující příklad přidává uživatele Jerry do role db_datareader pevné databáze.
USE AdventureWorks2025;
GO
ALTER ROLE db_datareader ADD MEMBER Jerry;
Seznam pevných databázových rolí najdete v tématu Role na úrovni databáze.
Později, až budete připraveni nastavit přesnější přístup ke svým datům (velmi doporučené), vytvořte si vlastní uživatelsky definované databázové role s tímto CREATE ROLE příkazem. Pak vlastním rolím přiřaďte konkrétní podrobná oprávnění.
Například následující příkazy vytvářejí databázovou roli s názvem Sales, dávají skupině Sales možnost číst, aktualizovat a mazat řádky z tabulky Orders a poté přidat uživatele Jerry do role Sales .
CREATE ROLE Sales;
GRANT SELECT ON OBJECT::Orders TO Sales;
GRANT UPDATE ON OBJECT::Orders TO Sales;
GRANT DELETE ON OBJECT::Orders TO Sales;
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ů
Bezpečnost na úrovni řádků umožňuje omezit přístup k řádkům v databázi na základě uživatele, který dotaz spustí. Tato funkce je užitečná například pro zajištění přístupu zákazníků pouze ke svým vlastním datům nebo že pracovníci mají přístup pouze k datům pro své oddělení.
Následující kroky vedou nastavením dvou uživatelů s různým přístupem na úrovni řádků ke Sales.SalesOrderHeader stolu.
Vytvořte dva uživatelské účty pro testování bezpečnosti na úrovni řádků:
USE AdventureWorks2025;
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 se vrátí, 1 když řádek ve sloupci SalesPersonID odpovídá ID přihlášeníSalesPerson, nebo když uživatel, který dotaz spustil, je uživatel.Manager
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);
Spusť následující příkazy pro dotazování tabulky SalesOrderHeader 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 bezpečnostní politiku, abyste ji deaktivovali. 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 AdventureWorks2025;
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 k SELECT tabulce a poté proveď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
Útočník může ukrást databázové soubory z vašeho pevného disku. To může nastat, pokud útočník získá zvýšený přístup do systému, pokud zaměstnanec soubory převezme, nebo pokud někdo ukradne počítač, který soubory uchovává.
Transparentní šifrování dat (TDE) šifruje datové soubory, protože jsou uložené na pevném disku. Databáze master Databázový stroj systému SQL Server má šifrovací klíč, takže Database Engine může data manipulovat. Soubory databáze nelze číst bez přístupu ke klíči. Vysoce postavení administrátoři mohou klíč spravovat, zálohovat a znovu vytvářet, takže databázi mohou přesouvat pouze vybraní lidé. Když povolíte TDE, SQL Server také automaticky zašifruje databázitempdb.
Protože Database Engine dokáže data číst, TDE nechrání před neoprávněným přístupem správců počítačů, kteří mohou přímo číst paměť nebo přistupovat k SQL Server přes administrátorský účet.
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řte šifrovací klíč databáze a chraňte jej 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 ilustruje šifrování a dešifrování AdventureWorks2025 databáze s certifikátem pojmenovaným MyServerCert nainstalovaným na serveru.
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 AdventureWorks2025;
GO
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
ALTER DATABASE AdventureWorks2025
SET ENCRYPTION ON;
Pokud chcete odebrat TDE, spusťte následující příkaz:
ALTER DATABASE AdventureWorks2025
SET ENCRYPTION OFF;
SQL Server plánuje operace šifrování a dešifrování na pozadí vláken. Stav těchto operací si můžete prohlédnout pomocí katalogových a dynamických správcovských pohledů v seznamu, který se objeví později v tomto článku.
Warning
Šifrovací klíč databáze také šifruje záložní soubory databází, které mají povolené TDE. 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. Kromě zálohování databáze musíte zálohovat i serverové certifikáty, abyste zabránili ztrátě dat. Pokud certifikát již není dostupný, dochází ke ztrátě dat. 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 dokáže š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.
Warning
Vždy zálohujte certifikát nebo asymetrický klíč, ideálně na jiné místo než záložní soubor, který šifruje. 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 [AdventureWorks2025]
TO DISK = N'/var/opt/mssql/backups/AdventureWorks2025.bak'
WITH COMPRESSION,
ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = BackupEncryptCert),
STATS = 10;
GO
Další informace najdete v tématu Šifrování zálohování.