积累进程、存款和储蓄函数的加密:WITH ENCLX570YPTION

数据库: 30万条,有ID列但无主键,在要搜索的“分类”字段上建有非聚集索引
过程T-SQL: 复制代码 代码如下: /*
用户自定义函数:执行时间在1150-1200毫秒左右 CREATE FUNCTION
[dbo].[gethl] (@types nvarchar(4)) RETURNS table AS return select
书名 from 图书三十万条 Where 分类 Like ‘%’+@types+’%’ 存储过程: CREATE
PROCEDURE [dbo].[getfl](@typen nvarchar(4)) AS select 书名 from
图书三十万条 Where 分类 Like ‘%’+@typen+’%’ */ 复制代码 代码如下: declare @a datetime,@b
nvarchar(4) set @a=getDate() select 书名 from 图书三十万条 Where 分类
Like ‘%医学%’
–“分类”列有非聚集索引,比聚集索引1150快一点,差不多执行时间在1100左右
— select 书名 from gethl(‘医学’)
–使用用户自定义函数,效率和建立聚集索引一样,还稍慢一点 在1150-1200 —
Execute getfl ‘医学’ –调用存储过程不能用括号包含参数 Execute
getfl(‘医学’) — select 书名 from VIEW1 –视图 print ‘运行时间: print
datediff(ms,@a,getDate()) 结论:
1、以上各种使用直接查询、函数、视图、存储过程性能都差不多;
2、在这种文本字段,非聚集比聚集索引效果好。
比这些更好的方法是,在另外一个表上建立相应的检索ID,会更快!

存储过程、存储函数的加密:WITH ENCRYPTION
<!–[if !supportLineBreakNewLine]–>
<!–[endif]–>

 

