【问题标题】:How to connecct/query Azure SQL Always encrypted from Python?如何连接/查询始终从 Python 加密的 Azure SQL?
【发布时间】:2018-04-16 09:13:03
【问题描述】:

我的 azure 数据库中有一个包含 2 列的表,一个是 id,另一个是 value,这是一个加密列。现在我想从 Python 连接、写入、读取表。在普通表的情况下,以下是从 Python 连接的方式,并且有效:

import pyodbc
cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+';PWD='+ password)

但由于它是一个包含加密列的表,我无法通过连接上述命令对其进行写入/读取。我相信我需要在连接时通过Trusted_connection=yes; ColumnEncryption=Enabled,但我无法这样做。帮助表示赞赏。提前谢谢!

编辑 1: 当我查询加密列时,它给了我加密的值。如何解密并获得原始值? 另外我如何插入加密值?

【问题讨论】:

    标签: python azure azure-sql-database pyodbc


    【解决方案1】:

    事实证明这是可能的!

    import pyodbc
    cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+';PWD='+password';ColumnEncryption=Enabled;KeyStoreAuthentication=KeyVaultClientSecret;KeyStorePrincipalId='+client_id+';KeyStoreSecret='+client_secret)
    c = cnxn.cursor()
    sql = "select * from MyTable"
    c.execute(sql)
    print(c.fetchall())
    

    插入:

    sql = "insert into MyTable (id, number) values (?, ?)"
    values = [1, 10]
    c = cnxn.cursor()
    c.execute(sql, values)
    c.commit()
    

    【讨论】:

      【解决方案2】:

      由于加解密是在客户端完成的,所以需要.NET framework 4.6或更高版本。 Always Encrypted 版本 1 仅支持 SQL Server 客户端驱动程序,但不支持 ODBC 和 JDBC 驱动程序。如图所示here,即使对于pyodbc,似乎也没有任何改变。

      【讨论】:

      • 所以不能使用pyodbc?
      • 我找不到任何说明现在可以实现的文档。
      • 如何在客户端进行加密?密钥存储在客户端不可用的密钥库中!!
      • docs.microsoft.com/en-us/sql/relational-databases/security/… 表示 JDBC、ODBC 和 PHP 驱动程序也支持 Always Encrypted。
      • 我的回答是在 2018 年的背景下。请多多包涵。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多