CREATE SYMMETRIC KEY (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse Analytics

Generiert einen symmetrischen Schlüssel und gibt seine Eigenschaften in SQL Server an.

Diese Funktion ist inkompatibel mit Datenbankexport über Data-Tier Application Framework (DACFx). Sie müssen alle symmetrischen Schlüssel vor dem Export löschen.

Transact-SQL-Syntaxkonventionen

Hinweis

Diese Syntax wird vom serverlosen SQL-Pool in Azure Synapse Analytics nicht unterstützt.

Syntax

CREATE SYMMETRIC KEY key_name
    [ AUTHORIZATION owner_name ]
    [ FROM PROVIDER provider_name ]
    WITH
        [
            <key_options> [ , ... n ]
            | ENCRYPTION BY <encrypting_mechanism> [ , ... n ]
        ]

<key_options> ::=
    KEY_SOURCE = 'pass_phrase'
    | ALGORITHM = <algorithm>
    | IDENTITY_VALUE = 'identity_phrase'
    | PROVIDER_KEY_NAME = 'key_name_in_provider'
    | CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

<algorithm> ::=
    DES | TRIPLE_DES | TRIPLE_DES_3KEY | RC2 | RC4 | RC4_128
    | DESX | AES_128 | AES_192 | AES_256

<encrypting_mechanism> ::=
    CERTIFICATE certificate_name
    | PASSWORD = 'password'
    | SYMMETRIC KEY symmetric_key_name
    | ASYMMETRIC KEY asym_key_name

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

key_name

Gibt den eindeutigen Namen an, unter dem der symmetrische Schlüssel in der Datenbank bekannt ist. Dies ist ein erforderlicher Parameter. Temporäre Schlüssel werden festgelegt, wenn der key_name mit einem Nummernzeichen (#) beginnt. Beispiel: #temporaryKey900007. Das Erstellen eines symmetrischen Schlüssels, dessen Name mit mehreren # beginnt, ist nicht möglich. Sie können keinen temporären symmetrischen Schlüssel mit einem EKM-Anbieter erstellen.

AUTHORIZATION owner_name

Gibt den Namen des Datenbankbenutzers oder der Anwendungsrolle an, der bzw. die diesen Schlüssel besitzt.

FROM PROVIDER provider_name

Gibt einen Anbieter für erweiterte Schlüsselverwaltung (Extensible Key Management, EKM) und einen Namen an. Der Schlüssel wird nicht vom EKM-Gerät exportiert. Der Anbieter muss zuerst mit der CREATE PROVIDER-Anweisung definiert werden. Weitere Informationen zum Erstellen von externen Schlüsselanbietern finden Sie unter Erweiterbare Schlüsselverwaltung (EKM).

Hinweis

Diese Option ist in einer enthaltenen Datenbank nicht verfügbar.

KEY_SOURCE = 'pass_phrase'

Gibt eine Passphrase an, aus dem der Schlüssel abgeleitet werden soll.

IDENTITY_VALUE = 'identity_phrase'

Gibt einen Identity-Ausdruck an, aus dem ein GUID zum Kennzeichnen von Daten generiert wird, die mit einem temporären Schlüssel verschlüsselt werden.

PROVIDER_KEY_NAME = 'key_name_in_provider'

Gibt den Namen an, auf den der Anbieter für erweiterte Schlüsselverwaltung (Extensible Key Management, EKM) verweist.

Hinweis

Diese Option ist in einer enthaltenen Datenbank nicht verfügbar.

CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

Erzeugt einen symmetrischen Schlüssel oder ordnet ihn einem Extensible Key Management Gerät zu.

  • CREATE_NEW

    Erstellt einen neuen Schlüssel auf dem Extensible Key Management-Gerät. Wenn bereits ein Schlüssel auf dem Gerät vorhanden ist, gibt die Anweisung eine Fehlermeldung zurück.

  • OPEN_EXISTING

    Ordnet einen symmetrischen Schlüssel von SQL Server einem vorhandenen EKM-Schlüssel zu. Wenn CREATION_DISPOSITION = OPEN_EXISTING nicht angegeben wird, wird er standardmäßig auf CREATE_NEW festgelegt.

certificate_name

Gibt den Namen des Zertifikats an, das zum Verschlüsseln des symmetrischen Schlüssels verwendet wird. Das Zertifikat muss bereits in der Datenbank vorhanden sein.

'password'

Gibt ein Kennwort an, von dem ein TRIPLE_DES-Schlüssel zum Sichern des symmetrischen Schlüssels abgeleitet wird. password muss den Anforderungen der Windows-Kennwortrichtlinien des Computers entsprechen, auf dem die Instanz von SQL Server ausgeführt wird. Verwenden Sie immer sichere Kennwörter.

symmetric_key_name

Gibt einen symmetrischen Schlüssel an, der zum Verschlüsseln des erstellten Schlüssels verwendet wird. Der angegebene Schlüssel muss bereits in der Datenbank vorhanden und geöffnet sein.

Asym_Key_Name

Gibt einen asymmetrischen Schlüssel an, der zum Verschlüsseln des erstellten Schlüssels verwendet wird. Dieser asymmetrische Schlüssel muss bereits in der Datenbank vorhanden sein.

<algorithm>

Geben Sie den Verschlüsselungsalgorithmus an.

Warnung

Ab SQL Server 2016 (13.x)gelten alle anderen Algorithmen als AES_128, AES_192 und AES_256 als veraltet. Sie müssen den Kompatibilitätsgrad zwischen Datenbanken auf maximal 120 festlegen, um ältere Algorithmen zu verwenden (nicht empfohlen).

Hinweise

Wenn ein symmetrischer Schlüssel erstellt wird, muss der symmetrische Schlüssel mit mindestens einer der folgenden Optionen verschlüsselt werden:

  • Zertifikat
  • Kennwort
  • Symmetrischer Schlüssel
  • asymmetrischer Schlüssel
  • AUSWÄHLEN

Der Schlüssel kann mehrere Verschlüsselungen jedes Typs aufweisen. Ein einzelner symmetrischer Schlüssel kann demnach mit mehreren Zertifikaten, Kennwörtern, symmetrischen Schlüsseln und asymmetrischen Schlüsseln gleichzeitig verschlüsselt sein.

Achtung

Wenn ein symmetrischer Schlüssel mit einem Kennwort anstatt mit einem Zertifikat (oder einem anderen Schlüssel) verschlüsselt ist, wird der TRIPLE_DES-Verschlüsselungsalgorithmus verwendet, um das Kennwort zu verschlüsseln. Daher werden Schlüssel, die mit einem starken Verschlüsselungsalgorithmus wie z. B. AES erstellt werden, selbst mit einem schwächeren Algorithmus verschlüsselt.

Mit dem optionalen Kennwort kann der symmetrische Schlüssel verschlüsselt werden, bevor der Schlüssel an mehrere Benutzer verteilt wird.

Temporäre Schlüssel befinden sich im Besitz des Benutzers, der sie erstellt. Temporäre Schlüssel gelten nur für die aktuelle Sitzung.

IDENTITY_VALUE erzeugt eine GUID, mit der Daten gekennzeichnet werden, die mit dem neuen symmetrischen Schlüssel verschlüsselt sind. Mithilfe dieser Kennzeichnung können Schlüssel den verschlüsselten Daten zugeordnet werden. Von einem spezifischen Ausdruck wird immer dieselbe GUID generiert. Nachdem eine Phrase zur Erzeugung einer GUID verwendet wurde, kann die Phrase nicht wiederverwendet werden, solange es mindestens einen symmetrischen Schlüssel in dieser Datenbank gibt, der die Phrase aktiv verwendet. IDENTITY_VALUE ist eine optionale Klausel. Die Verwendung dieser Klausel wird jedoch empfohlen, wenn Sie mit einem temporären Schlüssel verschlüsselte Daten speichern.

Es gibt keinen Standardverschlüsselungsalgorithmus.

Wichtig

Die Verwendung der RC4- und RC4_128-Datenstromchiffren wird zum Schutz vertraulicher Daten nicht empfohlen. Die Verschlüsselung mit solchen Schlüsseln wird von SQL Server nicht weiter codiert.

Informationen zu symmetrischen Schlüsseln werden in der sys.symmetric_keys-Katalogsicht angezeigt.

Symmetrische Schlüssel können nicht mit symmetrischen Schlüsseln, die mit dem Verschlüsselungsanbieter erstellt wurden, verschlüsselt werden.

Erläuterung der DES-Algorithmen

  • DESX wurde falsch benannt. Symmetrische Schlüssel, die mit ALGORITHM = DESX erstellt sind, verwenden eigentlich die TRIPLE DES-Chiffre mit einem 192-Bit-Schlüssel. Der DESX-Algorithmus wird nicht bereitgestellt. Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.
  • Symmetrische Schlüssel, die mit ALGORITHM = TRIPLE_DES_3KEY erstellt sind, verwenden die TRIPLE DES-Chiffre mit einem 192-Bit-Schlüssel.
  • Symmetrische Schlüssel, die mit ALGORITHM = TRIPLE_DES erstellt sind, verwenden die TRIPLE DES-Chiffre mit einem 128-Bit-Schlüssel.

Veraltung des RC4-Algorithmus:

Die wiederholte Verwendung der gleichen RC4- oder RC4_128-KEY_GUID für unterschiedliche Datenblöcke führt zum gleichen RC4-Schlüssel, da SQL Server nicht automatisch eine Salt bereitstellt. Die wiederholte Verwendung des gleichen RC4-Schlüssels stellt einen bekannter Fehler dar, der zu einer sehr schwachen Verschlüsselung führt. Deshalb wurden das RC4-Schlüsselwort und das RC4_128-Schlüsselwort als veraltet festgelegt. Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden.

Warnung

Der RC4-Algorithmus wird nur aus Gründen der Abwärtskompatibilität unterstützt. Neues Material kann nur mit RC4 oder RC4_128 verschlüsselt werden, wenn die Datenbank den Kompatibilitätsgrad 90 oder 100 besitzt. (Nicht empfohlen.) Verwenden Sie stattdessen einen neueren Algorithmus, z. B. einen der AES-Algorithmen. In SQL Server kann mit RC4 oder RC4_128 verschlüsseltes Material in jedem Kompatibilitätsgrad entschlüsselt werden.

Berechtigungen

Erfordert die ALTER ANY SYMMETRIC KEY-Berechtigung in der Datenbank. Wenn AUTHORIZATION angegeben ist, ist die IMPERSONATE-Berechtigung für den Datenbankbenutzer oder die ALTER-Berechtigung für die Anwendungsrolle erforderlich. Falls die Verschlüsselung mit einem Zertifikat oder asymmetrischen Schlüssel erfolgt, ist die VIEW DEFINITION-Berechtigung für das Zertifikat oder den asymmetrischen Schlüssel erforderlich. Nur Windows-Anmeldungen, SQL Server -Anmeldungen und Anwendungsrollen können symmetrische Schlüssel besitzen. Gruppen und Rollen können keine symmetrischen Schlüssel besitzen.

Beispiele

A. Einen symmetrischen Schlüssel erstellen

Im folgenden Beispiel wird ein symmetrischer Schlüssel mit Namen JanainaKey09 erstellt, wobei der AES 256-Algorithmus verwendet wird. Anschließend wird der neue Schlüssel mit dem Zertifikat Shipping04 verschlüsselt.

CREATE SYMMETRIC KEY JanainaKey09
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE Shipping04;
GO

B. Einen temporären symmetrischen Schlüssel erstellen

Im folgenden Beispiel wird ein temporärer symmetrischer Schlüssel mit Namen #MarketingXXV aus der folgenden Passphrase erstellt: The square of the hypotenuse is equal to the sum of the squares of the sides. Der Schlüssel wird mit einem GUID bereitgestellt, der aus der Zeichenfolge Pythagoras generiert und mit dem Zertifikat Marketing25 verschlüsselt wird.

CREATE SYMMETRIC KEY #MarketingXXV
WITH ALGORITHM = AES_128,
KEY_SOURCE
     = 'The square of the hypotenuse is equal to the sum of the squares of the sides',
IDENTITY_VALUE = 'Pythagoras'
ENCRYPTION BY CERTIFICATE Marketing25;
GO

C. Erstellen eines symmetrischen Schlüssels mit einem Extensible Key Management (EKM)-Gerät

Im folgenden Beispiel wird ein symmetrischer Schlüssel mit der Bezeichnung MySymKey erstellt, indem ein Anbieter mit dem Namen MyEKMProvider und ein Schlüssel mit der Bezeichnung KeyForSensitiveData verwendet werden. User1 wird autorisiert, und es wird davon ausgegangen, dass der Systemadministrator den Anbieter MyEKMProvider bereits in SQL Server registriert hat.

CREATE SYMMETRIC KEY MySymKey
AUTHORIZATION User1
FROM PROVIDER EKMProvider
WITH
PROVIDER_KEY_NAME='KeyForSensitiveData',
CREATION_DISPOSITION=OPEN_EXISTING;
GO

Weitere Informationen