CREATE procedure dbo.sp_XML_main

  1图片 1if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_decrypt]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)
  2图片 2drop procedure [dbo].[sp_decrypt]
  3图片 3GO
  4图片 4
  5图片 5图片 6/**//*–破解函数,过程,触发器,视图.仅限于SQLSERVER2000
  6图片 7
  7图片 8–作者:J9988–*/
  8图片 9图片 10/**//*–调用示例
  9图片 11
 10图片 12    –解密指定存储过程
 11图片 13    exec sp_decrypt ‘AppSP_test’
 12图片 14
 13图片 15    –对所有的存储过程解密
 14图片 16    declare tb cursor for
 15图片 17    select name from sysobjects where xtype=’P’ and status>0 and name<>’sp_decrypt’
 16图片 18    
 17图片 19    declare @name sysname
 18图片 20    open tb
 19图片 21    fetch next from tb into @name
 20图片 22    while @@fetch_status=0
 21图片 23    begin
 22图片 24        print ‘/*——-存储过程 [‘+@name+’] ———–*/’
 23图片 25        exec sp_decrypt @name
 24图片 26        fetch next from tb into @name
 25图片 27    end
 26图片 28    close tb
 27图片 29    deallocate tb
 28图片 30–*/
 29图片 31
 30图片 32if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SP_DECRYPT]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)
 31图片 33    drop procedure [dbo].[SP_DECRYPT]
 32图片 34GO
 33图片 35
 34图片 36CREATE  PROCEDURE sp_decrypt(@objectName varchar(50))
 35图片 37AS
 36图片 38begin
 37图片 39set nocount on
 38图片 40–CSDN:j9988 copyright:2004.04.15 
 39图片 41–V3.1 
 40图片 42–破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器
 41图片 43–修正上一版视图触发器不能正确解密错误
 42图片 44–发现有错,请E_MAIL:CSDNj9988@tom.com
 43图片 45begin tran
 44图片 46declare @objectname1 varchar(100),@orgvarbin varbinary(8000)
 45图片 47declare @sql1 nvarchar(4000),@sql2 varchar(8000),@sql3 nvarchar(4000),@sql4 nvarchar(4000)
 46图片 48DECLARE  @OrigSpText1 nvarchar(4000),  @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000)
 47图片 49declare  @i int,@status int,@type varchar(10),@parentid int
 48图片 50declare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int
 49图片 51select @type=xtype,@parentid=parent_obj from sysobjects where id=object_id(@ObjectName)
 50图片 52
 51图片 53create table  #temp(number int,colid int,ctext varbinary(8000),encrypted int,status int)
 52图片 54insert #temp SELECT number,colid,ctext,encrypted,status FROM syscomments  WHERE id = object_id(@objectName)
 53图片 55select @number=max(number) from #temp
 54图片 56set @k=0
 55图片 57
 56图片 58while @k<=@number 
 57图片 59begin
 58图片 60if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k)
 59图片 61begin
 60图片 62if @type=’P’
 61图片 63set @sql1=(case when @number>1 then ‘ALTER PROCEDURE ‘+ @objectName +’;’+rtrim(@k)+’ WITH ENCRYPTION AS ‘
 62图片 64                          else ‘ALTER PROCEDURE ‘+ @objectName+’ WITH ENCRYPTION AS ‘
 63图片 65                          end)
 64图片 66
 65图片 67if @type=’TR’
 66图片 68begin
 67图片 69declare @parent_obj varchar(255),@tr_parent_xtype varchar(10)
 68图片 70select @parent_obj=parent_obj from sysobjects where id=object_id(@objectName)
 69图片 71select @tr_parent_xtype=xtype from sysobjects where id=@parent_obj
 70图片 72if @tr_parent_xtype=’V’
 71图片 73begin
 72图片 74set @sql1=’ALTER TRIGGER ‘+@objectname+’ ON ‘+OBJECT_NAME(@parentid)+’ WITH ENCRYPTION INSTERD OF INSERT AS PRINT 1 ‘
 73图片 75end
 74图片 76else
 75图片 77begin
 76图片 78set @sql1=’ALTER TRIGGER ‘+@objectname+’ ON ‘+OBJECT_NAME(@parentid)+’ WITH ENCRYPTION FOR INSERT AS PRINT 1 ‘
 77图片 79end
 78图片 80
 79图片 81end
 80图片 82if @type=’FN’ or @type=’TF’ or @type=’IF’
 81图片 83set @sql1=(case @type when ‘TF’ then 
 82图片 84‘ALTER FUNCTION ‘+ @objectName+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end ‘
 83图片 85when ‘FN’ then
 84图片 86‘ALTER FUNCTION ‘+ @objectName+'(@a char(1)) returns char(1) with encryption as begin return @a end’
 85图片 87when ‘IF’ then
 86图片 88‘ALTER FUNCTION ‘+ @objectName+'(@a char(1)) returns table with encryption as return select @a as a’
 87图片 89end)
 88图片 90
 89图片 91if @type=’V’
 90图片 92set @sql1=’ALTER VIEW ‘+@objectname+’ WITH ENCRYPTION AS SELECT 1 as f’
 91图片 93
 92图片 94set @q=len(@sql1)
 93图片 95set @sql1=@sql1+REPLICATE(‘-‘,4000-@q)
 94图片 96select @sql2=REPLICATE(‘-‘,8000)
 95图片 97set @sql3=’exec(@sql1′
 96图片 98select @colid=max(colid) from #temp where number=@k 
 97图片 99set @n=1
 98图片 100while @n<=CEILING(1.0*(@colid-1)/2) and len(@sQL3)<=3996
 99图片 101begin 
100图片 102set @sql3=@sql3+’+@’
101图片 103set @n=@n+1
102图片 104end
103图片 105set @sql3=@sql3+’)’
104图片 106exec sp_executesql @sql3,N’@sql1 nvarchar(4000),@ varchar(8000)’,@sql1=@sql1,@=@sql2
105图片 107
106图片 108end
107图片 109set @k=@k+1
108图片 110end
109图片 111
110图片 112set @k=0
111图片 113while @k<=@number 
112图片 114begin
113图片 115
114图片 116if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k)
115图片 117begin
116图片 118select @colid=max(colid) from #temp where number=@k 
117图片 119set @n=1
118图片 120
119图片 121while @n<=@colid
120图片 122begin
121图片 123select @OrigSpText1=ctext,@encrypted=encrypted,@status=status FROM #temp  WHERE colid=@n and number=@k
122图片 124
123图片 125SET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(@objectName) and colid=@n and number=@k)
124图片 126if @n=1
125图片 127begin
126图片 128if @type=’P’
127图片 129SET @OrigSpText2=(case when @number>1 then ‘CREATE PROCEDURE ‘+ @objectName +’;’+rtrim(@k)+’ WITH ENCRYPTION AS ‘
128图片 130                       else ‘CREATE PROCEDURE ‘+ @objectName +’ WITH ENCRYPTION AS ‘
129图片 131                       end)
130图片 132
131图片 133
132图片 134if @type=’FN’ or @type=’TF’ or @type=’IF’
133图片 135SET @OrigSpText2=(case @type when ‘TF’ then 
134图片 136‘CREATE FUNCTION ‘+ @objectName+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end ‘
135图片 137when ‘FN’ then
136图片 138‘CREATE FUNCTION ‘+ @objectName+'(@a char(1)) returns char(1) with encryption as begin return @a end’
137图片 139when ‘IF’ then
138图片 140‘CREATE FUNCTION ‘+ @objectName+'(@a char(1)) returns table with encryption as return select @a as a’
139图片 141end)
140图片 142
141图片 143if @type=’TR’ 
142图片 144begin
143图片 145
144图片 146if @tr_parent_xtype=’V’
145图片 147begin
146图片 148set @OrigSpText2=’CREATE TRIGGER ‘+@objectname+’ ON ‘+OBJECT_NAME(@parentid)+’ WITH ENCRYPTION INSTEAD OF INSERT AS PRINT 1 ‘
147图片 149end
148图片 150else
149图片 151begin
150图片 152set @OrigSpText2=’CREATE TRIGGER ‘+@objectname+’ ON ‘+OBJECT_NAME(@parentid)+’ WITH ENCRYPTION FOR INSERT AS PRINT 1 ‘
151图片 153end
152图片 154
153图片 155end
154图片 156
155图片 157if @type=’V’
156图片 158set @OrigSpText2=’CREATE VIEW ‘+@objectname+’ WITH ENCRYPTION AS SELECT 1 as f’
157图片 159
158图片 160set @q=4000-len(@OrigSpText2)
159图片 161set @OrigSpText2=@OrigSpText2+REPLICATE(‘-‘,@q)
160图片 162end
161图片 163else
162图片 164begin
163图片 165SET @OrigSpText2=REPLICATE(‘-‘, 4000)
164图片 166end
165图片 167SET @i=1
166图片 168
167图片 169SET @resultsp = replicate(N’A’, (datalength(@OrigSpText1) / 2))
168图片 170
169图片 171WHILE @i<=datalength(@OrigSpText1)/2
170图片 172BEGIN
171图片 173
172图片 174SET @resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE(substring(@OrigSpText1, @i, 1)) ^
173图片 175                                (UNICODE(substring(@OrigSpText2, @i, 1)) ^
174图片 176                                UNICODE(substring(@OrigSpText3, @i, 1)))))
175图片 177    SET @i=@i+1
176图片 178END
177图片 179set @orgvarbin=cast(@OrigSpText1 as varbinary(8000))
178图片 180set @resultsp=(case when @encrypted=1 
179图片 181                    then @resultsp 
180图片 182                    else convert(nvarchar(4000),case when @status&2=2 then uncompress(@orgvarbin) else @orgvarbin end)
181图片 183               end)
182图片 184print @resultsp
183图片 185
184图片 186set @n=@n+1
185图片 187
186图片 188end
187图片 189
188图片 190end
189图片 191set @k=@k+1
190图片 192end
191图片 193
192图片 194drop table #temp
193图片 195rollback tran
194图片 196end
195图片 197

