Projekt

Allgemein

Profil

Passwörter - Windows Credential Manager » Historie » Version 4

[E] Axel S, 31.03.2025 11:37

1 1 [E] Axel S
h1. Zugänge (Passwörter)
2
3
Ticket: ##22403
4
5
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.
6
7
* dafür gibt es jetzt entsprechende Datenbankfunktionen (Language plpython3u).
8
* nur die DB-Rolle @postgres@ soll diese DB-Funktionen *direkt* rufen dürfen, daher im Schema @TSystem_security@
9
* anonsten können diese DB-Funktionen nur von Funktionen mit dem Parameter @SECURITY DEFINER@ gerufen werden
10
11
12 2 [E] Axel S
h2. Technische Voraussetzungen
13
14
* Betriebssystem für PostgreSQL-Server: Windows
15
* für PostgreSQL 13 (Python 3.7.x) die folgenden Python-Pakte:
16
** Einträge im Windows-Schlüsselbund hinzufügen, abfragen bzw. löschen (keyring)
17
*** pywin32-ctypes- *0.2.3*
18
*** zipp- *3.15.0*
19
*** importlib-resources- *5.12.0*  
20
*** typing-extensions- *4.7.1* 
21
*** importlib-metadata- *6.7.0* 
22
*** more-itertools- *9.1.0* 
23
*** jaraco.classes- *3.2.3* 
24
*** keyring- *24.1.1*
25
** Alle vorhandenen Einträge im Windows-Schlüsselbund auflisten (pywin32)
26 4 [E] Axel S
*** pywin32- *308*
27
* Datei @python-plpythonu\python37._pth@
28
{{collapse(Aufklappen)
29
<pre>
30
python37.zip
31
.
32
.\Lib\site-packages
33
34
# Uncomment to run site.main() automatically
35
import site
36
</pre>
37
}}
38
* Neustart PostgreSQL-Server nach Installation und Konfiguration der Python-Pakte
39 2 [E] Axel S
40 1 [E] Axel S
h2. Eintrag im Windows-Schlüsselbund hinzufügen bzw. überschreiben
41
42
* Funktion @TSystem_security.credential__set()@
43
* Rückgabe:
44
** <code class="sql">true</code> - Eintrag wurde geschrieben
45
** <code class="sql">false</code> - *kein* Eintrag wurde geschrieben; Eintrag mit Kombination aus Service- und Benutzernamen existierte bereits und sollte nicht überschrieben werden
46
* Beispiel: <code class="sql">SELECT TSystem_security.credential__set( servicename => 'SyncroKonto', username => 'syncro', userpassword => 'geheim', overwrite_pw => true );</code>
47
48
49
h2. Passwort aus entsprechenden Eintrag im Windows-Schlüsselbund auslesen
50
51
* Funktion @TSystem_security.credential__get()@
52
* Rückgabe:
53
** <code class="sql"><passwort></code> - Passwort des entsprechenden Eintrags
54
** <code class="sql">null</code> - es existiert *kein* Eintrag für die gegebene Kombination aus Service- und Benutzernamen
55
* Beispiel: <code class="sql">SELECT TSystem_security.credential__get( servicename => 'SyncroKonto', username => 'syncro' );</code>
56
57
58
h2. Eintrag im Windows-Schlüsselbund löschen
59
60
* Funktion @TSystem_security.credential__delete()@
61
* Rückgabe:
62
** <code class="sql">true</code> - entsprechender Eintrag wurde gelöscht
63
** <code class="sql">false</code> - *kein* Eintrag wurde gelöscht; es existiert *kein* Eintrag für die gegebene Kombination aus Service- und Benutzernamen
64
* Beispiel: <code class="sql">SELECT TSystem_security.credential__delete( servicename => 'SyncroKonto', username => 'syncro' );</code>
65
66
67
h2. Alle vorhandenen Einträge im Windows-Schlüsselbund auflisten
68
69
* Funktion @TSystem_security.credentials__list()@
70
* Rückgabe:
71
** setof Record aus @servicename@ (varchar) und @username@ (varchar)
72 3 [E] Axel S
** 
73 1 [E] Axel S
|_.servicename |_.username |
74
|SyncroKonto   |syncro     |
75
76
* Beispiel: <code class="sql">SELECT * FROM TSystem_security.credentials__list() ORDER BY servicename, username;</code>