求助各位老师和朋友,关于存储过程加密的问题,请进来帮助下

黑手党维多 2014-07-16 06:58:16
我刚到一个公司,可以说是二次开发,公司有两套系统,乱七八糟,就在这两套系统上开发定制的改动不大的网站,同时和手机开发的数据库共用,我看了看,由于多人经手,很乱,在这个基础上上线了几个系统,系统框架很复杂,除了多层结构以及跟踪时多次拐弯抹角(用到了工厂和接口,所以每次转到定义时要看看是那个类继承了这个接口,找到那个类的方法,几千行代码挺难受),而且满心欢喜的跟踪到数据层,看到了存储过程名字,打开数据库一看,存储过程都是加锁的,弄到本地也不行,看样子是加密了,
我想问,加密的存储过程是不是就不能看了,如果不能看里面的逻辑,外面只提供了参数和返回值,是不是自己也没法扩展了,以后公司接客户自己也只能做定制功能了。。。。??
...全文
214 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
insus 2014-07-20
  • 打赏
  • 举报
回复
Refer below method:


这样就可以看到存储过程了。
  • 打赏
  • 举报
回复
jb有什么重要的商业机密啊,还不让看存储过程了
天空丶蒋 2014-07-17
  • 打赏
  • 举报
回复
呃。。。乱点一下就成了押宝??汗
天空丶蒋 2014-07-17
  • 打赏
  • 举报
回复
liqiucu 2014-07-17
  • 打赏
  • 举报
回复
前面的开发人员留了这么多的心眼@@,sp顶多搞个权限。。无聊蛋疼去加密。。。
黑手党维多 2014-07-17
  • 打赏
  • 举报
回复
引用 11 楼 yangb0803 的回复:
估计你说的存储过程加密,写的时候应该就是下面这样类似的方式创建的: CREATE PROCEDURE encrypt_this WITH ENCRYPTION --加密,在存储过程添加这一语句即可 AS SELECT * FROM user_tb GO sql2000,有解密算法的,我试过,可以解密出来。 把下面这个拷贝,创建成存储过程,然后调用它对加密过程解密。 --解密存储过程 CREATE PROCEDURE sp_decrypt(@objectName varchar(50)) AS begin set nocount on --CSDN:j9988 copyright:2004.04.15 --破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器 begin tran declare @objectname1 varchar(100),@orgvarbin varbinary(8000) declare @sql1 nvarchar(4000),@sql2 varchar(8000),@sql3 nvarchar(4000),@sql4 nvarchar(4000) DECLARE @OrigSpText1 nvarchar(4000), @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000) declare @i int,@status int,@type varchar(10),@parentid int declare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int select @type=xtype,@parentid=parent_obj from sysobjects where id=object_id(@ObjectName) create table #temp(number int,colid int,ctext varbinary(8000),encrypted int,status int) insert #temp SELECT number,colid,ctext,encrypted,status FROM syscomments WHERE id = object_id(@objectName) select @number=max(number) from #temp set @k=0 while @k<=@number begin if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k) begin if @type='P' set @sql1=(case when @number>1 then 'ALTER PROCEDURE '+ @objectName +';'+rtrim(@k)+' WITH ENCRYPTION AS ' else 'ALTER PROCEDURE '+ @objectName+' WITH ENCRYPTION AS ' end) if @type='TR' begin declare @parent_obj varchar(255),@tr_parent_xtype varchar(10) select @parent_obj=parent_obj from sysobjects where id=object_id(@objectName) select @tr_parent_xtype=xtype from sysobjects where id=@parent_obj if @tr_parent_xtype='V' begin set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION INSTERD OF INSERT AS PRINT 1 ' end else begin set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 ' end end if @type='FN' or @type='TF' or @type='IF' set @sql1=(case @type when '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 as f' set @q=len(@sql1) set @sql1=@sql1+REPLICATE('-',4000-@q) select @sql2=REPLICATE('-',8000) set @sql3='exec(@sql1' select @colid=max(colid) from #temp where number=@k set @n=1 while @n<=CEILING(1.0*(@colid-1)/2) and len(@sQL3)<=3996 begin set @sql3=@sql3+'+@' set @n=@n+1 end set @sql3=@sql3+')' exec sp_executesql @sql3,N'@Sql1 nvarchar(4000),@ varchar(8000)',@sql1=@sql1,@=@sql2 end set @k=@k+1 end set @k=0 while @k<=@number begin if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k) begin select @colid=max(colid) from #temp where number=@k set @n=1 while @n<=@colid begin select @OrigSpText1=ctext,@encrypted=encrypted,@status=status FROM #temp WHERE colid=@n and number=@k SET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(@objectName) and colid=@n and number=@k) if @n=1 begin if @type='P' SET @OrigSpText2=(case when @number>1 then '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 @type when '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' begin if @tr_parent_xtype='V' begin set @OrigSpText2='CREATE TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION INSTEAD OF INSERT AS PRINT 1 ' end else begin set @OrigSpText2='CREATE TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 ' end end if @type='V' set @OrigSpText2='CREATE VIEW '+@objectname+' WITH ENCRYPTION AS SELECT 1 as f' set @q=4000-len(@OrigSpText2) set @OrigSpText2=@OrigSpText2+REPLICATE('-',@q) end else begin SET @OrigSpText2=REPLICATE('-', 4000) end SET @i=1 SET @resultsp = replicate(N'A', (datalength(@OrigSpText1) / 2)) WHILE @i<=datalength(@OrigSpText1)/2 BEGIN SET @resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE(substring(@OrigSpText1, @i, 1)) ^ (UNICODE(substring(@OrigSpText2, @i, 1)) ^ UNICODE(substring(@OrigSpText3, @i, 1))))) SET @i=@i+1 END set @orgvarbin=cast(@OrigSpText1 as varbinary(8000)) set @resultsp=(case when @encrypted=1 then @resultsp else convert(nvarchar(4000),case when @status&2=2 then uncompress(@orgvarbin) else @orgvarbin end) end) print @resultsp set @n=@n+1 end end set @k=@k+1 end drop table #temp rollback tran end 其上版本,我没试过。 http://blog.csdn.net/thecityofsky/article/details/6796939 你可以看看这里,看有没有你需要的。
很感谢,估计是这种,也谢谢楼上各位回复,我会照着各位方法试试的,我们公司的电脑是一体机,估计有个总的后台管理
道玄希言 2014-07-16
  • 打赏
  • 举报
