用于数据库加密的存储过程
2009-09-03 15:21
337 查看
实现了一个用于数据库加密的存储过程。密钥采用一个byte 的tinyint类型,进行异或。程序再运行一遍即为解密过程。
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [dbo].[encrydata] -- Add the parameters for the stored procedure here AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here if not exists(select * from sysobjects where type ='U' and name='post_trial') create table post_trial(PostHead varchar(2048) null,nCertificate varchar(2) null,Name varchar(30)null,NetIP varchar(60) null); else drop table post_trial; create table post_trial(PostHead varchar(2048) null,nCertificate varchar(2) null,Name varchar(30)null,NetIP varchar(60) null); --end--endif insert into post_trial(PostHead,nCertificate,Name,NetIP) select top 50000 PostHead,Certificate,Name,NetIP from Post_history01; --set @ascl=cast(floor(rand(datepart(ms,getdate())*1000)*255) as varbinary(8)); --print 'random ascl '+ cast(@ascl as varchar(4)); -- declare @tablename varchar(100); --set @tablename = 'PW'+cast(datepart(hour,getdate())as varchar(32))+cast(datepart(minute,getdate())as varchar(32))+cast(datepart(second,getdate())as varchar(32)); --print 'random table '+@tablename; --exec ('select top 100 into ' + @tablename +' from '+@table); --exec ('alter table '+ @tablename +' alter column PostHead image') ; set @tablename='post_trial'; set @table = @tablename; if not exists(select 1 from syscolumns where id= (select id from sysobjects where type='U' and name=@table) and name='rownum') begin select @rownum='alter table '+@table+' add rownum bigint identity(1,1)'; print @rownum; exec(@rownum); end--end if --exec('select '+@count+'=count(*) from '+@table) ; select @sql=N'select @count=count(*) from '+ @table; print @sql exec sp_executesql @sql, N'@count bigint out ,@table varchar(50)',@count out,@table print @count if @count>0 begin set @j=1; while @count >= @j begin set @idx=cast(@j as varchar(10)); select @sql=N'select @orgistr=Name from '+@table +N' where rownum='+@idx; print @sql exec sp_executesql @sql, N'@orgistr varchar(8000) out,@table varchar(50),@idx varchar(10)',@orgistr out,@table,@idx; --exec(@sql); print 'org str '+@orgistr; set @i=len(@orgistr); print @i; while @i>0 begin set @strchar=cast(substring(@orgistr,@i,1) as varbinary(8)); select @encrystr= nchar(unicode(substring(@orgistr,@i,1))^@c)+@encrystr; set @i=@i-1; end--end while print 'encry str '+@encrystr; print 'update '+@table+' set Name='''+@encrystr+''' where rownum= '+@idx; exec('update '+@table+' set Name= '''+@encrystr+''' where rownum= '+@idx); set @encrystr=''; set @j=@j+1; end--end while end --end if --exec('select * from '+@table ); /*select @i=len(@encrystr),@dencrystr=''; print @i; while @i>0 begin select @dencrystr=nchar(unicode(substring(@encrystr,@i,1))^@c)+@dencrystr ,@i=@i-1 end print @dencrystr;*/ END
相关文章推荐
- MsSql数据库存储过程加密解密
- 加密当前数据库的所有存储过程。
- 用于层次结构数据库批量导入(Insert)的存储过程
- 用于关闭数据库链接的存储过程
- MS 数据库存储过程加密解密
- MsSql数据库存储过程加密解密
- 存储过程加密针对整个数据库
- JSP数据库操作例程-存储过程
- 数据库--存储过程
- oracle数据库的存储过程
- 将java的集合转换为数据库集合类型 解决weblogic调用存储过程的时候,返回值乱码问题
- 数据库笔试面试42——SQL标准中用来调用存储过程的
- vc6.0链接数据库调用存储过程
- 通过SQL存储过程删除过期的数据库Bak备份文件
- 数据库存储过程:百度摘要
- sql server 2005/2008 加密存储过程解密脚本/软件推荐
- 查看MSSQL 加密存储过程
- 利用Java存储过程简化数据库操作
- 用于在存储过程中 根据@@error 判断是否要提交事务和提示操作是否成功,便于异常处理
- 数据库开发必看 -- 用索引优化SQL,开发优秀的分页存储过程(一)