Des加密更换密钥后如何对数据库中现有的数据重新加密?

lilian_bu 2007-12-27 10:05:01
比如存放在数据库中的password字段在程序中用des加密过才存入到数据库中,
那么,如果现在管理员更换密钥,则需要将所有password重新用新密钥加密一遍再更新回数据库。

存储过程能支持des吗?
如果存储过程不支持,怎么完成这个功能
...全文
732 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
GooKit 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 roy_88 的回复:]
测试例子:

SQL code
use test
go
create login Login_roy with password='roy888'--創建登陸名
go
create user User_roy for login Login_roy --創建用戶名

create master key encryption by password='pass123456' ……
[/Quote]


确实太强悍!
mice_215 2008-11-14
  • 打赏
  • 举报
回复
O(∩_∩)O哈哈~
tsbix 2008-05-17
  • 打赏
  • 举报
回复
密码一般选择不可逆加密算法吧?比如MD5之类,我也一直对密码选择MD5算法。
lao_bulls 2008-05-16
  • 打赏
  • 举报
回复
mark.
voice007 2008-05-16
  • 打赏
  • 举报
回复
mark!
lilian_bu 2007-12-29
  • 打赏
  • 举报
回复
roy太厉害了 不过太复杂了 我用不到这么多复杂的

而且以我现在的水平不是完全能看懂

我把加密都放到程序里了,.net支持des,用起来很方便.

现在就是用户希望他能更换密钥,那么就必须把数据库已经有的数据全部更新一遍,用存储过程的话,就需要自己把des在存储过程中实现,说实在 这部分我不会
fcuandy 2007-12-28
  • 打赏
  • 举报
回复
顶一下.roy好强.
changjiangzhibin 2007-12-28
  • 打赏
  • 举报
回复
好多星星,怪不得这么强!
中国风 2007-12-28
  • 打赏
  • 举报
回复
测试例子:
use  test
go
create login Login_roy with password='roy888'--創建登陸名
go
create user User_roy for login Login_roy --創建用戶名

create master key encryption by password='pass123456' --建立資料庫主要金鑰
go
create table Salary(
employee nvarchar(50),
salary varbinary(100)
)
go
grant select,insert to User_roy --授於roy用戶select\insert權限
go
create symmetric key Salary_user_key --建立對稱金鑰
authorization User_roy WITH algorithm= triple_des
encryption by password='roy666'
go
execute as login='Login_roy'--切換登入賬號
go

open symmetric key Salary_user_key decryption by password='roy666'--開啟對稱金鑰

go
select * from sys.openkeys--查詢結果,沒開啟時不會有結果
go
--以下操作表數據
--1新增
insert Salary values(N'程序員A',encryptbykey(Key_GUID('Salary_user_key'),'8000'))
insert Salary values(N'程序員B',encryptbykey(Key_GUID('Salary_user_key'),'10000'))
go

close all symmetric keys--關閉所有金鑰

go
select * from Salary
/*
employee salary
-------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
程序員A 0x0008BCED7496E247903671B6691E76BE01000000E2A581890D0CD44F17D9FD577F5B4F429538FFED339CE21F
程序員B 0x0008BCED7496E247903671B6691E76BE01000000F4F3204491C2114BDE26B09695B87A2CDC90D1002708FDD0

(2 個資料列受到影響)

*/
go
open symmetric key Salary_user_key decryption by password='roy666'--開啟對稱金鑰
go
SELECT
employee,
CONVERT(varchar,decryptByKey(salary))
FROM Salary
/*
employee
-------------------------------------------------- ------------------------------
程序員A 8000
程序員B 10000

(2 個資料列受到影響)

*/
go
insert Salary values(N'程序員C',encryptbykey(Key_GUID('Salary_user_key'),'12000'))
go
close all symmetric keys--關閉所有金鑰
go
SELECT
employee,
CONVERT(varchar,decryptByKey(salary))
FROM Salary
/*
employee
-------------------------------------------------- ------------------------------
程序員A NULL
程序員B NULL
程序員C NULL

(3 個資料列受到影響)

*/

revert; --切換回最後一個 EXECUTE AS 陳述式的登陸者

go
--用憑證方式....
create certificate SalaryCert --將憑證加入至資料庫中
authorization User_roy
with subject='Certificate person',
expiry_date = '12/31/3000'--到期日期
go

open symmetric key Salary_user_key decryption by password='roy666'--開啟對稱金鑰
go
--密碼新增加密,然後由憑證移除加密

alter symmetric key Salary_user_key add encryption by certificate SalaryCert

go
alter symmetric key Salary_user_key drop encryption by password= 'roy666'--移除加密
GO
close all symmetric keys
go
execute as login='Login_roy'--切換登入賬號

go
open symmetric key Salary_user_key decryption by certificate SalaryCert
go
SELECT
employee,
CONVERT(varchar,decryptByKey(salary))
FROM Salary

/*
employee
-------------------------------------------------- ------------------------------
程序員A 8000
程序員B 10000
程序員C 12000

(3 個資料列受到影響)
*/
go
close all symmetric keys --關閉
go
SELECT
employee,
CONVERT(varchar,decryptByKey(salary))
FROM Salary

go
/*
employee
-------------------------------------------------- ------------------------------
程序員A NULL
程序員B NULL
程序員C NULL

(3 個資料列受到影響)
*/

--drop symmetric key Salary_user_key--禁用
--drop certificate SalaryCert--禁用

go
SELECT
employee,
CONVERT(varchar,decryptByKey(salary))
FROM Salary


--truncate table Salary
中国风 2007-12-27
  • 打赏
  • 举报
回复
05有加密函数还不错,加密就GUID。。针对表的列加密。。
--
就是读\写数据有点不方便,
必须先解密后才能读写数据。。
没有解密读出来的数据为GUID格式
dawugui 2007-12-27
  • 打赏
  • 举报
回复
自己写个函数(或存储过程)重新生成数据就行了.
撸大湿 2007-12-27
  • 打赏
  • 举报
回复
1.根据唯一列update 所有pwd
2.truncate表,重新insert表数据
3.把加密算法写入过程中,实时跟新TABLE

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