morebec / orkestra-postgresql-personal-information-store
Orkestra 的 PostgreSQL 个人信息存储
Requires
- php: >=7.4
- ext-json: *
- ext-pdo_pgsql: *
- ext-pgsql: *
- ext-sodium: *
- doctrine/dbal: ^3.0
- morebec/orkestra-datetime: ^2.5.6
- morebec/orkestra-normalization: ^2.5.6
- morebec/orkestra-privacy: ^2.5.6
Requires (Dev)
- ext-dom: *
- friendsofphp/php-cs-fixer: ^2.16
- phpstan/phpstan: ^0.12.7
- phpunit/phpunit: ^9.5
- symfony/var-dumper: 5.*
README
此组件是 Orkestra 隐私组件个人信息系统基于 PostgreSQL 的实现。它支持对个人存储中的数据进行加密。
它依赖于 DBAL 与 PostgreSQL 进行通信。
安装
可以使用 composer 安装此组件。
composer require morebec/orkestra-orkestra-postgresql-personal-information-store
使用方法
创建一个新的 PostgreSqlPersonalInformationStore
实例。
use Doctrine\DBAL\Configuration; use Doctrine\DBAL\DriverManager; use Morebec\Orkestra\PostgreSqlPersonalInformationStore\PostgreSqlPersonalInformationStore; use Morebec\Orkestra\PostgreSqlPersonalInformationStore\PostgreSqlPersonalInformationStoreConfiguration; $connection = DriverManager::getConnection([ 'url' => '...' ], new Configuration()); $config = new PostgreSqlPersonalInformationStoreConfiguration(); $config->encryptionKey = PostgreSqlPersonalInformationStore::generateEncryptionKey(); // Or random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES); $store = new PostgreSqlPersonalInformationStore($connection,$config);
请确保您安全地保存加密密钥,例如使用 .env 变量或密钥管理器。
有关如何使用存储器的更多信息,请参阅 隐私组件 的文档。
一次性信息
存储在个人信息系统中的信息可以有一个 disposedAt
值,该值表示何时以及是否应该销毁数据。此组件提供 DisposedPersonalDataRemover
服务类,用于检查存储中的过期数据并将其删除。
应在守护进程中使用
use Morebec\Orkestra\PostgreSqlPersonalInformationStore\DisposedPersonalDataRemover; $remover = new DisposedPersonalDataRemover($store); while(true) { $remover->run(); sleep(60); }
安全
鉴于此存储的目的是保存个人数据,因此 PostgreSQL 服务器必须高度安全,以抵御攻击者。以下是一些建议,以帮助您开始。
客户端身份验证控制
客户端身份验证控制允许指定 PostgreSQL 服务器客户端如何连接,以及是否允许它们连接。此配置可以在 pg_hba.conf
中完成。
# TYPE DATABASE USER ADDRESS METHOD
host postgres all 172.20.0.0/24 ident
host all all 0.0.0.0/0 reject
例如,上述配置仅允许 IP 地址为 172.20.0.x
的所有客户端使用身份验证方法 ident 连接到数据库 postgres,该方法通过使用客户端的操作系统的用户名工作。鉴于此文件是从上到下读取以进行匹配的,因此最后一条将拒绝任何其他连接尝试。
服务器配置
当然,为了增强 PostgreSQL 服务器的安全性,还可以编辑其服务器配置。例如
- 更改默认端口号为其他值
- 更改允许的客户端地址列表(类似于客户端身份验证控制)
- 使用 SSL
测试
要运行测试,请执行以下命令
vendor/bin/phpunit tests/
需要有 postgresql 实例运行,具有无密码的角色 postgres
和名为 postgres
的数据库。要轻松设置此配置并运行,此项目的根目录中有一个可用的 docker-compose
配置文件。
要运行它,请执行以下命令
docker-compose up -d