还不熟悉这个CSDN的网页编辑器。
本人因为工作需要,在数据库存中存放了一些登录账号、密码之类的数据。为了保障数据安全,就对这些数据进行了简单加密。在使用过程中,每次都要写一大堆的代码,觉得麻烦,干脆我把加密、解密操作生成存储过程保存在数据库里,而密钥字符串却记在脑子里。这样即方便了使用,又保障了数据安全。做到这一点,我们需要使用encryptbypassphrase()和decryptbypassphrase()两个sqlserver内置加密、解密工具。
先创建表:
use databaseName
go
--判断表是否存在,如果存在就删除
if object_id(N'dbo.pwdTable',N'U') is not null
drop table dbo.pwdTable
go
--创建表
create table dbo.pwdTable
(
number int identity(1,1) not null,
pwd_id nvarchar(max) not null,
pwd_user varbinary(max) null,
pwd_txt varbinary(max) null,
Remarks nvarchar(max) default('')
)
go
创建存储过程:
use databaseName
go
--编辑存储过程
--首先判断存储过程是否存在……
if object_id(N'usp_en',N'P') is not null
drop proc usp_en
go
if object_id(N'usp_de',N'P') is not null
drop proc usp_de
go
--创建加密存储过程
create proc usp_en
@en varchar(20),
@pwd_id nvarchar(max),
@pwd_user nvarchar(max)='',
@pwd_txt nvarchar(max)='',
@Remarks nvarchar(max)=''
as
begin
insert pwdTable(pwd_id,pwd_user,pwd_txt,Remarks)
values
(
@pwd_id,
encryptbypassphrase(@en,cast(@pwd_user as nvarchar(max))),
encryptbypassphrase(@en,cast(@pwd_txt as nvarchar(max))),
@Remarks
)
end
go
--创建解密存储过程
create proc usp_de
@de varchar(20)--,@pwd_user nvarchar(max) ----取消注释可以按用户名查找
as
begin
select
number,
pwd_id,
cast(decryptbypassphrase(@de,pwd_user) as nvarchar(max)),
cast(decryptbypassphrase(@de,pwd_txt) as nvarchar(max)),
Remarks
from
pwdTable
--where ----取消注释可以按用户名查找
-- pwd_user=encryptbypassphrase(@de,cast(@pwd_user as nvarchar(max)))
end
go
向表插入数据并加密:
use databaseName
go
--向表内插入加密数据
exec usp_en 'I won''t tell you!','QQ','11223344556','PigHeadWife','斗地主专用' --I won't tell you!为加密字符串
exec usp_en 'I won''t tell you!','QQ','22334455667','SteeMan' --Remarks字段可以不写
go
解密查询:
use databaseName
go
--查询表内数据
exec usp_de 'I won''t tell you!'--,'' ----如果创建解密存储过程的时候增加了@pwd_user变量,取消注释、填写用户名到''中,可以按用户名查找
go
如果没有解密字符串或者字符串错误的查询结果:
以上脚本环境为sqlserver2014.
本人不是计算机、网络编程学院毕业,所学都是自己研习所得。如有错误还请各位大牛给予斧正,将是对我最大的帮助,本人感激不尽,在此先行谢过!