如何使用始终在Laravel / Lumen中加密的SQL Server

问题描述 投票:0回答:1

我正在尝试创建使用SQL Server数据库的Lumen应用程序(我正在使用Lumen v7)。使用SQL Server上的Always Encrypted功能在数据库级别静态加密某些数据。

[我认为,Linux上用于SQL Server的ODBC驱动程序中的密钥库提供程序(我正在使用CentOS和Nginx)仅支持Azure Key Vault,根据this文章不能使用Windows证书存储,但是我很难时间尝试使用Azure Key Vault的连接字符串来检索解密的数据。

这是我正在使用的连接字符串

    'connections' => [
        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'user'),
            'username' => env('DB_USERNAME', 'user'),
            'password' => env('DB_PASSWORD', ''),
            'encrypt' => 'yes',
            'trust_server_certificate' => 'true',
            'column_encryption' => 'Enabled',
            'key_store_authentication' => 'KeyVaultClientSecret',
            'key_store_principal_id' => env('AZURE_APPLICATION_CLIENT_ID'),
            'key_store_secret' => env('AZURE_APPLICATION_CLIENT_SECRET')
        ],
    ],

[每当我尝试从加密列中获取数据时,都会出现错误

SQLSTATE[IMSSP]: Field 1 returned no data. (SQL: SELECT * FROM t_users_encrypted)

我还想念其他东西吗?还是根本无法使用当前库?还是有人对我如何使用Linux OS中的PHP / NodeJS应用程序从加密列中连接和检索数据有任何建议?

php sql-server laravel lumen always-encrypted
1个回答
0
投票

Laravel和PDO都支持SQL Server加密。

启用column_encryption不足以使加密或解密成功;您还需要确保:

  • 该应用程序具有“查看任何列主密钥定义”和“查看任何列加密密钥定义”数据库权限,这些权限是访问数据库中有关“始终加密的密钥”的元数据所必需的。
  • 应用程序可以访问为查询的加密列保护CEK的CMK。此要求取决于存储CMK的密钥存储提供程序。

阅读有关检索加密数据的更多信息:

https://docs.microsoft.com/en-us/sql/connect/php/using-always-encrypted-php-drivers?view=sql-server-ver15#retrieving-and-modifying-data-in-encrypted-columns

© www.soinside.com 2019 - 2024. All rights reserved.