SQL Server 2005加密触发器
问题描述:
我有一个成功加密信用卡的脚本。我需要它作为触发器,以便对信用卡列进行的任何插入操作都会自动对其进行加密。现在,我的触发器工作,但信用卡列是一个varchar。当应用程序试图插入,我这样做:SQL Server 2005加密触发器
DECLARE @encryptedCreditCardNumber varbinary(max) SET @encryptedCreditCardNumber = EncryptByKey(Key_GUID('testKey'), @CreditCardNumber));
这工作正常,但我怎么那么VARBINARY(最大)转换为VARCHAR(这是信用卡列是什么)。信用卡列在我的公司很长一段时间都是varchar,很多遗留代码依赖它作为varchar。
谢谢
答
你的最简单的方法将是二进制转换为Base64并存储在VARCHAR列。 Base64是一种使用ascii编码呈现二进制数据的方法,以便它可以用XML等格式表示。您可以通过执行执行转换:
select cast(N'' as xml).value('xs:base64Binary(xs:hexBinary(sql:variable("@encryptedCreditCardNumber")))', 'varchar(max)');
这将经历一个XML中介到VARBINARY正确编码为varchar。为了扭转这一进程的DB使用:
select cast(N'' as xml).value('xs:base64Binary(sql:variable("@base64stringvariable"))', 'varbinary(20)');