Projekt

Allgemein

Profil

Aktionen

Zugänge (Passwörter)

Ticket: ##22403

Damit Passwörter (für syncro, dblink usw.) aus Sicherheitsgründen nicht mehr im Code hartkodiert werden müssen, sollen diese im Windows-Schlüsselbund (Windows Credential Manager) des Windows Benutzer vom PostgreSQL-Servers hinterlegt werden.

  • dafür gibt es jetzt entsprechende Datenbankfunktionen (Language plpython3u).
  • nur die DB-Rolle postgres soll diese DB-Funktionen direkt rufen dürfen, daher im Schema TSystem_security
  • anonsten können diese DB-Funktionen nur von Funktionen mit dem Parameter SECURITY DEFINER gerufen werden

Technische Voraussetzungen

  • Betriebssystem für PostgreSQL-Server: Windows
  • für PostgreSQL 13 (Python 3.7.x) die folgenden Python-Pakte:
    • Einträge im Windows-Schlüsselbund hinzufügen, abfragen bzw. löschen (keyring)
      • pywin32-ctypes- 0.2.3
      • zipp- 3.15.0
      • importlib-resources- 5.12.0
      • typing-extensions- 4.7.1
      • importlib-metadata- 6.7.0
      • more-itertools- 9.1.0
      • jaraco.classes- 3.2.3
      • keyring- 24.1.1
    • Alle vorhandenen Einträge im Windows-Schlüsselbund auflisten (pywin32)
      • pywin32- 308
  • Datei python-plpythonu\python37._pth Aufklappen
  • Neustart PostgreSQL-Server nach Installation und Konfiguration der Python-Pakte

Eintrag im Windows-Schlüsselbund hinzufügen bzw. überschreiben

  • Funktion TSystem_security.credential__set()
  • Rückgabe:
    • true - Eintrag wurde geschrieben
    • false - kein Eintrag wurde geschrieben; Eintrag mit Kombination aus Service- und Benutzernamen existierte bereits und sollte nicht überschrieben werden
  • Beispiel: SELECT TSystem_security.credential__set( servicename => 'SyncroKonto', username => 'syncro', userpassword => 'geheim', overwrite_pw => true );

Passwort aus entsprechenden Eintrag im Windows-Schlüsselbund auslesen

  • Funktion TSystem_security.credential__get()
  • Rückgabe:
    • <passwort> - Passwort des entsprechenden Eintrags
    • null - es existiert kein Eintrag für die gegebene Kombination aus Service- und Benutzernamen
  • Beispiel: SELECT TSystem_security.credential__get( servicename => 'SyncroKonto', username => 'syncro' );

Eintrag im Windows-Schlüsselbund löschen

  • Funktion TSystem_security.credential__delete()
  • Rückgabe:
    • true - entsprechender Eintrag wurde gelöscht
    • false - kein Eintrag wurde gelöscht; es existiert kein Eintrag für die gegebene Kombination aus Service- und Benutzernamen
  • Beispiel: SELECT TSystem_security.credential__delete( servicename => 'SyncroKonto', username => 'syncro' );

Alle vorhandenen Einträge im Windows-Schlüsselbund auflisten

  • Funktion TSystem_security.credentials__list()
  • Rückgabe:
    • setof Record aus servicename (varchar) und username (varchar)
    • servicename username
      SyncroKonto syncro
  • Beispiel: SELECT * FROM TSystem_security.credentials__list() ORDER BY servicename, username;

Von [E] Axel S vor 3 Tagen aktualisiert · 4 Revisionen