回复
估计你说的存储过程加密,写的时候应该就是下面这样类似的方式创建的: CREATE PROCEDURE encrypt_this WITH ENCRYPTION --加密,在存储过程添加这一语句即可 AS SELECT * FROM user_tb GO sql2000,有解密算法的,我试过,可以解密出来。 把下面这个拷贝,创建成存储过程,然后调用它对加密过程解密。 --解密存储过程 CREATE PROCEDURE sp_decrypt(@objectName varchar(50)) AS begin set nocount on --CSDN:j9988 copyright:2004.04.15 --破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器 begin tran declare @objectname1 varchar(100),@orgvarbin varbinary(8000) declare @sql1 nvarchar(4000),@sql2 varchar(8000),@sql3 nvarchar(4000),@sql4 nvarchar(4000) DECLARE @OrigSpText1 nvarchar(4000), @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000) declare @i int,@status int,@type varchar(10),@parentid int declare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int select @type=xtype,@parentid=parent_obj from sysobjects where id=object_id(@ObjectName) create table #temp(number int,colid int,ctext varbinary(8000),encrypted int,status int) insert #temp SELECT number,colid,ctext,encrypted,status FROM syscomments WHERE id = object_id(@objectName) select @number=max(number) from #temp set @k=0 while @k<=@number begin if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k) begin if @type='P' set @sql1=(case when @number>1 then 'ALTER PROCEDURE '+ @objectName +';'+rtrim(@k)+' WITH ENCRYPTION AS ' else 'ALTER PROCEDURE '+ @objectName+' WITH ENCRYPTION AS ' end) if @type='TR' begin declare @parent_obj varchar(255),@tr_parent_xtype varchar(10) select @parent_obj=parent_obj from sysobjects where id=object_id(@objectName) select @tr_parent_xtype=xtype from sysobjects where id=@parent_obj if @tr_parent_xtype='V' begin set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION INSTERD OF INSERT AS PRINT 1 ' end else begin set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 ' end end if @type='FN' or @type='TF' or @type='IF' set @sql1=(case @type when '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 as f' set @q=len(@sql1) set @sql1=@sql1+REPLICATE('-',4000-@q) select @sql2=REPLICATE('-',8000) set @sql3='exec(@sql1' select @colid=max(colid) from #temp where number=@k set @n=1 while @n<=CEILING(1.0*(@colid-1)/2) and len(@sQL3)<=3996 begin set @sql3=@sql3+'+@' set @n=@n+1 end set @sql3=@sql3+')' exec sp_executesql @sql3,N'@Sql1 nvarchar(4000),@ varchar(8000)',@sql1=@sql1,@=@sql2 end set @k=@k+1 end set @k=0 while @k<=@number begin if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k) begin select @colid=max(colid) from #temp where number=@k set @n=1 while @n<=@colid begin select @OrigSpText1=ctext,@encrypted=encrypted,@status=status FROM #temp WHERE colid=@n and number=@k SET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(@objectName) and colid=@n and number=@k) if @n=1 begin if @type='P' SET @OrigSpText2=(case when @number>1 then '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 @type when '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' begin if @tr_parent_xtype='V' begin set @OrigSpText2='CREATE TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION INSTEAD OF INSERT AS PRINT 1 ' end else begin set @OrigSpText2='CREATE TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 ' end end if @type='V' set @OrigSpText2='CREATE VIEW '+@objectname+' WITH ENCRYPTION AS SELECT 1 as f' set @q=4000-len(@OrigSpText2) set @OrigSpText2=@OrigSpText2+REPLICATE('-',@q) end else begin SET @OrigSpText2=REPLICATE('-', 4000) end SET @i=1 SET @resultsp = replicate(N'A', (datalength(@OrigSpText1) / 2)) WHILE @i<=datalength(@OrigSpText1)/2 BEGIN SET @resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE(substring(@OrigSpText1, @i, 1)) ^ (UNICODE(substring(@OrigSpText2, @i, 1)) ^ UNICODE(substring(@OrigSpText3, @i, 1))))) SET @i=@i+1 END set @orgvarbin=cast(@OrigSpText1 as varbinary(8000)) set @resultsp=(case when @encrypted=1 then @resultsp else convert(nvarchar(4000),case when @status&2=2 then uncompress(@orgvarbin) else @orgvarbin end) end) print @resultsp set @n=@n+1 end end set @k=@k+1 end drop table #temp rollback tran end 其上版本,我没试过。 http://blog.csdn.net/thecityofsky/article/details/6796939 你可以看看这里,看有没有你需要的。
wanghui0380 2014-07-16
  • 打赏
  • 举报
