majid_afra222
چهارشنبه 17 خرداد 1385, 20:42 عصر
سلام
من باب Encrypt شدن توابع و رویه های SQL Server، با این رویه میتونید گزینه ENCRYPTION رو از بین ببرید و سورس SP رو داشته باشید.
CREATE PROCEDURE DecryptSP(@objName varchar(50))
AS
BEGIN
DECLARE @a nvarchar(4000), @b nvarchar(4000), @c nvarchar(4000), @d nvarchar(4000), @i int, @t bigint
--بدست آوردن اطلاعات ENCRYPT شده
SET @a=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
SET @b='ALTER PROCEDURE '+ @objName +' WITH ENCRYPTION AS '+REPLICATE('-', 4000-62)
EXECUTE (@b)
--بدست آوردن اطلاعات SP ساختگی خودمان
SET @c=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
SET @b='CREATE PROCEDURE '+ @objName +' WITH ENCRYPTION AS '+REPLICATE('-', 4000-62)
SET @i=1
--متغیرهای temp را پر میکنیم
SET @d = replicate(N'A', (datalength(@a) / 2))
--loop
WHILE @i<=datalength(@a)/2
BEGIN
--داده های اصلی و تلقبی را xor میکنیم original+bogus+bogus encrypted
SET @d = stuff(@d, @i, 1,
NCHAR(UNICODE(substring(@a, @i, 1)) ^
(UNICODE(substring(@b, @i, 1)) ^
UNICODE(substring(@c, @i, 1)))))
SET @i=@i+1
END
--حذف SP اصلی
EXECUTE ('drop PROCEDURE '+ @objName)
--حذف گزینه encryption
SET @d=REPLACE((@d),'WITH ENCRYPTION', '')
SET @d=REPLACE((@d),'With Encryption', '')
SET @d=REPLACE((@d),'with encryption', '')
IF CHARINDEX('WITH ENCRYPTION',UPPER(@d) )>0
SET @d=REPLACE(UPPER(@d),'WITH ENCRYPTION', '')
--جایگزینی SP
execute( @d)
برای اجرا هم کافیه نام object رو بهش ارسال کنید
خوب امیدوارم خوشتون بیاد.
من باب Encrypt شدن توابع و رویه های SQL Server، با این رویه میتونید گزینه ENCRYPTION رو از بین ببرید و سورس SP رو داشته باشید.
CREATE PROCEDURE DecryptSP(@objName varchar(50))
AS
BEGIN
DECLARE @a nvarchar(4000), @b nvarchar(4000), @c nvarchar(4000), @d nvarchar(4000), @i int, @t bigint
--بدست آوردن اطلاعات ENCRYPT شده
SET @a=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
SET @b='ALTER PROCEDURE '+ @objName +' WITH ENCRYPTION AS '+REPLICATE('-', 4000-62)
EXECUTE (@b)
--بدست آوردن اطلاعات SP ساختگی خودمان
SET @c=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
SET @b='CREATE PROCEDURE '+ @objName +' WITH ENCRYPTION AS '+REPLICATE('-', 4000-62)
SET @i=1
--متغیرهای temp را پر میکنیم
SET @d = replicate(N'A', (datalength(@a) / 2))
--loop
WHILE @i<=datalength(@a)/2
BEGIN
--داده های اصلی و تلقبی را xor میکنیم original+bogus+bogus encrypted
SET @d = stuff(@d, @i, 1,
NCHAR(UNICODE(substring(@a, @i, 1)) ^
(UNICODE(substring(@b, @i, 1)) ^
UNICODE(substring(@c, @i, 1)))))
SET @i=@i+1
END
--حذف SP اصلی
EXECUTE ('drop PROCEDURE '+ @objName)
--حذف گزینه encryption
SET @d=REPLACE((@d),'WITH ENCRYPTION', '')
SET @d=REPLACE((@d),'With Encryption', '')
SET @d=REPLACE((@d),'with encryption', '')
IF CHARINDEX('WITH ENCRYPTION',UPPER(@d) )>0
SET @d=REPLACE(UPPER(@d),'WITH ENCRYPTION', '')
--جایگزینی SP
execute( @d)
برای اجرا هم کافیه نام object رو بهش ارسال کنید
خوب امیدوارم خوشتون بیاد.