@table_name nvarchar(260)=”,

@dirname nvarchar(20)=”

WITH ENCRYPTION

as

begin

…………………………………………….

end

go
 

 

存储过程、存储函数的解密(以下是一位绝世高人编写的代码)

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[sp_decrypt]’) and OBJECTPROPERTY(id,
N’IsProcedure’) = 1)

drop procedure [dbo].[sp_decrypt]

GO

 

/*–破解函数,过程,触发器,视图.仅限于SQLSERVER2000

 

–作者:J9988–*/

/*–调用示例

 

    –解密指定存储过程

    exec sp_decrypt ‘AppSP_test’

 

    –对所有的存储过程解密

    declare tb cursor for

    select name from sysobjects where xtype=’P’ and status>0 and
name<>’sp_decrypt’

   

    declare @name sysname

    open tb

    fetch next from tb into @name

    while @@fetch_status=0

    begin

        print ‘/*——-存储过程 [‘+@name+’] ———–*/’

        exec sp_decrypt @name

        fetch next from tb into @name

    end

    close tb

    deallocate tb

–*/

 

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[SP_DECRYPT]’) and OBJECTPROPERTY(id,
N’IsProcedure’) = 1)

    drop procedure [dbo].[SP_DECRYPT]

GO

 

CREATE  PROCEDURE sp_decrypt(@objectName varchar(50))

AS

begin

set nocount on

–CSDN:j9988 copyright:2004.04.15

–V3.1

–破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器

–修正上一版视图触发器不能正确解密错误

–发现有错,请E_MAIL:CSDNj9988@tom.com

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