morebec / orkestra-postgresql-personal-information-store

Orkestra 的 PostgreSQL 个人信息存储

v2.5.6 2023-03-31 18:46 UTC

This package is auto-updated.

Last update: 2024-09-30 01:46:54 UTC


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