Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Datenbankadministration » Sicherheit » Datensicherheit gewährleisten » Datenbank verschlüsseln und entschlüsseln » Teile einer Datenbank verschlüsseln

 

Spaltenverschlüsselung

Wenn Sie Spalten in Ihrer Datenbank verschlüsseln wollen, können Sie dies mit der ENCRYPT-Funktion tun. Die ENCRYPT-Funktion verwendet den starken Verschlüsselungsalgorithmus AES, wie er auch bei der Datenbankverschlüsselung verwendet wird, um eingehende Werte zu verschlüsseln.

Der Schlüssel für die ENCRYPT-Funktion berücksichtigt die Groß- und Kleinschreibung, sogar in Datenbanken, die das nicht tun. Wie bei den meisten Kennwörtern sollte ein Schlüssel gewählt werden, der nur schwer erraten werden kann. Es wird empfohlen, dass Sie einen Wert für Ihren Schlüssel auswählen, der zumindest 16 Zeichen lang ist und eine Kombination von Groß- und Kleinbuchstaben, Ziffern und Sonderzeichen enthält. Sie müssen diesen Schlüssel jedes Mal angeben, wenn Sie die Daten entschlüsseln wollen.

Achtung

Bei stark verschlüsselten Datenbanken achten Sie darauf, eine Kopie des Schlüssels an einem sicheren Ort zu verwahren. Wenn Sie den Chiffrierschlüssel verlieren, gibt es keine Möglichkeit, auf die Daten zuzugreifen, auch nicht mit der Unterstützung des technischen Kundendiensts. Die Datenbank muss verworfen und eine neue Datenbank muss erstellt werden.

Verschlüsselte Werte können mit der DECRYPT-Funktion entschlüsselt werden. Sie müssen denselben Schlüssel verwenden, der in der ENCRYPT-Funktion angegeben wurde. Beide Funktionen geben LONG BINARY-Werte zurück. Wenn Sie einen anderen Datentyp benötigen, können Sie die CAST-Funktion verwenden, um den Wert in den erforderlichen Datentyp zu konvertieren. Das untenstehende Beispiel zeigt, wie Sie die CAST-Funktion verwenden, um einen entschlüsselten Wert in den erforderlichen Datentyp zu konvertieren. Weitere Hinweise finden Sie unter CAST-Funktion [Datentypkonvertierung].

Wenn Datenbankbenutzer auf die Daten in entschlüsselter Form zugreifen müssen, Sie aber ihnen keinen Zugriff auf den Chiffrierschlüssel geben wollen, können Sie eine Ansicht erstellen, die die DECRYPT-Funktion verwendet. Dadurch können Benutzer auf die entschlüsselten Daten zugreifen, ohne den Chiffrierschlüssel zu kennen. Wenn Sie eine Ansicht oder gespeicherte Prozedur erstellen, die die Tabelle verwendet, können Sie den SET HIDDEN-Parameter der ALTER VIEW- und ALTER PROCEDURE-Anweisungen verwenden, um zu gewährleisten, dass Benutzer nicht auf den Chiffrierschlüssel zugreifen können, wenn sie die Ansichts- oder Prozedurdefinition abrufen. Weitere Hinweise finden Sie unter ALTER PROCEDURE-Anweisung und ALTER VIEW-Anweisung.

Beispiel für Spaltenverschlüsselung

Im folgenden Beispiel werden Trigger verwendet, um eine Spalte zu verschlüsseln, die Kennwörter in einer Tabelle namens user_info speichert. Die user_info-Tabelle wird folgendermaßen festgelegt:

CREATE TABLE user_info (
   employee_ID INTEGER NOT NULL PRIMARY KEY,
   user_name CHAR(80),
   user_pwd CHAR(80) );

Zwei Trigger werden der Datenbank hinzugefügt, um den Wert in der user_pwd-Spalte zu verschlüsseln, wenn entweder ein neuer Benutzer hinzugefügt oder das Kennwort eines vorhandenen Benutzers aktualisiert wird.

  • Der Trigger encrypt_new_user_pwd wird jedes Mal ausgelöst, wenn der user_info-Tabelle eine neue Zeile hinzugefügt wird.

    CREATE TRIGGER encrypt_new_user_pwd
    BEFORE INSERT
    ON user_info
    REFERENCING NEW AS new_pwd
    FOR EACH ROW
    BEGIN
        SET new_pwd.user_pwd=ENCRYPT(new_pwd.user_pwd, '8U3dkA');
    END;
  • Der Trigger encrypt_updated_pwd wird jedes Mal ausgelöst, wenn die user_pwd-Spalte in der user_info-Tabelle aktualisiert wird.

    CREATE TRIGGER encrypt_updated_pwd
    BEFORE UPDATE OF user_pwd
    ON user_info
    REFERENCING NEW AS new_pwd
    FOR EACH ROW
    BEGIN
        SET new_pwd.user_pwd=ENCRYPT(new_pwd.user_pwd, '8U3dkA');
    END;

Fügen Sie einen neuen Benutzer der Datenbank hinzu:

INSERT INTO user_info
VALUES ( '1', 'd_williamson', 'abc123');

Wenn Sie eine SELECT-Anweisung ausgeben, um die Informationen in der Tabelle user_info anzuzeigen, ist der Wert in der Spalte user_pwd binär (die verschlüsselte Form des Kennworts) und nicht der Wert "abc123", der in der INSERT-Anweisung angegeben wurde.

Wenn das Kennwort dieses Benutzers geändert wird, passiert Folgendes:

UPDATE user_info
SET user_pwd='xyz'
WHERE employee_ID='1';

Der Trigger encrypt_updated_pwd wird ausgelöst und das verschlüsselte Format des neuen Kennworts in der user_pwd -Spalte angezeigt.

Das ursprüngliche Kennwort kann abgefragt werden, indem die folgende SQL-Anweisung ausgegeben wird. Diese Anweisung verwendet die DECRYPT-Funktion und den Chiffrierschlüssel, um die Daten zu entschlüsseln, sowie die CAST-Funktion, um den Wert von LONG BINARY zu CHAR zu konvertieren:

SELECT CAST (
   DECRYPT( user_pwd, '8U3dkA' )
   AS CHAR(100))
   FROM user_info
   WHERE employee_ID = '1';
Siehe auch