【问题标题】:SQL Server Column Encryption using Azure Key Vault and Spring Boot使用 Azure Key Vault 和 Spring Boot 的 SQL Server 列加密
【发布时间】:2019-05-17 12:29:21
【问题描述】:

我需要使用 Azure Key Vault 将数据保存在具有列加密的 SQL 服务器中

        @Bean
    @Primary
    public DataSource dataSource() throws SQLException {

        KeyVaultClient client = new KeyVaultClient(keyVaultCredentialService);

        String userName = client.getSecret(vaultURL, "spring-datasource-username").value();
        String password = client.getSecret(vaultURL, "spring-datasource-password").value();
        String url = "jdbc:sqlserver://test.database.windows.net;databaseName=encryption_demo;columnEncryptionSetting=Enabled;"; 

        String driverClass = client.getSecret(vaultURL, "spring-datasource-driverClassName").value();

        DataSource dataSource = DataSourceBuilder
                .create()
                .username(userName)
                .password(password)
                .url(url)
                .driverClassName(driverClass)
                .build();

SQLServerColumnEncryptionAzureKeyVaultProvider akvProvider = new SQLServerColumnEncryptionAzureKeyVaultProvider(clientId, clientKey);

Map<String, SQLServerColumnEncryptionKeyStoreProvider> keyStoreMap = new HashMap<String, SQLServerColumnEncryptionKeyStoreProvider>();

keyStoreMap.put(akvProvider.getName(), akvProvider);        SQLServerConnection.registerColumnEncryptionKeyStoreProviders(keyStoreMap);

return dataSource;

}

application.properties

azure.keyvault.uri= ....
azure.keyvault.client-id= ...
azure.keyvault.client-key= ...

SQLServer table

CREATE TABLE [dbo].[Patients](
    [id] [int] PRIMARY KEY NOT NULL,
    [ssn] [varchar](max) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Auto1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
    [first_name] [varchar](max) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Auto1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL,
    [last_name] [varchar](max) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Auto1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL
) 
GO

在数据库中保存数据时出现错误: 原因:com.microsoft.sqlserver.jdbc.SQLServerException:加密时发生内部错误:非法密钥大小

【问题讨论】:

    标签: azure spring-boot azure-keyvault always-encrypted


    【解决方案1】:

    下载并安装 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files。请务必阅读 zip 文件中包含的自述文件,了解安装说明和可能的导出/导入问题的相关详细信息。

    如果使用mssql-jdbc-X.X.X.jre7.jarsqljdbc41.jar,可以从Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 7 Download下载策略文件。

    如果使用mssql-jdbc-X.X.X.jre8.jarsqljdbc42.jar,则可以从Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Download下载策略文件。

    如果使用mssql-jdbc-X.X.X.jre9.jar,则无需下载策略文件。 Java 9 中的管辖权政策默认为无限强度加密

    更多详情可以参考这个article

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-11
      • 2021-11-28
      • 2020-05-18
      • 2020-12-23
      • 2018-12-08
      • 2017-10-25
      • 2016-07-02
      • 2021-12-13
      相关资源
      最近更新 更多