在 SQL 服务器中加密并在 Python / spark 中解密
Encrypt in SQL Server and decrypt in Python / spark
是否可以在SQLServer中加密一列,然后在Pythoncod中解密e?
我需要这个,因为我正在处理许多不同的数据源并构建数据提取管道,但是有一些敏感信息应该在某些步骤中加密,例如数据库步骤,但我需要它们作为普通text 稍后处理它,所以我的想法是通过 SP 或内置函数在数据库上对其进行加密,然后能够使用 python / spark.
对其进行解密
如果有人有其他想法,请随时分享。
每个软件都有自己的加密方法,从技术上讲,如果您要加密数据,那么不涉及 SQL 服务器数据库引擎就不可能解密。否则,任何人都可以解密敏感数据,使加密变得无用。
但据我所知,您可以从 python 调用内部 SQL 函数。
好的,让我自己尝试并演示 ->
现在这可能不是使用 encryption/decryption 的最佳方式,但使用 sql 中的密码功能加密作为演示可能会有所帮助。
CREATE DATABASE TEST_ENCRYPT /* CREATE DATABASE */
GO
USE TEST_ENCRYPT /* USE DATABASE */
GO
CREATE TABLE EMPLOYEES (ID INT IDENTITY, NAME VARCHAR(20), SALARY VARBINARY(256)) /* CREATE TABLE */
GO
CREATE OR ALTER PROCEDURE INSERT_DATA /* CREATE STORED PROCEDURE THAT WILL INSERT DATA INTO TABLE */
@EMPLOYEE_NAME VARCHAR(20), @SALARY INT
AS
BEGIN
DECLARE @KEY VARCHAR(20) = 'testkey' /* PASSPHRASE IS CASE SENSITVE*/
INSERT INTO EMPLOYEES
VALUES
(
@EMPLOYEE_NAME,
ENCRYPTBYPASSPHRASE(@KEY
, CAST (@SALARY AS VARBINARY(256)))
)
END
EXEC INSERT_DATA @EMPLOYEE_NAME = 'TIM', @SALARY = 34000 /* INSERT DATA */
DBA 认为我的 table 怎么样?
现在检查数据,你的查询应该是这样的
DECLARE @KEY VARCHAR(20) = 'testkey'
SELECT NAME, CAST (DECRYPTBYPASSPHRASE (@KEY, SALARY) AS INT) [SALARY] FROM EMPLOYEES /* CHECK DATA BY INTERNALLY DECRYPTING IN SQL SERVER */
但是,您可以从 python
运行 从 sql 服务器中 运行 宁该查询
import pyodbc
conn = pyodbc.connect('Driver={SQL Server};'
'Server=Blackbox;'
'Database=test_encrypt;'
'Trusted_Connection=yes;')
var1 = ('testkey',)
cursor = conn.cursor()
cursor.execute('SELECT name, cast (DECRYPTBYPASSPHRASE (?, salary) as int) [Salary] FROM test_encrypt.dbo.Employees', var1)
for row in cursor:
print(row)
这些只是众多方法中的一种。您可以使用证书、密钥、非对称密钥等
是否可以在SQLServer中加密一列,然后在Pythoncod中解密e?
我需要这个,因为我正在处理许多不同的数据源并构建数据提取管道,但是有一些敏感信息应该在某些步骤中加密,例如数据库步骤,但我需要它们作为普通text 稍后处理它,所以我的想法是通过 SP 或内置函数在数据库上对其进行加密,然后能够使用 python / spark.
对其进行解密如果有人有其他想法,请随时分享。
每个软件都有自己的加密方法,从技术上讲,如果您要加密数据,那么不涉及 SQL 服务器数据库引擎就不可能解密。否则,任何人都可以解密敏感数据,使加密变得无用。
但据我所知,您可以从 python 调用内部 SQL 函数。
好的,让我自己尝试并演示 ->
现在这可能不是使用 encryption/decryption 的最佳方式,但使用 sql 中的密码功能加密作为演示可能会有所帮助。
CREATE DATABASE TEST_ENCRYPT /* CREATE DATABASE */
GO
USE TEST_ENCRYPT /* USE DATABASE */
GO
CREATE TABLE EMPLOYEES (ID INT IDENTITY, NAME VARCHAR(20), SALARY VARBINARY(256)) /* CREATE TABLE */
GO
CREATE OR ALTER PROCEDURE INSERT_DATA /* CREATE STORED PROCEDURE THAT WILL INSERT DATA INTO TABLE */
@EMPLOYEE_NAME VARCHAR(20), @SALARY INT
AS
BEGIN
DECLARE @KEY VARCHAR(20) = 'testkey' /* PASSPHRASE IS CASE SENSITVE*/
INSERT INTO EMPLOYEES
VALUES
(
@EMPLOYEE_NAME,
ENCRYPTBYPASSPHRASE(@KEY
, CAST (@SALARY AS VARBINARY(256)))
)
END
EXEC INSERT_DATA @EMPLOYEE_NAME = 'TIM', @SALARY = 34000 /* INSERT DATA */
DBA 认为我的 table 怎么样?
现在检查数据,你的查询应该是这样的
DECLARE @KEY VARCHAR(20) = 'testkey'
SELECT NAME, CAST (DECRYPTBYPASSPHRASE (@KEY, SALARY) AS INT) [SALARY] FROM EMPLOYEES /* CHECK DATA BY INTERNALLY DECRYPTING IN SQL SERVER */
但是,您可以从 python
运行 从 sql 服务器中 运行 宁该查询import pyodbc
conn = pyodbc.connect('Driver={SQL Server};'
'Server=Blackbox;'
'Database=test_encrypt;'
'Trusted_Connection=yes;')
var1 = ('testkey',)
cursor = conn.cursor()
cursor.execute('SELECT name, cast (DECRYPTBYPASSPHRASE (?, salary) as int) [Salary] FROM test_encrypt.dbo.Employees', var1)
for row in cursor:
print(row)
这些只是众多方法中的一种。您可以使用证书、密钥、非对称密钥等