저장 프로시저 및 저장 함수 암호화: WITH ENCRYPTION
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
CREATE 프로시저 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'의
암호를 해독합니다. 모든 저장 프로시저의
암호를 해독하고 xtype='P' 및 상태>0 및 이름<>'sp_decrypt'인 sysobjects에서 이름 선택에 대한 tb 커서
를 선언합니다.
@name sysname 선언
tb 열기
tb에서 @name으로 다음 가져
오기 @@fetch_status=0
start
print '/*-------저장 프로시저['+@name+'] ---------- -*/'
exec sp_decrypt @name
tb에서 @name으로 다음 항목 가져오기
end
close tb
할당 해제 tb
--*/
존재하는 경우(id = object_id(N'[dbo].[SP_DECRYPT]') 및 OBJECTPROPERTY(id, N'IsProcedure') = 1인 dbo.sysobjects에서 * 선택)
프로시저 삭제 [dbo].[SP_DECRYPT]
GO
CREATE PROCEDURE sp_decrypt(@objectName varchar(50))
AS
start
set nocount on
--크랙된 바이트는 제한되지 않으며 SQLSERVER2000 저장 프로시저, 함수, 뷰, 트리거에 적용 가능
--
이전 버전의 뷰 트리거가 올바르게 해독할 수 없는 오류
수정--오류를 발견하면 이메일을 보내주세요: [email protected]
tran
선언 @objectname1 varchar(100),@orgvarbin varbinary(8000)
선언 @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)
선언 @i int,@status int,@type varchar(10),@parentid int
선언 @colid int,@n int, @q int,@j int,@k int,@encrypted int,@number int
id=object_id(@ObjectName)인 sysobjects에서 @type=xtype,@parentid=parent_obj를 선택합니다.
테이블 생성 #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=
#temp세트 @k=0
의 max(숫자)
while @k< =@number
존재하는 경우
시작
(id=object_id(@objectname) 및 number=@k인 syscomments에서 1 선택)@type='P'인 경우
시작
@sql1=(@number>1인 경우 ' ALTER PROCEDURE '+ @objectName +';'+rtrim(@k)+' 암호화는 '
else 'ALTER PROCEDURE '+ @objectName+' 암호화는 '
end)
@type='TR'인 경우
@parent_obj varchar(255),@tr_parent_xtype varchar(10) 선언을
시작
하고 id=object_id(@objectName)인 sysobjects에서 @parent_obj=parent_obj를 선택
하고 id=@parent_obj 인 sysobjects에서 @tr_parent_xtype=xtype을 선택합니다
. @tr_parent_xtype='V'
start
set @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION INSTERD OF INSERT AS PRINT 1 '
end
else
start
set @sql1='ALTER TRIGGER '+ @objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 '
end
end
if @type='FN' 또는 @type='TF' 또는 @type='IF'
set @sql1=(case @type when 'TF' then
'ALTER FUNCTION '+ @objectName+'(@a char(1))은 암호화를 시작으로하여 @b 테이블(a varchar(10))을 반환합니다. insert @b select @a return end '
when 'FN ' 그런 다음
'ALTER FUNCTION '+ @objectName+'(@a char(1))은 암호화를 시작하여 @a end로 암호화하여 char(1)을 반환합니다'
, 'IF'인 경우
'ALTER FUNCTION '+ @objectName+'(@a char( 1)) return으로 암호화된 테이블을 반환합니다. @a를 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)
선택 @sql2=REPLICATE('-',8000)
set @sql3='exec(@sql1'
선택 @colid=max(colid) from #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를
시작합니다.
존재하는 경우(id=object_id(@objectname) 및 number=@k 인 syscomments에서 1 선택)
시작
select @colid=max(colid) from #temp where number=@k
set @n=1
@n< =@colid
시작
@OrigSpText1=ctext,@encrypted=encrypted,@status=status FROM #temp WHERE colid=@n 및 number=@k 선택
SET @OrigSpText3=(syscomments에서 ctext 선택 WHERE id=object_id(@objectName) 및 colid=@n 및 number=@k )
@n=1인 경우
@type='P'인 경우
시작
SET @OrigSpText2=(@number인 경우 >1 then 'CREATE PROCEDURE '+ @objectName +';'+rtrim(@k)+' WITH ENCRYPTION AS '
else 'CREATE PROCEDURE '+ @objectName +' WITH ENCRYPTION AS '
end)
if @type='FN' 또는 @type='TF' 또는 @type='IF'
SET @OrigSpText2=(case @type when 'TF' then
'CREATE FUNCTION '+ @objectName+'(@a char(1)) 시작 삽입으로 암호화된 @b 테이블(a varchar(10))을 반환합니다. @b select @a return end '
일 때 'FN'이면
'CREATE FUNCTION '+ @objectName+'(@a char(1))은 char(1)을 반환합니다. 암호화를 시작으로 사용하여 @a end' 반환
'IF'인 경우
'CREATE FUNCTION '+ @objectName+'(@a char(1))은 반환으로 암호화를 사용하여 테이블을 반환합니다. @a를 a'
end로 선택)
@type='TR'인 경우
시작
if @tr_parent_xtype='V'
start
set @OrigSpText2='CREATE TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION INSTEAD OF INSERT AS PRINT 1 '
end
else
start
set @OrigSpText2='CREATE TRIGGER ' +@objectname+' ON '+OBJECT_NAME(@parentid)+' PRINT 1로 삽입을 위한 암호화 포함 '
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
start
SET @OrigSpText2=REPLICATE('-', 4000)
end
SET @i=1
SET @ resultsp = 복제(N'A', (datalength(@OrigSpText1) / 2))
WHILE @i<=datalength(@OrigSpText1)/2
BEGIN
SET @resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE( 하위 문자열(@OrigSpText1, @i, 1)) ^
(UNICODE(하위 문자열(@OrigSpText2, @i, 1)) ^
UNICODE(하위 문자열(@OrigSpText3, @i, 1)))))
SET @i=@i+ 1
END
set @orgvarbin=cast(@OrigSpText1 as varbinary(8000))
set @resultsp=(@encrypted=1인 경우
@resultsp
else 변환(nvarchar(4000)), @status&2=2인 경우 압축 해제(@orgvarbin) else @orgvarbin end)
end)
print @resultsp
set @n=@n+1
end
end
set @k=@k+1
end
drop table #temp
롤백 tran
end