Sicherheit

Die Sicherheit einer Datenbank wird durch die Authentifizierung, die Kommunikation und die Verschlüsselung der Files bestimmt.

Authentifizierung

Die Sicherheit von Datenbanken beruht auf einem Userkonzept, das von SQL weitgehend vorgegeben ist.

Jeder User hat ein Login zur Datenbank, das mit einem Passwort gesichert ist. Dieses Passwort wird nirgends in der Datenbank im Klartext gespeichert. Der User gehört der folgenden Klassen an: 

  • die Klasse admin hat alle Rechte auf der Datenbank
  • die Klasse resource hat keine Administratorrechte, darf aber selber Datenbankobjekte (Tabellen, Indexe, Views, Prozeduren etc.) generieren
  • die Klasse access hat nur einfache Rechte, sie kann keine Objekte generieren, sondern nur auf Objekte zugreifen
  • die Klasse noaccess kann sich nicht mehr einloggen (nachdem dem User der Zugriff entzogen wurde)

Für jeden User und jedes Objekt bestehen Privilegien, die der jeweilige Eigentümer des Objekts vergeben und entziehen kann.

Kommunikation

Wenn Datenbankserver und der Datenbankanwendung auf verschiedenen Rechnern liegen, kommunizieren die beiden Rechner TLS-gesichert über TCP/IP.

Dies bedeutet, dass der Datenbankserver ein Zertifikat benötigt, dessen Ursprung vom Client beim Verbindungsaufbau verifiziert wird. Erst danach wird eine verschlüsselte Verbindung aufgebaut. Dabei werden AES Schlüssel der Länge 256 verwendet, die mittels Diffie-Hellman ausgetauscht werden.

Alle Daten, die zwischen Server und Client ausgetauscht werden, sind damit vor Abhörattacken geschützt. 

Verschlüsselung

Die Datenbank speichert die Daten in Dateien auf dem Server. Um einen Angriff auf diese Dateien zu verhindern, können diese Dateien optional nochmals verschlüsselt werden. Dabei wird eine AES-Verschlüsselung verwendet, deren Schlüssel für jeden Dateiblock anders generiert wird. Der Hauptschlüssel ist im Schlüsselspeicher der Datenbank hinterlegt.