一个存储过程AES加密我有一个SQL Server 2008中表类似于下面的结构:创建MS SQL Server 2008中
ID int PRIMARY KEY IDENTITY(1,1)
Name nvarchar(100)
LongText ntext
我想实现很简单。在将数据插入此表之前,我想使用AES_192算法对LongText进行加密。我使用下面的SP对数据进行加密:
create proc sp_Encrypt_LongText
@rawText ntext = null,
@encryptedText nvarchar(max) output
as
begin
OPEN SYMMETRIC KEY Encryption_Symmetric_Key
DECRYPTION BY CERTIFICATE Encryption_Certificate WITH PASSWORD = 'mypassword'
set @encryptedText = ENCRYPTBYKEY(KEY_GUID(N'Encryption_Symmetric_Key'), cast(@rawText as nvarchar(max)))
CLOSE SYMMETRIC KEY Encryption_Symmetric_Key
end
和解密,我创建了以下SP:
alter proc sp_Decrypt_LongText
@encryptedText ntext = null,
@decryptedText varchar(max) output
as
begin
OPEN SYMMETRIC KEY Encryption_Symmetric_Key
DECRYPTION BY CERTIFICATE Encryption_Certificate WITH PASSWORD = 'mypassword'
set @decryptedText = cast(DECRYPTBYKEY(cast(@encryptedText as nvarchar(max))) as varchar(max))
CLOSE SYMMETRIC KEY Encryption_Symmetric_Key
end
的程序似乎当我使用exec命令做工精细。到现在为止还挺好。问题在于使用存储过程在表内插入和提取数据;一个用于插入和选择。我有什么截至目前如下:
对于插入:
create proc sp_InsertData
@Name nvarchar(100),
@LongText ntext = NULL
as
INSERT INTO TABLE tbl VALUES (@Name, @LongText)
有关读取
create proc sp_FindDataById
@Id int
as
SELECT ID, Name, LongText from tbl where [email protected]
我的问题是,我怎么插加密/解密程序在这些SPs内部让他们工作?我已经看过几篇文章来达到这个目的,但我一直在讨论一个问题或另一个问题;主要是因为ntext
数据类型。或者,也许我可能会在这里走错路。任何形式的帮助表示赞赏。 PS:由于DBA指定的某些原因,我无法将LongText
的数据类型从ntext
更改为nvarchar
或varchar
。因此,所有的铸件都应用在程序中。
轻微的弯路... HTTP://sqlperformance.com/2012/10/t-sql-queries/sp_prefix –
是上药你的DBA?坚持使用ntext没有任何理由。该数据类型已被弃用十多年,以支持nvarchar(max)。但我不太明白这里的问题。 –
ypou将如何保护加密密钥?你抵御什么样的攻击? – zaph