Konfiguration
.env
Die Grundkonfiguration von pseudify findet mittels Werten in einer .env
Datei statt.
Die Profile Templates beinhalten eine exemplarische .env Datei welche als Grundlage für die eigene Konfiguration verwendet werden kann.
APP_SECRET
Default: <leer>
Pseudify cached die Eingangsdaten, um pro Pseudonymisierungslauf gleiche Pseudonyme für gleiche Eingangsdaten erzeugen zu können.
Damit die zu pseudonymisierenden Eingangsdaten nicht im Klartext im Cache abgespeichert werden, werden sie zur Sicherheit mittels SHA-256 Hash-Algorithmus verarbeitet und dann abgespeichert.
Damit von den SHA-256 Hashwerten im Cache keine Rückschlüsse auf die Eingangsdaten gezogen werden können, wird dringend empfohlen den Wert von APP_SECRET
auf einen möglichst langen zufälligen Wert zu setzen.
Der Wert von APP_SECRET
muss, ähnlich einem Passwort, geheimgehalten werden.
Beispiel
APP_SECRET=6ba571b0a3e7150a4b7e5b918e81ce8f
PSEUDIFY_FAKER_LOCALE
Default: en_US
Pseudify benutzt die FakerPHP/Faker Komponente, um die Pseudonyme zu generieren.
Die Komponente erlaubt die Generierung von sprachspezifischen Werten.
Unterstützte Werte von PSEUDIFY_FAKER_LOCALE
finden sich im FakerPHP/Faker Repository.
Beispiel
PSEUDIFY_FAKER_LOCALE=de_DE
PSEUDIFY_DATABASE_DRIVER
Default: pdo_mysql
Wird aufgelöst zu Verbindungsparameter: doctrine.dbal.connections.default.driver
Der Wert von PSEUDIFY_DATABASE_DRIVER
muss ein unterstützter Treiber der Doctrine DBAL Komponente sein.
Der pseudify docker Container wird mit folgender Treiberunterstützung ausgeliefert:
- pdo_mysql (A MySQL driver that uses the pdo_mysql PDO extension
- mysqli (A MySQL driver that uses the mysqli extension
- pdo_pgsql (A PostgreSQL driver that uses the pdo_pgsql PDO extension)
- pdo_sqlite (An SQLite driver that uses the pdo_sqlite PDO extension)
- sqlite3 (An SQLite driver that uses the sqlite3 extension)
- pdo_sqlsrv (A Microsoft SQL Server driver that uses pdo_sqlsrv PDO)
- sqlsrv (A Microsoft SQL Server driver that uses the sqlsrv PHP extension)
Info
Die Unterstützung des oci8
Treibers für Oracle Datenbanken im docker Container ist in Vorbereitung (pull requests sind willkommen).
Beispiel
PSEUDIFY_DATABASE_DRIVER=pdo_mysql
PSEUDIFY_DATABASE_HOST
Default: <leer>
Wird aufgelöst zu Verbindungsparameter: doctrine.dbal.connections.default.host
Der Hostname unter welchem der Datenbankserver erreichbar ist.
Dieser Wert wird nur bei der Nutzung der folgenden Treiber verwendet:
Beispiel
PSEUDIFY_DATABASE_HOST=host.docker.internal
PSEUDIFY_DATABASE_PORT
Default: <leer>
Wird aufgelöst zu Verbindungsparameter: doctrine.dbal.connections.default.port
Der Port unter welchem der Datenbankserver erreichbar ist.
Dieser Wert wird nur bei der Nutzung der folgenden Treiber verwendet:
Beispiel
PSEUDIFY_DATABASE_PORT=3306
PSEUDIFY_DATABASE_USER
Default: <leer>
Wird aufgelöst zu Verbindungsparameter: doctrine.dbal.connections.default.user
Der Benutzername der Datenbank.
Dieser Wert wird nur bei der Nutzung der folgenden Treiber verwendet:
Beispiel
PSEUDIFY_DATABASE_USER=pseudify
PSEUDIFY_DATABASE_PASSWORD
Default: <leer>
Wird aufgelöst zu Verbindungsparameter: doctrine.dbal.connections.default.password
Das Passwort der Datenbank.
Dieser Wert wird nur bei der Nutzung der folgenden Treiber verwendet:
Beispiel
PSEUDIFY_DATABASE_PASSWORD='super(!)sEcReT'
PSEUDIFY_DATABASE_SCHEMA
Default: <leer>
Wird aufgelöst zu Verbindungsparameter: doctrine.dbal.connections.default.dbname
oder doctrine.dbal.connections.default.path
Bei folgenden Treibern entspricht PSEUDIFY_DATABASE_SCHEMA
dem Datenbanknamen:
Bei folgenden Treibern entspricht PSEUDIFY_DATABASE_SCHEMA
dem Dateisystempfad zur Datenbank:
Beispiel
PSEUDIFY_DATABASE_SCHEMA=wordpress_prod
PSEUDIFY_DATABASE_CHARSET
Default: utf8mb4
Wird aufgelöst zu Verbindungsparameter: doctrine.dbal.connections.default.charset
Der Zeichensatz, der bei der Verbindung zur Datenbank verwendet wird.
Dieser Wert wird nur bei der Nutzung der folgenden Treiber verwendet:
Beispiel
PSEUDIFY_DATABASE_CHARSET=utf8mb4
PSEUDIFY_DATABASE_VERSION
Default: <leer>
Wird aufgelöst zu Verbindungsparameter: doctrine.dbal.connections.default.server_version
Doctrine wird für einige Anbieter mit verschiedenen Datenbankplattform-Implementierungen geliefert, um versionsspezifische Funktionen, Dialekte und Verhaltensweisen zu unterstützen.
Die Treiber erkennen automatisch die Plattformversion und instanziieren die entsprechende Plattformklasse.
Wenn du die automatische Erkennung der Datenbankplattform deaktivieren und die Implementierung der Plattformversion explizit auswählen möchtest, kannst du dies mit dem Wert in PSEUDIFY_DATABASE_VERSION
erledigen.
Info
Wenn du eine MariaDB-Datenbank verwendest, solltest du dem Wert PSEUDIFY_DATABASE_VERSION
den Präfix mariadb-
voranstellen (Beispiel: mariadb-10.2).
Beispiel
PSEUDIFY_DATABASE_VERSION=8.0
PSEUDIFY_DATABASE_SSL_INSECURE
Default: <leer>
Wird aufgelöst zu Verbindungsparameter: doctrine.dbal.connections.default.options.TrustServerCertificate
Wird der Wert von PSEUDIFY_DATABASE_SSL_INSECURE
auf 1
gesetzt, so wird keine Überprüfung des TLS-Zertifikats des Datenbankservers vorgenommen.
Dieser Wert wird nur bei der Nutzung der folgenden Treiber verwendet:
PSEUDIFY_DATABASE_SSL_INSECURE=1
Erweiterte Verbindungseinstellungen
Wenn du weitere Treiberoptionen konfigurieren musst, so kannst du dies in der Datei config/configuration.yaml
tun.
Beispiele und Informationen für Treiberoptionen finden sich in folgenden Dokumenten:
Nach Änderungen an den Verbindungseinstellungen muss der Cache geleert werden
pseudify cache:clear
Multiple Verbindungskonfigurationen
Es ist möglich, mehrere Verbindungen zu konfigurieren.
Als Standardverbindung wird die Verbindung mit dem Namen default
verwendet.
In der Datei config/configuration.yaml
können weitere Verbindungen unter anderem Namen konfiguriert werden.
doctrine:
dbal:
connections:
myCustomConnection:
driver: sqlsrv
# ...
Die konfigurierten Verbindungen können mit dem Parameter --connection
verwendet werden.
pseudify pseudify:pseudonymize --connection myCustomConnection myPseudonymizationProfileName
pseudify pseudify:debug:pseudonymize --connection myCustomConnection myPseudonymizationProfileName
pseudify pseudify:analyze --connection myCustomConnection myAnalysisProfileName
pseudify pseudify:debug:analyze --connection myCustomConnection myAnalysisProfileName
pseudify pseudify:debug:table_schema --connection myCustomConnection
Registrieren von benutzerdefinierten Datentypen
Werden benutzerdefinierte Datentypen benötigt, so kannst du diese auf Verbindungsebene in der Datei config/configuration.yaml
definieren.
Beispielimplementationen für benutzerdefinierte Datentypen finden sich in folgenden Dateien:
Diese benutzerdefinierten Datentypen können dann mittels Konfiguration in der Datei config/configuration.yaml
verwendet werden
doctrine:
dbal:
connections:
default:
types:
enum: Waldhacker\Pseudify\Types\TYPO3\EnumType
set: Waldhacker\Pseudify\Types\TYPO3\SetType
mapping_types:
enum: enum
set: set
Beispiele und Informationen für benutzerdefinierte Datentypen finden sich in folgenden Dokumenten:
- Symfony DoctrineBundle - Registering custom Mapping Types
- Symfony DoctrineBundle - Registering custom Mapping Types in the SchemaTool
- Doctrine DBAL - Custom Mapping Types
Nach dem Hinzufügen benutzerdefinierter Datentypen muss der Cache geleert werden.
pseudify cache:clear
Registrieren von benutzerdefinierten Faker-Formatierern
Die FakerPHP/Faker Komponente bringt eine Menge vordefinierter Formatierer mit um diverse Datenformate zu generieren.
Wenn du benutzerdefinierte Formatierer verwenden möchtest, so kannst du die Implementierung am Beispiel des BobRossLipsumProvider abschauen.
Der benutzerdefinierte Formatierer muss das Interface Waldhacker\Pseudify\Core\Faker\FakeDataProviderInterface
implementieren, damit er ins System integriert wird.
Wie Formatierer Daten generieren können lässt sich am Besten anhand der Provider im FakerPHP/Faker Projekt abschauen.
Nach dem Hinzufügen benutzerdefinierter Faker-Formatierern muss der Cache geleert werden.
pseudify cache:clear
Registrieren von benutzerdefinierten Dekodierern / Enkodierern
Das pseudify EncoderInterface
ist kompatibel zum EncoderInterface
und DecoderInterface
der Symfony serializer Komponente.
Wenn du benutzerdefinierte Dekodierer / Enkodierer verwenden möchtest, so kannst du die Implementierung am Beispiel des Rot13Encoder abschauen.
Der benutzerdefinierte Dekodierer / Enkodierer muss das Interface Waldhacker\Pseudify\Core\Processor\Encoder\EncoderInterface
implementieren, damit er ins System integriert wird.
Wie Dekodierer / Enkodierer Daten dekodieren und encodieren können, lässt sich am Besten anhand der Built-in Dekodierer / Enkodierer abschauen.
Nach dem hinzufügen benutzerdefinierter Dekodierer / Enkodierer muss der Cache geleert werden.
pseudify cache:clear
Note
Benutzerdefinierte Dekodierer / Enkodierer sollten der Namenskonvention <Format>Encoder
folgen (z.B. HexEncoder
, Rot13Encoder
uws.).
Dies stellt sicher, dass Debug-Kommandos wie pseudify:debug:analyze
die Namen der Dekodierer / Enkodierer gut darstellen können.
Zugriff auf Host-Datenbankserver aus dem docker Container heraus
Möchte man auf Datenbankserver, welche auf dem Host-System laufen, aus dem docker Container heraus zugreifen, so kann dies auf unterschiedlichen Wegen geschehen.
Nachfolgend werden 3 beschrieben.
add-host Variante
Füge dem docker run
Befehl den Parameter --add-host=host.docker.internal:host-gateway
hinzu um innerhalb des docker Containers die IP-Adresse des docker gateways auf dem Host-System unter dem Hostnamen host.docker.internal
zur Verfügung zu stellen.
Die Option PSEUDIFY_DATABASE_HOST
in der .env Datei muss den Wert host.docker.internal
erhalten.
Note
Damit diese Variante funktioniert, muss der Port des Datenbankservers auf dem docker gateway geöffnet sein.
Beispiel
.env:
PSEUDIFY_DATABASE_HOST=host.docker.internal
Befehl:
docker run -it -v $(pwd):/data --add-host=host.docker.internal:host-gateway \
ghcr.io/waldhacker/pseudify pseudify:debug:table_schema
Host-IP Variante
Die Option PSEUDIFY_DATABASE_HOST
in der .env Datei muss die IP-Adresse des Host-Systems erhalten.
Note
Damit diese Variante funktioniert, muss der Port des Datenbankservers auf dieser IP des Host-Systems geöffnet sein.
Beispiel
.env:
PSEUDIFY_DATABASE_HOST=192.168.178.31
Befehl:
docker run -it -v $(pwd):/data ghcr.io/waldhacker/pseudify pseudify:debug:table_schema
Geschwisterservice Variante
Der Datenbankserver wird parallel zum pseudify Container mittels docker gestartet.
Beide Container werden mit demselben docker Netzwerk verbunden und können somit untereinander kommunizieren.
Beispiel
Erzeugen des gemeinsamen docker Netzwerks (falls noch keines vorhanden ist) mit dem Namen pseudify-net
:
docker network create pseudify-net
Starten des Datenbankservers am Beispiel des MariaDB Containers.
Der Datenbankserver wird gestartet und in das Netzwerk pseudify-net
aufgenommen (--network pseudify-net
). Dem Container wird der Name mariadb_10_5
gegeben (--name mariadb_10_5
), unter welchem die Datenbank dann für den pseudify Container erreichbar sein wird.
Note
Damit der Import der Testdatenbank (-v $(pwd)/tests/mariadb/10.5:/docker-entrypoint-initdb.d
) korrekt funktioniert, muss der Befehl im Hauptverzeichnis der Profile Templates ausgeführt werden.
docker run --rm --detach \
--network pseudify-net \
--name mariadb_10_5 \
--env MARIADB_USER=pseudify \
--env MARIADB_PASSWORD='pseudify(!)w4ldh4ck3r' \
--env MARIADB_ROOT_PASSWORD='pseudify(!)w4ldh4ck3r' \
--env MARIADB_DATABASE=pseudify_utf8mb4 \
-v $(pwd)/tests/mariadb/10.5:/docker-entrypoint-initdb.d \
mariadb:10.5
cp tests/mariadb/10.5/.env .env
.env:
PSEUDIFY_DATABASE_HOST=mariadb_10_5
Befehl:
docker run -it -v $(pwd):/data --network=pseudify-net \
ghcr.io/waldhacker/pseudify pseudify:debug:table_schema
Überblick über die Konfiguration
Es existieren Kommandos, um die Konfiguration des Systems zu überprüfen.
pseudify:information
Das Kommando pseudify pseudify:information
listet:
- verfügbare Profile, um die Datenbank zu analysieren (
Registered analyze profiles
) - verfügbare Profile, um die Datenbank zu pseudonymisieren (
Registered pseudonymize profiles
) - registrierte Datentypen (
Registered doctrine types
) - im System verfügbare Datenbanktreiber (
Available built-in database drivers
) - Informationen pro konfigurierte Verbindung (
Connection information for connection "<connecntion name>"
) - Informationen welche Datenbank-Datentypen mit welchen Doctrine Implementierungen verknüpft sind (
Registered doctrine database data type mappings
) - Informationen über die verwendeten Doctrine Treiber-Implementierungen und den verwendeten Systemtreiber (
Connection details
)
$ pseudify pseudify:information
Registered analyze profiles
---------------------------
--------------
Profile name
--------------
typo3Example
test-profile
--------------
Registered pseudonymize profiles
--------------------------------
--------------
Profile name
--------------
typo3Example
test
--------------
Registered doctrine types
-------------------------
---------------------- ---------------------------------------------
Doctrine type name Doctrine type implementation
---------------------- ---------------------------------------------
array Doctrine\DBAL\Types\ArrayType
ascii_string Doctrine\DBAL\Types\AsciiStringType
bigint Doctrine\DBAL\Types\BigIntType
binary Doctrine\DBAL\Types\BinaryType
blob Doctrine\DBAL\Types\BlobType
boolean Doctrine\DBAL\Types\BooleanType
date Doctrine\DBAL\Types\DateType
date_immutable Doctrine\DBAL\Types\DateImmutableType
dateinterval Doctrine\DBAL\Types\DateIntervalType
datetime Doctrine\DBAL\Types\DateTimeType
datetime_immutable Doctrine\DBAL\Types\DateTimeImmutableType
datetimetz Doctrine\DBAL\Types\DateTimeTzType
datetimetz_immutable Doctrine\DBAL\Types\DateTimeTzImmutableType
decimal Doctrine\DBAL\Types\DecimalType
float Doctrine\DBAL\Types\FloatType
guid Doctrine\DBAL\Types\GuidType
integer Doctrine\DBAL\Types\IntegerType
json Doctrine\DBAL\Types\JsonType
object Doctrine\DBAL\Types\ObjectType
simple_array Doctrine\DBAL\Types\SimpleArrayType
smallint Doctrine\DBAL\Types\SmallIntType
string Doctrine\DBAL\Types\StringType
text Doctrine\DBAL\Types\TextType
time Doctrine\DBAL\Types\TimeType
time_immutable Doctrine\DBAL\Types\TimeImmutableType
---------------------- ---------------------------------------------
Available built-in database drivers
-----------------------------------
------------ ------------------------------------------------------------------------------------ -------------------
Driver Description Installed version
------------ ------------------------------------------------------------------------------------ -------------------
MySQL / MariaDB
------------ ------------------------------------------------------------------------------------ -------------------
pdo_mysql A MySQL driver that uses the pdo_mysql PDO extension 8.1.14
mysqli A MySQL driver that uses the mysqli extension 8.1.14
------------ ------------------------------------------------------------------------------------ -------------------
PostgreSQL
------------ ------------------------------------------------------------------------------------ -------------------
pdo_pgsql A PostgreSQL driver that uses the pdo_pgsql PDO extension 8.1.14
------------ ------------------------------------------------------------------------------------ -------------------
SQLite
------------ ------------------------------------------------------------------------------------ -------------------
pdo_sqlite An SQLite driver that uses the pdo_sqlite PDO extension 8.1.14
sqlite3 An SQLite driver that uses the sqlite3 extension 8.1.14
------------ ------------------------------------------------------------------------------------ -------------------
SQL Server
------------ ------------------------------------------------------------------------------------ -------------------
pdo_sqlsrv A Microsoft SQL Server driver that uses pdo_sqlsrv PDO 5.10.1
sqlsrv A Microsoft SQL Server driver that uses the sqlsrv PHP extension 5.10.1
------------ ------------------------------------------------------------------------------------ -------------------
Oracle Database
------------ ------------------------------------------------------------------------------------ -------------------
pdo_oci An Oracle driver that uses the pdo_oci PDO extension (not recommended by doctrine) N/A
oci8 An Oracle driver that uses the oci8 PHP extension N/A
------------ ------------------------------------------------------------------------------------ -------------------
IBM DB2
------------ ------------------------------------------------------------------------------------ -------------------
pdo_ibm An DB2 driver that uses the pdo_ibm PHP extension N/A
ibm_db2 An DB2 driver that uses the ibm_db2 extension N/A
------------ ------------------------------------------------------------------------------------ -------------------
Connection information for connection "default"
===============================================
Registered doctrine database data type mappings
-----------------------------------------------
--------------- -------------------- -------------------------------------
Database type Doctrine type name Doctrine type implementation
--------------- -------------------- -------------------------------------
bigint bigint Doctrine\DBAL\Types\BigIntType
binary binary Doctrine\DBAL\Types\BinaryType
blob blob Doctrine\DBAL\Types\BlobType
char string Doctrine\DBAL\Types\StringType
date date Doctrine\DBAL\Types\DateType
datetime datetime Doctrine\DBAL\Types\DateTimeType
decimal decimal Doctrine\DBAL\Types\DecimalType
double float Doctrine\DBAL\Types\FloatType
float float Doctrine\DBAL\Types\FloatType
int integer Doctrine\DBAL\Types\IntegerType
integer integer Doctrine\DBAL\Types\IntegerType
longblob blob Doctrine\DBAL\Types\BlobType
longtext text Doctrine\DBAL\Types\TextType
mediumblob blob Doctrine\DBAL\Types\BlobType
mediumint integer Doctrine\DBAL\Types\IntegerType
mediumtext text Doctrine\DBAL\Types\TextType
numeric decimal Doctrine\DBAL\Types\DecimalType
real float Doctrine\DBAL\Types\FloatType
set simple_array Doctrine\DBAL\Types\SimpleArrayType
smallint smallint Doctrine\DBAL\Types\SmallIntType
string string Doctrine\DBAL\Types\StringType
text text Doctrine\DBAL\Types\TextType
time time Doctrine\DBAL\Types\TimeType
timestamp datetime Doctrine\DBAL\Types\DateTimeType
tinyblob blob Doctrine\DBAL\Types\BlobType
tinyint boolean Doctrine\DBAL\Types\BooleanType
tinytext text Doctrine\DBAL\Types\TextType
varbinary binary Doctrine\DBAL\Types\BinaryType
varchar string Doctrine\DBAL\Types\StringType
year date Doctrine\DBAL\Types\DateType
json json Doctrine\DBAL\Types\JsonType
_text text Doctrine\DBAL\Types\TextType
--------------- -------------------- -------------------------------------
Connection details
------------------
--------------------------------------- -----------------------------------------
Name Value
--------------------------------------- -----------------------------------------
Used connection implementation Doctrine\DBAL\Connection
Used database driver implementation Doctrine\DBAL\Driver\PDO\MySQL\Driver
Used database platform implementation Doctrine\DBAL\Platforms\MySQL80Platform
Used database platform version 10.5
Used built-in database driver pdo_mysql (8.1.14)
--------------------------------------- -----------------------------------------
debug:config DoctrineBundle
Das Kommando listet die zusammengefasste Datenbankkonfiguration auf, welche aus der Core-Konfiguration
und der benutzerdefinierten Konfiguration besteht.
$ pseudify debug:config DoctrineBundle
Current configuration for "DoctrineBundle"
==========================================
doctrine:
dbal:
connections:
default:
driver: '%env(PSEUDIFY_DATABASE_DRIVER)%'
host: '%env(PSEUDIFY_DATABASE_HOST)%'
port: '%env(PSEUDIFY_DATABASE_PORT)%'
user: '%env(PSEUDIFY_DATABASE_USER)%'
password: '%env(PSEUDIFY_DATABASE_PASSWORD)%'
dbname: '%env(PSEUDIFY_DATABASE_SCHEMA)%'
path: '%env(PSEUDIFY_DATABASE_SCHEMA)%'
charset: '%env(PSEUDIFY_DATABASE_CHARSET)%'
server_version: '%env(PSEUDIFY_DATABASE_VERSION)%'
options:
TrustServerCertificate: '%env(PSEUDIFY_DATABASE_SSL_INSECURE)%'
mapping_types:
_text: text
logging: false
profiling: false
profiling_collect_backtrace: false
profiling_collect_schema_errors: true
default_table_options: { }
slaves: { }
replicas: { }
shards: { }
types: { }
debug:dotenv
Das Kommando listet die Werte aus der .env
Datei auf.
$ pseudify debug:dotenv
Dotenv Variables & Files
========================
Variables
---------
---------------------------- -----------------------
Variable Value
---------------------------- -----------------------
APP_ENV dev
PSEUDIFY_DATABASE_CHARSET utf8mb4
PSEUDIFY_DATABASE_DRIVER pdo_mysql
PSEUDIFY_DATABASE_HOST mariadb_10_5
PSEUDIFY_DATABASE_PASSWORD pseudify(!)w4ldh4ck3r
PSEUDIFY_DATABASE_PORT 3306
PSEUDIFY_DATABASE_SCHEMA pseudify_utf8mb4
PSEUDIFY_DATABASE_USER pseudify
PSEUDIFY_DATABASE_VERSION 10.5
---------------------------- -----------------------