Projekt

Allgemein

Profil

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>