Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server unter Linux
Wenn Sie ein Linux-Benutzer sind, der noch nicht mit SQL Server vertraut ist, lernen Sie mit den folgenden Aufgaben einige der Sicherheitsaufgaben kennen. Diese Aufgaben sind nicht einzigartig oder spezifisch für Linux, geben aber einen Eindruck von Bereichen, die man weiter untersuchen kann. Jedes Beispiel verlinkt auf die ausführliche Dokumentation für diesen Bereich.
Die Codebeispiele in diesem Artikel verwenden die AdventureWorks2025- oder AdventureWorksDW2025 Beispieldatenbank, die Sie von der Microsoft SQL Server Samples and Community Projects Homepage herunterladen können.
Erstellen Sie eine Anmeldung und einen Datenbankbenutzer
Gewähren Sie anderen Zugang zu SQL Server, indem Sie sich mit der Anweisung CREATE LOGIN in der master Datenbank anmelden. Beispiel:
CREATE LOGIN Larry
WITH PASSWORD = '<password>';
Caution
Ihr Kennwort sollte der standardmäßigen Kennwortrichtlinie von SQL Server folgen. Standardmäßig muss das Kennwort mindestens acht Zeichen lang sein und Zeichen aus drei der folgenden vier Sätze enthalten: Großbuchstaben, Kleinbuchstaben, Basis-10 Ziffern und Symbole. Kennwörter können bis zu 128 Zeichen lang sein. Verwenden Sie möglichst lange und komplexe Kennwörter.
Anmeldenamen können eine Verbindung mit SQL Server herstellen und Zugriff (mit eingeschränkten Berechtigungen) auf die master-Datenbank haben. Um eine Verbindung mit einer Benutzerdatenbank herzustellen, benötigt ein Login eine entsprechende Identität auf der Datenbankebene, die als Datenbankbenutzer bezeichnet wird. Benutzer sind spezifisch für jede Datenbank, daher müssen Sie sie separat in jeder Datenbank erstellen, um Zugriff zu gewähren.
Das folgende Beispiel wechselt in die AdventureWorks2025 Datenbank und verwendet dann die Anweisung CREATE USER , um einen Benutzer namens Larry zu erstellen, der mit dem Login namens Larryzugeordnet wird. Obwohl der Login und der Nutzer miteinander verbunden sind (zueinander zugeordnet), sind es unterschiedliche Objekte. Der Anmeldename ist ein Prinzipal auf Serverebene. Der Benutzer ist ein Prinzipal auf Datenbankebene.
USE AdventureWorks2025;
GO
CREATE USER Larry;
GO
- Mit einem SQL Server-Administratorkonto kann eine Verbindung mit einer beliebigen Datenbank hergestellt werden, und es können mehr Anmeldenamen und Benutzer in einer beliebigen Datenbank erstellt werden.
- Wenn du eine Datenbank erstellst, wirst du zum Eigentümer der Datenbank und kannst dich mit dieser Datenbank verbinden. Datenbankbesitzer können mehr Benutzer erstellen.
Später können Sie anderen Anmeldungen erlauben, weitere Anmeldungen zu erstellen, indem Sie ihnen die Berechtigung ALTER ANY LOGIN erteilen. Innerhalb einer Datenbank können Sie andere Benutzer*innen dazu autorisieren, weitere Benutzer*innen zu erstellen, indem Sie ihnen die Berechtigung ALTER ANY USER erteilen. Beispiel:
GRANT ALTER ANY LOGIN TO Larry;
GO
USE AdventureWorks2025;
GO
GRANT ALTER ANY USER TO Jerry;
GO
Jetzt kann der Login Larry mehr Logins erstellen, und der Benutzer Jerry kann weitere Nutzer erstellen.
Gewähren von Zugriff mit geringsten Rechten
Administratoren und Datenbankbesitzer sind in der Regel die ersten Nutzer, die sich mit einer Benutzerdatenbank verbinden. Diese Konten haben alle Berechtigungen in der Datenbank. Verwenden Sie diese Konten nicht für Aufgaben, die weniger Berechtigungen benötigen.
Wenn Sie gerade erst anfangen, können Sie einige allgemeine Berechtigungskategorien mit den integrierten festen Datenbankrollen zuweisen. Zum Beispiel kann die db_datareader feste Datenbankrolle alle Tabellen in der Datenbank lesen, aber keine Änderungen vornehmen. Gewähre die Mitgliedschaft in einer festen Datenbankrolle mit der ALTER ROLE Ausweisung. Das folgende Beispiel fügt den Benutzer Jerry zur db_datareader festen Datenbankrolle hinzu.
USE AdventureWorks2025;
GO
ALTER ROLE db_datareader ADD MEMBER Jerry;
Eine Liste der festen Datenbankrollen finden Sie unter Rollen auf Datenbankebene.
Später, wenn Sie bereit sind, präziseren Zugriff auf Ihre Daten zu konfigurieren (sehr empfohlen), erstellen Sie mit der Anweisung CREATE ROLE eigene benutzerdefinierte Datenbankrollen. Weisen Sie dann Ihren benutzerdefinierten Rollen bestimmte präzise Berechtigungen zu.
Zum Beispiel erstellen die folgenden Anweisungen eine Datenbankrolle namens Sales, gewähren der Sales Gruppe die Möglichkeit, Zeilen aus der Tabelle Orders zu lesen, zu aktualisieren und zu löschen, und fügen dann den Benutzer Jerry der Rolle Sales hinzu.
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;
Weitere Informationen zum Berechtigungssystem finden Sie unter Erste Schritte mit Berechtigungen für die Datenbank-Engine.
Konfigurieren der Sicherheit auf Zeilenebene
Die Sicherheit auf Zeilenebene ermöglicht es Ihnen, den Zugriff auf Zeilen in einer Datenbank basierend auf dem Benutzer zu beschränken, der eine Abfrage ausführt. Diese Funktion ist nützlich für Szenarien wie die Sicherstellung, dass Kunden nur auf ihre eigenen Daten zugreifen können oder dass Mitarbeiter nur auf Daten ihrer Abteilung zugreifen können.
Die folgenden Schritte zeigen das Einrichten von zwei Benutzern mit unterschiedlichen Zeilenzugriffen zur Tabelle Sales.SalesOrderHeader .
Erstellen Sie zwei Benutzerkonten, um die Sicherheit auf Zeilenebene zu testen:
USE AdventureWorks2025;
GO
CREATE USER Manager WITHOUT LOGIN;
CREATE USER SalesPerson280 WITHOUT LOGIN;
Erteilen Sie beiden Benutzern Leseberechtigung für die Tabelle Sales.SalesOrderHeader:
GRANT SELECT ON Sales.SalesOrderHeader TO Manager;
GRANT SELECT ON Sales.SalesOrderHeader TO SalesPerson280;
Erstellen Sie ein neues Schema und eine Inline-Tabellenwertfunktion. Die Funktion kehrt zurück, 1 wenn eine Zeile in der Spalte SalesPersonID mit der ID eines Logins SalesPerson übereinstimmt oder wenn der Benutzer, der die Abfrage ausführt, der Benutzer selbst Manager ist.
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')
Erstellen Sie eine Sicherheitsrichtlinie, und fügen Sie der Tabelle diese Funktion als FILTER- und BLOCK-Prädikat hinzu:
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);
Führe die folgenden Anweisungen aus, um die SalesOrderHeader Tabelle als jeden Benutzer abzufragen. Überprüfen Sie, dass SalesPerson280 nur die 95 Zeilen aus dem eigenen Vertrieb sehen kann und dass Manager alle Zeilen in der Tabelle sehen kann.
EXECUTE AS USER = 'SalesPerson280';
SELECT *
FROM Sales.SalesOrderHeader;
REVERT;
EXECUTE AS USER = 'Manager';
SELECT *
FROM Sales.SalesOrderHeader;
REVERT;
Ändere die Sicherheitsrichtlinie, um sie zu deaktivieren. Nun können beide Benutzer alle Zeilen anzeigen.
ALTER SECURITY POLICY SalesFilter
WITH (STATE = OFF);
Aktivieren des dynamischen Datenmaskierens
Mithilfe der dynamischen Datenmaskierung kann der Zugriff auf vertrauliche Daten auf die Benutzer einer Anwendung beschränkt werden, indem bestimmte Spalten vollständig oder teilweise maskiert werden.
Führen Sie eine ALTER TABLE-Anweisung aus, um der Spalte EmailAddress in der Tabelle Person.EmailAddress eine Maskierungsfunktion hinzuzufügen:
USE AdventureWorks2025;
GO
ALTER TABLE Person.EmailAddress
ALTER COLUMN EmailAddress
ADD MASKED WITH (FUNCTION = 'email()');
Erstelle einen neuen Benutzer TestUser mit SELECT Berechtigungen für die Tabelle und führe dann eine Abfrage aus, um TestUser die maskierten Daten anzuzeigen:
CREATE USER TestUser WITHOUT LOGIN;
GRANT SELECT
ON Person.EmailAddress TO TestUser;
EXECUTE AS USER = 'TestUser';
SELECT EmailAddressID,
EmailAddress
FROM Person.EmailAddress;
REVERT;
Überprüfen Sie, ob die Maskierungsfunktion die E-Mail-Adresse im ersten Datensatz wie folgt ändert. Von:
| EmailAddressID | E-Mail-Adresse |
|---|---|
| 1 | ken0@adventure-works.com |
in
| EmailAddressID | E-Mail-Adresse |
|---|---|
| 1 | kXXX@XXXX.com |
Aktivieren von Transparent Data Encryption
Ein Angreifer kann Datenbankdateien von Ihrer Festplatte stehlen. Dies kann passieren, wenn ein Angreifer erhöhten Zugriff auf das System erhält, wenn ein Mitarbeiter die Dateien nimmt oder jemand den Computer stiehlt, auf dem die Dateien gespeichert sind.
Mit Transparent Data Encryption (TDE) werden die Datendateien verschlüsselt, wenn sie auf dem Festplattenlaufwerk gespeichert werden. Die master Datenbank der SQL Server-Datenbank-Engine enthält den Verschlüsselungsschlüssel, sodass die Datenbank-Engine die Daten manipulieren kann. Ohne den Schlüssel können die Datenbankdateien nicht gelesen werden. Hochrangige Administratoren können den Schlüssel verwalten, sichern und neu erstellen, sodass nur ausgewählte Personen die Datenbank verschieben können. Wenn du TDE aktivierst, verschlüsselt SQL Server auch automatisch die tempdb Datenbank.
Da die Datenbank-Engine die Daten lesen kann, schützt TDE nicht vor unbefugtem Zugriff durch Computeradministratoren, die direkt Speicher lesen oder über ein Administratorkonto auf SQL Server zugreifen können.
Konfigurieren von TDE
- Erstellen Sie einen Hauptschlüssel
- Erstellen oder beziehen Sie ein vom Hauptschlüssel geschütztes Zertifikat
- Erstellen Sie einen Datenbank-Verschlüsselungsschlüssel und schützen Sie ihn mit dem Zertifikat
- Legen Sie fest, dass für die Datenbank Verschlüsselung verwendet wird
Zum Konfigurieren von TDE ist die CONTROL-Berechtigung für die master-Datenbank und die CONTROL-Berechtigung für die Benutzerdatenbank erforderlich. TDE wird in der Regel von einem Administrator konfiguriert.
Das folgende Beispiel veranschaulicht das Verschlüsseln und Entschlüsseln der AdventureWorks2025 Datenbank mit einem auf dem Server installierten MyServerCert Zertifikat.
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;
Führen Sie den folgenden Befehl aus, um TDE zu entfernen:
ALTER DATABASE AdventureWorks2025
SET ENCRYPTION OFF;
SQL Server plant die Verschlüsselungs- und Entschlüsselungsoperationen auf Hintergrund-Threads. Den Status dieser Operationen können Sie mit den Katalogansichten und dynamischen Verwaltungsansichten in der später in diesem Artikel erscheinenden Liste einsehen.
Warning
Der Datenbank-Verschlüsselungsschlüssel verschlüsselt außerdem Sicherungsdateien von Datenbanken, die TDE aktiviert haben. Darum muss bei der Wiederherstellung dieser Sicherungen das Zertifikat, das zum Verschlüsseln des Verschlüsselungsschlüssels für die Datenbank verwendet wurde, verfügbar sein. Neben der Sicherung der Datenbank müssen Sie auch die Serverzertifikate sichern, um Datenverlust zu vermeiden. Datenverlust entsteht, wenn das Zertifikat nicht mehr verfügbar ist. Weitere Informationen finden Sie unter SQL Server Certificates and Asymmetric Keys.
Weitere Informationen zu TDE finden Sie unter Transparent Data Encryption (TDE).
Konfigurieren der Sicherungsverschlüsselung
SQL Server kann Daten verschlüsseln und gleichzeitig ein Backup erstellen. Indem der Verschlüsselungsalgorithmus und der Verschlüsseler (ein Zertifikat oder ein asymmetrischer Schlüssel) beim Erstellen einer Sicherung angegeben werden, können Sie eine verschlüsselte Sicherungsdatei erstellen.
Warning
Sichere immer das Zertifikat oder den asymmetrischen Schlüssel, und vorzugsweise an einen anderen Ort als die verschlüsselte Backup-Datei. Ohne das Zertifikat oder den asymmetrischen Schlüssel können Sie keine Sicherung wiederherstellen, sodass die Sicherungsdatei unbrauchbar ist.
Im folgenden Beispiel werden ein Zertifikat und anschließend eine durch das Zertifikat geschützte Sicherung erstellt.
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
Weitere Informationen finden Sie unter Sicherungsverschlüsselung.