Passwörter - Windows Credential Manager » Historie » Revision 2
Revision 1 ([E] Axel S, 27.03.2025 17:00) → Revision 2/4 ([E] Axel S, 27.03.2025 17:33)
h1. 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
h2. 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*
h2. Eintrag im Windows-Schlüsselbund hinzufügen bzw. überschreiben
* Funktion @TSystem_security.credential__set()@
* Rückgabe:
** <code class="sql">true</code> - Eintrag wurde geschrieben
** <code class="sql">false</code> - *kein* Eintrag wurde geschrieben; Eintrag mit Kombination aus Service- und Benutzernamen existierte bereits und sollte nicht überschrieben werden
* Beispiel: <code class="sql">SELECT TSystem_security.credential__set( servicename => 'SyncroKonto', username => 'syncro', userpassword => 'geheim', overwrite_pw => true );</code>
h2. Passwort aus entsprechenden Eintrag im Windows-Schlüsselbund auslesen
* Funktion @TSystem_security.credential__get()@
* Rückgabe:
** <code class="sql"><passwort></code> - Passwort des entsprechenden Eintrags
** <code class="sql">null</code> - es existiert *kein* Eintrag für die gegebene Kombination aus Service- und Benutzernamen
* Beispiel: <code class="sql">SELECT TSystem_security.credential__get( servicename => 'SyncroKonto', username => 'syncro' );</code>
h2. Eintrag im Windows-Schlüsselbund löschen
* Funktion @TSystem_security.credential__delete()@
* Rückgabe:
** <code class="sql">true</code> - entsprechender Eintrag wurde gelöscht
** <code class="sql">false</code> - *kein* Eintrag wurde gelöscht; es existiert *kein* Eintrag für die gegebene Kombination aus Service- und Benutzernamen
* Beispiel: <code class="sql">SELECT TSystem_security.credential__delete( servicename => 'SyncroKonto', username => 'syncro' );</code>
h2. 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: <code class="sql">SELECT * FROM TSystem_security.credentials__list() ORDER BY servicename, username;</code>