回复
有解密工具,不过我忘了是什么了,基本上没遇到这么无聊的公司,毕竟用存储过程就是方便后面修改,你加密了自己都不能现场修改,这个就无聊了点
凹加凸等于啥 2014-07-16
  • 打赏
  • 举报
回复
安全性--登录名--选择你登陆的用户右键--属性--用户映射--选择你要访问的库--选择数据库角色成员身份--勾上public 就可以了
於黾 2014-07-16
  • 打赏
  • 举报
回复
引用 7 楼 wanshutao 的回复:
[quote=引用 6 楼 a475372067 的回复:] 数据库右键--属性--权限--为你登陆用户设置授权
右键,权限,然后选择用户,全部打钩了,还是不行[/quote] 如果你自身用户不是DBA,你打钩也只能打权限范围内的 建议还是先用DBA用户登录,然后将你的用户设置为DBA
黑手党维多 2014-07-16
  • 打赏
  • 举报
回复
引用 6 楼 a475372067 的回复:
数据库右键--属性--权限--为你登陆用户设置授权
右键,权限,然后选择用户,全部打钩了,还是不行
凹加凸等于啥 2014-07-16
  • 打赏
  • 举报
回复
数据库右键--属性--权限--为你登陆用户设置授权
凹加凸等于啥 2014-07-16
  • 打赏
  • 举报
回复
前面一把锁,不是加密,是控制了访问权限
Ny-6000 2014-07-16
  • 打赏
  • 举报
回复
加密,看算法了,不可逆的话,估计很难,很难办得到.....
myhope88 2014-07-16
  • 打赏
  • 举报
回复
应该可以解密的吧,问一下开发的人就清楚了嘛
黑手党维多 2014-07-16
  • 打赏
  • 举报
回复
引用 1 楼 findcaiyzh 的回复:
解密是肯定能解密的,要不怎么执行呢。 不过得先搞清楚怎么加密的,用sql shield还是啥。
不清楚是什么加密,反正存储过程前面加了很多黄色的小锁,加密应该也能执行吧,大神我问下怎么看加密啊,还有有米有解密工具或者反编译工具神马的,否则只能看见存储过程的参数和返回值,只能调用不能修改,惨歪歪。。。。。
宝_爸 2014-07-16
  • 打赏
  • 举报
回复
解密是肯定能解密的,要不怎么执行呢。 不过得先搞清楚怎么加密的,用sql shield还是啥。

62,050

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