Evi*_*lDr 5 sql-server encryption sql-server-2012 certificate symmetric-key
我们有一种情况,使用TRIPLE_DES
. 这用于加密密码列,并由大约十个存储过程使用(使用这些与OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE MyCertificate01;
)
我想用AES_192
. 但是,如果可能,我宁愿避免编辑存储过程。
我写了以下例程:
我的问题是,对于训练有素的眼睛,这里是否有任何事情会引起警钟,特别是因为旧名称和新名称相同,并且这些名称是在存储过程中使用的?
我已经测试了代码并且它有效,但是我缺乏加密经验和今天的信息过载剂量让我非常紧张,因此请求专业知识......
-- Decrypt data
ALTER TABLE [dbo].[tbl_Users] ADD PasswordClear nvarchar(250) NULL;
GO
OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE MyCertificate01;
UPDATE [tbl_Users] SET PasswordClear = CONVERT(nvarchar(250), DECRYPTBYKEY(PasswordEnc))
CLOSE SYMMETRIC KEY SSN_Key_01;
GO
-- Drop old encryption
ALTER TABLE [dbo].[tbl_Users] DROP COLUMN PasswordEnc;
GO
DROP SYMMETRIC KEY SSN_Key_01;
GO
DROP CERTIFICATE [MyCertificate01];
GO
-- Create new certificate and key
CREATE CERTIFICATE MyCertificate01 WITH SUBJECT = 'My Certificate 01';
GO
CREATE SYMMETRIC KEY SSN_Key_01 WITH ALGORITHM = AES_192 ENCRYPTION BY CERTIFICATE MyCertificate01;
GO
ALTER TABLE [dbo].[tbl_Users] ADD PasswordEnc varbinary(256) NULL;
GO
OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE MyCertificate01;
UPDATE [tbl_Users] SET PasswordEnc = ENCRYPTBYKEY(Key_GUID('SSN_Key_01'), PasswordClear);
CLOSE SYMMETRIC KEY SSN_Key_01;
GO
ALTER TABLE [dbo].[tbl_Users] DROP COLUMN PasswordClear;
GO
ALTER TABLE [dbo].[tbl_Users] ALTER COLUMN PasswordEnc varbinary(256) NOT NULL;
GO
Run Code Online (Sandbox Code Playgroud)
只是为了反馈这一点,该过程运行良好,并且数据已成功重新加密。
因此,尽管人们对对称数据加密(其中有业务规则证明这一点)提出了一些担忧,但一切都运行良好。
所有引用该密钥的存储过程都可以继续正常工作,无需任何修改。