我的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:当我查询加密列时,它会给出加密值。如何解密并获得原始值?另外,我如何插入加密值?
发布于 2018-04-17 21:22:52
事实证明这是可能的!
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()
发布于 2018-04-16 20:01:15
由于加密和解密是在客户端完成的,因此需要.NET Framework4.6或更高版本。Always Encrypted的版本1仅支持SQL Server客户端驱动程序,但不支持ODBC和JDBC驱动程序。就像here所显示的那样,即使对于pyodbc,似乎也没有什么变化。
https://stackoverflow.com/questions/49853604
复制相似问题