aeliot / doctrine-encrypted-field
该项目提供通过Doctrine实体字段与数据库加密列交互的设备
v1.0.2
2024-06-26 18:50 UTC
Requires
- php: ^8.2
- ext-pdo: *
- doctrine/orm: ^2.15
- doctrine/persistence: ^2.0|^3.0
- symfony/config: ^5.4|^6.0
- symfony/dependency-injection: ^5.4|^6.0
- symfony/http-kernel: ^5.4|^6.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.50
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10
- phpstan/phpstan-phpunit: ^1.3
- phpunit/phpunit: 9.5.*
- squizlabs/php_codesniffer: ^3.9
README
该包允许加密数据库的单独字段。
安装
调用命令行脚本来安装
composer require aeliot/doctrine-encrypted-field
项目集成
该包非常灵活。您可以使用单个密钥或分割密钥进行数据加密。这里描述了使用默认设置进行简单集成的示例。
- 定义环境变量
DB_ENCRYPTION_KEY
- 生成迁移以将自定义函数安装到数据库中
- 定义doctrine实体的加密列类型
use Doctrine\ORM\Mapping as ORM; #[ORM\Entity()] class MyEntity { //... #[Orm\Column(type: 'encrypted_string')] private string $secret; }
- 生成迁移以转换数据库中的列并加密数据。
use Doctrine\DBAL\Schema\Schema; use Doctrine\Migrations\AbstractMigration; final class Version20240226205039 extends AbstractMigration { public function up(Schema $schema): void { $this->addSql('ALTER TABLE my_entity CHANGE secret secret VARBINARY(1024) DEFAULT NOT NULL'); $this->addSql('UPDATE my_entity SET secret = APP_ENCRYPT(secret) WHERE 1;'); } public function down(Schema $schema): void { $this->addSql('UPDATE my_entity SET secret = APP_DECRYPT(secret) WHERE 1;'); $this->addSql('ALTER TABLE my_entity CHANGE secret secret VARCHAR(255) DEFAULT NOT NULL'); } }
因此,数据将在数据库中加密,并在整个项目代码中解密。您不需要更改实体字段的数据类型,也不需要更新您的项目。
配置(可选)
您可以在没有额外配置的情况下使用该包。但最常见的一种配置如下
aeliot_doctrine_encrypted_field: encryption_availability_checker: App\Doctrine\Encryption\EncryptionAvailabilityChecker functions_provider: App\Doctrine\Encryption\FunctionsProvider secret_provider: App\Doctrine\Encryption\SecretProvider
请参阅FunctionProvider的示例,该项目具有分成两部分的加密密钥
- 一个在应用程序中,设置数据库连接会话
- 另一个在另一个数据库中。
密钥轮换
- 通过控制台命令解密数据库
bin/console doctrine-encrypted-field:database:decrypt
- 更改密钥
- 通过控制台命令加密数据库
bin/console doctrine-encrypted-field:database:encrypt
数据库选项
该包期望数据库表的选项
- charset: utf8mb4
- collation: utf8mb4_unicode_ci