mysql字段加密存储过程_MsSql数据库存储过程加密解密

----------------------------------------------------------------------------------------------------------------------------------------------------------------存储过程、存储函数的加密:WITHENCRYPTIONCREATEproceduredbo.sp_XML_main@table_namenvarchar(260)='',@dirnamenvarchar(20)=''WITHENCRYPTIONasbegin....................................................endgo------------------------------------------------------------------------------------------------------------------------------------------------------------------解密指定存储过程execsp_decrypt'存储过程名'createPROCEDUREsp_decrypt(@objectNamevarchar(50))ASbeginbegintrandeclare@objectname1varchar(100),@orgvarbinvarbinary(8000)declare@sql1nvarchar(4000),@sql2nvarchar(4000),@sql3nvarchar(4000),@sql4nvarchar(4000),@sql5nvarchar(4000),@sql6nvarchar(4000),@sql7nvarchar(4000),@sql8nvarchar(4000),@sql9nvarchar(4000),@sql10nvarchar(4000)DECLARE@OrigSpText1nvarchar(4000),@OrigSpText2nvarchar(4000) ,@OrigSpText3nvarchar(4000),@resultspnvarchar(4000)declare@iint,@statusint,@typevarchar(10),@parentidintdeclare@colidint,@nint,@qint,@jint,@kint,@encryptedint,@numberintselect@type=xtype,@parentid=parent_objfromsysobjectswhereid=object_id(@ObjectName)createtable#temp(numberint,colidint,ctextvarbinary(8000),encryptedint,statusint)insert#tempSELECTnumber,colid,ctext,encrypted,statusFROMsyscommentsWHEREid=object_id(@objectName)select@number=max(number)from#tempset@k=0while@k<=@numberbeginifexists(select1fromsyscommentswhereid=object_id(@objectname)andnumber=@k)beginif@type='P'set@sql1=(casewhen@number>1then'ALTER PROCEDURE'+@objectName+';'+rtrim(@k)+'WITH ENCRYPTION AS'else'ALTER PROCEDURE'+@objectName+'WITH ENCRYPTION AS'end)if@type='TR'set@sql1='ALTER TRIGGER'+@objectname+'ON'+OBJECT_NAME(@parentid)+'WITH ENCRYPTION FOR INSERT AS PRINT 1'if@type='FN'or@type='TF'or@type='IF'set@sql1=(case@typewhen'TF'then'ALTER FUNCTION'+@objectName+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end'when'FN'then'ALTER FUNCTION'+@objectName+'(@a char(1)) returns char(1) with encryption as begin return @a end'when'IF'then'ALTER FUNCTION'+@objectName+'(@a char(1)) returns table with encryption as return select @a as a'end)if@type='V'set@sql1='ALTER VIEW'+@objectname+'WITH ENCRYPTION AS SELECT 1'set@q=len(@sql1)set@sql1=@sql1+REPLICATE('-',4000-@q)select@sql2=REPLICATE('-',4000),@sql3=REPLICATE('-',4000),@sql4=REPLICATE('-',4000),@sql5=REPLICATE('-',4000),@sql6=REPLICATE('-',4000),@sql7=REPLICATE('-',4000),@sql8=REPLICATE('-',4000),@sql9=REPLICATE('-',4000),@sql10=REPLICATE('-',4000)exec(@sql1+@sql2+@sql3+@sql4+@sql5+@sql6+@sql7+@sql8+@sql9+@sql10)endset@k=@k+1endset@k=0while@k<=@numberbeginifexists(select1fromsyscommentswhereid=object_id(@objectname)andnumber=@k)beginselect@colid=max(colid)from#tempwherenumber=@kset@n=1while@n<=@colidbeginselect@OrigSpText1=ctext,@encrypted=encrypted,@status=statusFROM#tempWHEREcolid=@nandnumber=@kSET@OrigSpText3=(SELECTctextFROMsyscommentsWHEREid=object_id(@objectName)andcolid=@nandnumber=@k)if@n=1beginif@type='P'SET@OrigSpText2=(casewhen@number>1then'CREATE PROCEDURE'+@objectName+';'+rtrim(@k)+'WITH ENCRYPTION AS'else'CREATE PROCEDURE'+@objectName+'WITH ENCRYPTION AS'end)if@type='FN'or@type='TF'or@type='IF'--刚才有错改一下SET@OrigSpText2=(case@typewhen'TF'then'CREATE FUNCTION'+@objectName+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end'when'FN'then'CREATE FUNCTION'+@objectName+'(@a char(1)) returns char(1) with encryption as begin return @a end'when'IF'then'CREATE FUNCTION'+@objectName+'(@a char(1)) returns table with encryption as return select @a as a'end)if@type='TR'set@OrigSpText2='CREATE TRIGGER'+@objectname+'ON'+OBJECT_NAME(@parentid)+'WITH ENCRYPTION FOR INSERT AS PRINT 1'if@type='V'set@OrigSpText2='CREATE VIEW'+@objectname+'WITH ENCRYPTION AS SELECT 1'set@q=4000-len(@OrigSpText2)set@OrigSpText2=@OrigSpText2+REPLICATE('-',@q)endelsebeginSET@OrigSpText2=REPLICATE('-',4000)end--start counterSET@i=1--fill temporary variableSET@resultsp=replicate(N'A', (datalength(@OrigSpText1)/2))--loopWHILE@i<=datalength(@OrigSpText1)/2BEGINSET@resultsp=stuff(@resultsp,@i,1,NCHAR(UNICODE(substring(@OrigSpText1,@i,1))^(UNICODE(substring(@OrigSpText2,@i,1))^UNICODE(substring(@OrigSpText3,@i,1)))))SET@i=@i+1ENDset@orgvarbin=cast(@OrigSpText1asvarbinary(8000))set@resultsp=(casewhen@encrypted=1then@resultspelseconvert(nvarchar(4000),casewhen@status&2=2thenuncompress(@orgvarbin)else@orgvarbinend)end)print@resultsp--execute( @resultsp)set@n=@n+1endendset@k=@k+1enddroptable#temprollbacktranendGO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL数据库支持存储过程存储过程是一种预先编写好的程序,可以被多次调用和执行,使得数据库应用程序的开发更加灵活和高效。下面是MySQL数据库存储过程的创建和调用方法: 1. 创建存储过程MySQL数据库中创建存储过程需要使用“CREATE PROCEDURE”语句,语法如下: ``` CREATE PROCEDURE procedure_name([IN | OUT | INOUT] parameter_name parameter_type) BEGIN -- 存储过程体 END; ``` 其中,procedure_name 是存储过程的名称,parameter_name 是存储过程的参数名称,parameter_type 是存储过程的参数类型,可以是任意的MySQL数据类型,例如VARCHAR、INT、DOUBLE等。存储过程体可以包含SQL语句、流程控制语句、变量声明等。例如,下面是一个简单的存储过程: ``` CREATE PROCEDURE get_user_info(IN user_id INT) BEGIN SELECT * FROM users WHERE id = user_id; END; ``` 以上存储过程名为get_user_info,接受一个IN类型的参数user_id,返回对应用户的信息。 2. 调用存储过程MySQL数据库中调用存储过程需要使用“CALL”语句,语法如下: ``` CALL procedure_name(parameter_value); ``` 其中,procedure_name 是存储过程的名称,parameter_value 是存储过程的参数值,可以是任意的MySQL数据类型,例如字符串、整型等。例如,调用上述的get_user_info存储过程可以使用以下语句: ``` CALL get_user_info(1001); ``` 以上语句将会返回id为1001的用户信息。 综上所述,MySQL数据库存储过程的创建和调用方法比较简单,可以提高数据库应用程序的开发效率和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值