sql server创建加密、解密存储过程

    还不熟悉这个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.


本人不是计算机、网络编程学院毕业,所学都是自己研习所得。如有错误还请各位大牛给予斧正,将是对我最大的帮助,本人感激不尽,在此先行谢过!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值