通过删除和重新创建相同的名称来更改证书+密钥算法

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. 但是,如果可能,我宁愿避免编辑存储过程。

我写了以下例程:

  1. 将密码列解密为纯文本字段
  2. 删除现有的密钥和证书
  3. 创建一个与上面同名的新证书和密钥
  4. 使用新的证书/密钥重新加密纯文本列

我的问题是,对于训练有素的眼睛,这里是否有任何事情会引起警钟,特别是因为旧名称和新名称相同,并且这些名称是在存储过程中使用的?

我已经测试了代码并且它有效,但是我缺乏加密经验和今天的信息过载剂量让我非常紧张,因此请求专业知识......

-- 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)

Evi*_*lDr 1

只是为了反馈这一点,该过程运行良好,并且数据已成功重新加密。

因此,尽管人们对对称数据加密(其中有业务规则证明这一点)提出了一些担忧,但一切都运行良好。

所有引用该密钥的存储过程都可以继续正常工作,无需任何修改。