تشفير الإجراءات المخزنة والوظائف المخزنة: مع التشفير
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
إنشاء الإجراء dbo.sp_XML_main
@table_name nvarchar(260)='',
@dirname nvarchar(20)=
''
بالتشفير
كبداية
............ ........
end
go
فك تشفير الإجراءات المخزنة والوظائف المخزنة
إن وجدت (اختر * من dbo.sysobjects حيث id = object_id(N'[dbo].[sp_decrypt]') وOBJECTPROPERTY(id, N'IsProcedure ') = 1)
إجراء الإسقاط [dbo].[sp_decrypt]
GO
/*--وظائف الكراك، والإجراءات، والمشغلات، وطرق العرض فقط لـ SQLSERVER2000
--المؤلف: J9988-- جميع الحقوق محفوظة*/
/*--استدعاء المثال
-. - فك تشفير الإجراء المخزن المحدد
exec sp_decrypt 'AppSP_test'
- فك تشفير جميع الإجراءات المخزنة
يعلن مؤشر tb
لاسم محدد من كائنات النظام حيث xtype = 'P' والحالة> 0 والاسم <> 'sp_decrypt'
أعلن @name sysname،
افتح tb،
جلب التالي من tb إلى @name
بينما @@fetch_status=0
يبدأ
الطباعة '/*-------الإجراء المخزن['+@name+'] ---------- -*/'
exec sp_decrypt @name
جلب التالي من تيرابايت إلى @name
end
أغلق تيرابايت
إلغاء تخصيص تيرابايت
--*/
إذا كان موجودًا (اختر * من dbo.sysobjects حيث id = object_id(N'[dbo].[SP_DECRYPT]') وOBJECTPROPERTY(id, N'IsProcedure') = 1)
إجراء الإفلات [dbo].[SP_DECRYPT]
انتقل إلى
إنشاء
الإجراءsp_decrypt(@objectName varchar(50))
AS
تبدأ في
تعيين nocount على
- البايتات المتشققة غير مقيدة، تنطبق على الإجراءات والوظائف وطرق العرض والمشغلات المخزنة في SQLSERVER2000
- تم تصحيح
الخطأ المتمثل في عدم إمكانية فك تشفير مشغلات الإصدار السابق من العرض بشكل صحيح -
إذا وجدت خطأ، يرجى إرسال بريد إلكتروني إلى: [email protected]
بدء النقل
أعلن @objectname1 varchar(100)،@orgvarbin varbinary(8000)
أعلن @sql1 nvarchar(4000)،@sql2 varchar(8000)،@sql3 nvarchar(4000)،@sql4 nvarchar(4000)
أعلن @OrigSpText1 nvarchar(4000
))، @OrigSpText2 nvarchar(4000)، @OrigSpText3 nvarchar(4000)، @resultsp nvarchar(4000)
أعلن @i int،@status int،@type varchar(10)،@parentid int
أعلن @colid int،@n int، @q int،@j int،@k int،@encrypted int،@number int
حدد @type=xtype،@parentid=parent_obj من sysobjects حيث id=object_id(@ObjectName)
إنشاء جدول #temp(number int,colid int,ctext varbinary(8000),encrypted int,status int)
إدراج #temp SELECT number,colid,ctext,encrypted,status FROM syscomments WHERE id = object_id(@objectName)
حدد @number= الحد الأقصى (الرقم) من #temp
set @k = 0
يبدأ
@k< =@numberإذا كان موجودًا (اختر 1 من syscomments حيث يبدأ id=object_id(@objectname) و number=@k )
إذاتم
تعيين@type='P'
@sql1=(الحالة عندما @number>1 ثم ' تغيير الإجراء '+ @objectName +';'+rtrim(@k)+' بالتشفير كـ '
آخر ' تغيير الإجراء '+ @objectName+' بالتشفير كـ '
النهاية)
بدأ
@type='TR'
بإعلان @parent_obj varchar(255)،@tr_parent_xtype varchar(10)
حدد @parent_obj=parent_obj من sysobjects حيث id=object_id(@objectName)
حدد @tr_parent_xtype=xtype من sysobjects حيث id=@parent_obj
إذا @tr_parent_xtype='V'
تبدأ
المجموعة @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' مع تشفير INSTERD OF INSERT AS PRINT 1 '
نهاية
وإلا
تبدأ
المجموعة @sql1='ALTER TRIGGER '+ @objectname+' ON '+OBJECT_NAME(@parentid)+' مع التشفير لـ INSERT AS PRINT 1 '
end
end
إذا تم تعيين @type='FN' أو @type='TF' أو @type='IF'
@sql1=(case @type عند 'TF' ثم
'ALTER FUNCTION'+ @objectName+'(@a char(1)) يُرجع @b table(a varchar(10)) مع التشفير عند بدء الإدخال @b حدد @a return end '
عندما 'FN ' ثم يقوم
'ALTER FUNCTION'+ @objectName+'(@a char(1)) بإرجاع char(1) مع التشفير كبداية وإرجاع @a end'
عندما 'IF' ثم
'ALTER FUNCTION'+ @objectName+'(@a char( 1)) إرجاع الجدول مع التشفير كإرجاع حدد @a كنهاية
)
إذا قام @type='V'
بتعيين @sql1='ALTER VIEW '+@objectname+' مع التشفير AS SELECT 1 كـ f'
تعيين @q=len(@sql1)
تعيين @sql1=@sql1+REPLICATE('-',4000-@q)
حدد @sql2=REPLICATE('-',8000)
تعيين @sql3='exec(@sql1'
حدد @colid=max(colid) من #temp حيث يتم ضبط number=@k
على @n=1
بينما يبدأ @n<=CEILING(1.0*(@colid-1)/2) وlen(@sQL3)<=3996
المجموعة
@ sql3=@sql3+'+@'
set @n=@n+1
end
set @sql3=@sql3+')'
exec sp_executesql @sql3,N'@sql1 nvarchar(4000),@ varchar(8000)',@sql1= @sql1,@=@sql2
نهاية
المجموعة @k=@k+1
النهاية
اضبط @k=0
يبدأ
@k< =@number
إذا كان موجودًا (حدد 1 من syscomments حيث يبدأ id=object_id(@objectname) و number=@k )
حدد
@colid=max(colid) من #temp حيث يتم تعيين number=@k
@n=1
بينما يبدأ @n< =@colid
في
تحديد @OrigSpText1=ctext،@encrypted=encrypted،@status=status FROM #temp WHERE colid=@n و number=@k
SET @OrigSpText3=(حدد ctext FROM syscomments WHERE id=object_id(@objectName) و colid=@n و number=@k )
بدأ
@n=1
إذا @type='P'
SET @OrigSpText2=(الحالة عند @number >1 ثم "إنشاء إجراء" + @objectName +';'+rtrim(@k)+' مع التشفير كـ "
إلا" إنشاء الإجراء '+ @objectName +' مع التشفير كـ '
نهاية)
إذا @type='FN' أو @type='TF' أو @type='IF'
SET @OrigSpText2=(الحالة @type عند 'TF' ثم
'CREATE FUNCTION'+ @objectName+'(@a char(1)) تُرجع @b table(a varchar(10)) مع التشفير كبداية، أدخل @b حدد @a return end '
عندما يقوم 'FN' ثم
'CREATE FUNCTION'+ @objectName+'(@a char(1)) بإرجاع char(1) مع التشفير كبداية، قم بإرجاع @a end'
عندما تقوم 'IF' ثم
'CREATE FUNCTION'+ @objectName+'(@a char(1)) بإرجاع الجدول مع التشفير كإرجاع حدد @a كنهاية
)
بدأ
@type='TR'
إذا @tr_parent_xtype='V'
ابدأ
التعيين @OrigSpText2='CREATE TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' مع التشفير بدلاً من INSEAD AS PRINT 1'
نهاية
وإلا
ابدأ
التعيين @OrigSpText2='CREATE TRIGGER ' +@objectname+' ON '+OBJECT_NAME(@parentid)+' مع تشفير للإدراج كطباعة 1 '
end
نهاية
إذا تم تعيين @type='V'
@OrigSpText2='إنشاء عرض '+@objectname+' بالتشفير كـ SELECT 1 كـ f'
تعيين @q=4000-len(@OrigSpText2)
تعيين @OrigSpText2=@OrigSpText2+REPLICATE('-',@q)
نهاية
وإلا
ابدأ
SET @OrigSpText2=REPLICATE('-', 4000)
نهاية
SET @i=1
SET @ resultsp = النسخ المتماثل (N'A'، (datalength(@OrigSpText1) / 2))
بينمايبدأ
@i<=datalength(@OrigSpText1)/2
@resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE( سلسلة فرعية(@OrigSpText1, @i, 1)) ^
(UNICODE(substring(@OrigSpText2, @i, 1)) ^
UNICODE(substring(@OrigSpText3, @i, 1))))))
SET @i=@i+ 1
نهاية
تعيين @orgvarbin=cast(@OrigSpText1 كـ varbinary(8000))
تعيين @resultsp=(الحالة عند @encrypted=1
ثم @resultsp
else converter(nvarchar(4000)، الحالة عند @status&2=2 ثم فك الضغط(@orgvarbin) آخر @orgvarbin end)
end)
print @resultsp
set @n=@n+1
end
end
set @k=@k+1
end
drop table #temp
rollback tran
end