Jdbc 始终从数据库访问加密数据

Jdbc 始终从数据库访问加密数据,jdbc,azure-sql-database,databricks,azure-keyvault,always-encrypted,Jdbc,Azure Sql Database,Databricks,Azure Keyvault,Always Encrypted,我在Azure SQL托管实例中有一个具有“始终加密”列的表。我将列和主密钥存储在Azure key Vault中 我的第一个问题是-如何从DataRicks访问Azure SQL中解密的数据。为此,我通过jdbc连接到Azure SQL。对于用户名和密码,我将手动传递凭据 当我这样做时,我能够显示数据,但它是加密数据。如何查看解密的数据 我是Azure和Databricks组合的新手,所以仍在学习Azure/Microsoft堆栈。是否有其他形式的jdbc连接语法允许您解密 我的钥匙在Azur

我在Azure SQL托管实例中有一个具有“始终加密”列的表。我将列和主密钥存储在Azure key Vault中

  • 我的第一个问题是-如何从DataRicks访问Azure SQL中解密的数据。为此,我通过jdbc连接到Azure SQL。对于用户名和密码,我将手动传递凭据
  • 当我这样做时,我能够显示数据,但它是加密数据。如何查看解密的数据

  • 我是Azure和Databricks组合的新手,所以仍在学习Azure/Microsoft堆栈。是否有其他形式的jdbc连接语法允许您解密

  • 我的钥匙在Azure Keyvault里。那么,我如何利用这些密钥以及与这些密钥相关的安全性呢?这样,当有人访问这个表时,它会在被访问时在数据库中显示加密/解密的数据


  • 请参阅这是否可行?结果如何?
    val jdbcHostname = "XXXXXXXXXXX.database.windows.net"
    val jdbcPort = 1433
    val jdbcDatabase = "ABCD"
    
    val jdbcUrl = s"jdbc:sqlserver://${jdbcHostname}:${jdbcPort};database=${jdbcDatabase}"
    
    // Create a Properties() object to hold the parameters.
    import java.util.Properties
    val connectionProperties = new Properties()
    connectionProperties.put("user", s"${jdbcUsername}")
    connectionProperties.put("password", s"${jdbcPassword}")
    
    val driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    connectionProperties.setProperty("Driver", driverClass)
    
    import java.sql.DriverManager
    val connection = DriverManager.getConnection(jdbcUrl, jdbcUsername, jdbcPassword)
    connection.isClosed()
    
    val user = spark.read.jdbc(jdbcUrl, "dbo.bp_mp_user_test", connectionProperties)
    display(user)