Code & Queries

Code & Queries: Your Source for SQL, Python, and AI Insights

Datenverschlüsselung (at rest und in transit)mit SQL Server und Python

- Veröffentlicht unter Community & Best Practices von

Datenverschlüsselung ist ein wichtiger Aspekt der Datensicherheit, sowohl bei der Speicherung (at rest) als auch während der Übertragung (in transit). In diesem Kontext werden wir die Verschlüsselung mit Microsoft SQL Server und Python betrachten.

1. Datenverschlüsselung in SQL Server

a. Verschlüsselung at rest

SQL Server bietet mehrere Möglichkeiten, Daten at rest zu verschlüsseln:

  • Transparent Data Encryption (TDE): TDE verschlüsselt die gesamte Datenbank auf der Festplatte. Dies umfasst die Datenbankdateien, Backup-Dateien und Transaktionsprotokolle. Die Verschlüsselung erfolgt auf der Ebene des Speichersystems, ohne dass Änderungen an der Anwendung erforderlich sind.

    -- Aktivieren von TDE für eine Datenbank
    CREATE DATABASE ENCRYPTION KEY
    WITH ALGORITHM = AES_256
    ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
    
    ALTER DATABASE MyDatabase
    SET ENCRYPTION ON;
    
  • Column-Level Encryption: Diese Methode ermöglicht die Verschlüsselung einzelner Spalten in einer Tabelle. Sie ist nützlich, wenn nur bestimmte sensible Daten verschlüsselt werden sollen.

    -- Erstellen eines symmetrischen Schlüssels
    CREATE SYMMETRIC KEY MyColumnKey
    WITH ALGORITHM = AES_256
    ENCRYPTION BY PASSWORD = 'MyPassword';
    
    -- Verschlüsseln einer Spalte
    OPEN SYMMETRIC KEY MyColumnKey
    DECRYPTION BY PASSWORD = 'MyPassword';
    
    UPDATE MyTable
    SET MyEncryptedColumn = EncryptByKey(Key_GUID('MyColumnKey'), MySensitiveData);
    

b. Verschlüsselung in transit

SQL Server verwendet standardmäßig TLS (Transport Layer Security), um Daten während der Übertragung zu verschlüsseln. Um dies zu aktivieren, müssen Sie ein Zertifikat auf dem SQL Server installieren und die entsprechenden Netzwerkeinstellungen konfigurieren.

  • TLS-Konfiguration:

    1. Erwerben Sie ein Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle (CA).
    2. Installieren Sie das Zertifikat auf dem SQL Server.
    3. Konfigurieren Sie SQL Server, um das Zertifikat zu verwenden.
    -- Überprüfen des Zertifikats
    SELECT * FROM sys.certificates;
    

2. Datenverschlüsselung mit Python

a. Verschlüsselung at rest

Python bietet verschiedene Bibliotheken zur Verschlüsselung von Daten, wie z.B. cryptography und pycryptodome.

  • Beispiel mit cryptography:

    from cryptography.fernet import Fernet
    
    # Schlüssel generieren
    key = Fernet.generate_key()
    cipher_suite = Fernet(key)
    
    # Daten verschlüsseln
    data = b"My sensitive data"
    encrypted_data = cipher_suite.encrypt(data)
    
    # Daten entschlüsseln
    decrypted_data = cipher_suite.decrypt(encrypted_data)
    

b. Verschlüsselung in transit

Für die Verschlüsselung in transit kann Python die ssl-Bibliothek verwenden, um sichere Verbindungen zu erstellen.

  • Beispiel mit ssl:

    import ssl
    import socket
    
    # Erstellen eines sicheren Sockets
    context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
    context.load_cert_chain(certfile="server.crt", keyfile="server.key")
    
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
      with context.wrap_socket(sock, server_side=True) as ssock:
          ssock.bind(('localhost', 443))
          ssock.listen(5)
          conn, addr = ssock.accept()
          with conn:
              print('Connected by', addr)
              data = conn.recv(1024)
              print('Received', data)
              conn.sendall(data)
    

3. Kombination von SQL Server und Python

Wenn Sie Python verwenden, um mit einer SQL Server-Datenbank zu interagieren, können Sie die Verschlüsselungsfunktionen von SQL Server nutzen, um die Daten at rest zu schützen, und die ssl-Bibliothek von Python, um die Daten in transit zu verschlüsseln.

  • Beispiel für eine sichere Verbindung zu SQL Server mit pyodbc:

    import pyodbc
    import ssl
    
    # SSL-Kontext erstellen
    context = ssl.create_default_context()
    
    # Verbindung zur SQL Server-Datenbank herstellen
    conn = pyodbc.connect(
      'DRIVER={ODBC Driver 17 for SQL Server};'
      'SERVER=my_server;'
      'DATABASE=my_database;'
      'UID=my_username;'
      'PWD=my_password;',
      sslcontext=context
    )
    
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM MyTable")
    rows = cursor.fetchall()
    for row in rows:
      print(row)
    

Fazit

Die Verschlüsselung von Daten at rest und in transit ist entscheidend für die Sicherheit Ihrer Anwendungen. SQL Server bietet robuste Mechanismen für die Verschlüsselung von Daten at rest und in transit, während Python flexible Bibliotheken für die Verschlüsselung und sichere Kommunikation bereitstellt. Durch die Kombination dieser Technologien können Sie ein hohes Maß an Datensicherheit erreichen.