添加密码加密SQL存储过程的函数(原创)

作者:彼岸花开 | 创建时间: 2023-06-10
很多时候我们写的SQL数据库存储过程是以明文的方式保存在SQL中的,用户可以直接用一条sp_helptext 命令就可以看到你的存储过程内容,里面的逻辑一清二楚,知识保护也就相当脆弱!为此,我特地写了一个数据库的加密和解密函数。通过密码加密...
添加密码加密SQL存储过程的函数(原创)

操作方法

/*加密函數 ALTER function [dbo].[encode](@password varchar(16),@sqltxt varchar(4000)) returns varchar(4000) as begin declare @i integer=0,@j integer=0,@returns varchar(4000),@char char,@lensql integer,@lenpwd integer select @lenpwd=LEN(@password),@lensql=LEN(@sqltxt),@returns='',@char='',@i=1,@j=1 while @j<=@lensql begin select @i=1,@char=char(CASE @i%2 WHEN 1 THEN ascii(SUBSTRING(@sqltxt,@j,1))^ascii(SUBSTRING(@password,@i,1))+1 ELSE ascii(SUBSTRING(@sqltxt,@j,1))^ascii(SUBSTRING(@password,@i,1))-1 end) select @i=@i+1 while @i<=@lenpwd begin set @char=char(CASE @i%2 WHEN 1 THEN ascii(@char)^ascii(SUBSTRING(@password,@i,1))+1 ELSE ascii(@char)^ascii(SUBSTRING(@password,@i,1))-1 end) select @i=@i+1 end select @j=@j+1,@returns=@returns+@char end return @returns end --*/ /*解密函數 ALTER function [dbo].[decode](@password varchar(16),@sqltxt varchar(4000)) returns varchar(4000) as begin declare @i integer=0,@j integer=0,@returns varchar(4000),@char char,@lensql integer,@lenpwd integer select @lenpwd=LEN(@password),@lensql=LEN(@sqltxt),@returns='',@char='',@j=1 while @j<=@lensql BEGIN select @i=@lenpwd,@char=char(CASE @i%2 WHEN 1 THEN (ascii(SUBSTRING(@sqltxt,@j,1))-1)^ascii(SUBSTRING(@password,@i,1)) ELSE (ascii(SUBSTRING(@sqltxt,@j,1))+1)^ascii(SUBSTRING(@password,@i,1)) end) select @i=@i-1 while @i>0 begin select @char=char(CASE @i%2 WHEN 1 THEN (ascii(@char)-1)^ascii(SUBSTRING(@password,@i,1)) ELSE (ascii(@char)+1)^ascii(SUBSTRING(@password,@i,1)) end) select @i=@i-1 end select @j=@j+1,@returns=@returns+@char end return @returns end --*/ --測試 declare @sql varchar(4000) select @sql=dbo.encode('a','select top 3 * from employees') print @sql print dbo.decode('a',@sql)

温馨提示

加密密碼及被加密語句長短不能小于1且當中不能有中文,被加密语句请不要有单引号,因为单引号在数据库中是一个特殊的符号,存储过程尽量多用变量形式!
点击展开全文

更多推荐