如何连接/查询Azure SQL始终从Python加密?

时间:2018-04-16 09:13:03

标签: python azure azure-sql-database pyodbc

我的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: 当我查询加密列时,它会给我加密值。如何解密并获得原始值? 另外我如何插入加密值?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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()