aeliot/doctrine-encrypted-field

该项目提供通过Doctrine实体字段与数据库加密列交互的设备

安装量: 1,819

依赖项: 0

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

开放问题: 5

类型:symfony-bundle

v1.0.2 2024-06-26 18:50 UTC

This package is auto-updated.

Last update: 2024-09-24 19:38:24 UTC


README

WFS Code Climate maintainability GitHub License

该包允许加密数据库的单独字段。

安装

调用命令行脚本来安装

composer require aeliot/doctrine-encrypted-field

项目集成

该包非常灵活。您可以使用单个密钥或分割密钥进行数据加密。这里描述了使用默认设置进行简单集成的示例。

  1. 定义环境变量 DB_ENCRYPTION_KEY
  2. 生成迁移以将自定义函数安装到数据库中
  3. 定义doctrine实体的加密列类型
    use Doctrine\ORM\Mapping as ORM;
    
    #[ORM\Entity()]
    class MyEntity
    {
        //...
    
        #[Orm\Column(type: 'encrypted_string')]
        private string $secret;
    }
  4. 生成迁移以转换数据库中的列并加密数据。
     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的示例,该项目具有分成两部分的加密密钥

  • 一个在应用程序中,设置数据库连接会话
  • 另一个在另一个数据库中。

密钥轮换

  1. 通过控制台命令解密数据库
    bin/console doctrine-encrypted-field:database:decrypt
  2. 更改密钥
  3. 通过控制台命令加密数据库
    bin/console doctrine-encrypted-field:database:encrypt

数据库选项

该包期望数据库表的选项

  • charset: utf8mb4
  • collation: utf8mb4_unicode_ci