2015년 5월 13일 수요일
MSSQL SP에서 외부 DLL 사용하는 방법 (CLR 확장저장프로시저)
MSSQL SP에서 외부 DLL 사용하는 방법 (CLR 확장저장프로시저)
1.사전작업(CLR환경을사용하도록설정합니다.)
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO
2. Visual Studio에서 dll 생성 - 클래스라이브러리
3. 클래스를 생성한다.
4. namespace는 삭제한다.
5. class를 public으로 만든다.
6. static으로 Function이 될 메서드를 생성한다.
8. 생성된 DLL을 SQL server의 특정 위치에 복사
9. 어셈블리를 만든다.
-- DROP ASSEMBLY Encrypt
create assembly Encrypt
from 'c:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\ClassLibrary1.dll'
10. Function을 만든다.
--DROP FUNCTION dbo.fnEncrypt
--DROP FUNCTION dbo.fnDecrypt
--EXTERNAL NAME <method_specifier> assembly_name.class_name.method_name
CREATE FUNCTION fnEncrypt(@value nvarchar(max))
RETURNS nvarchar(max)
AS
EXTERNAL NAME Encrypt.csStringEncrypter.Encrypt
GO
CREATE FUNCTION fnDecrypt(@value nvarchar(max))
RETURNS nvarchar(max)
AS
EXTERNAL NAME Encrypt.csStringEncrypter.Decrypt
GO
11. Test
select dbo.fnEncrypt('9901011122334')
select dbo.fnDecrypt('/4suqbCwk1G7qjIaTAznhg==')
12. 기타, 프로시져를 만들어서 하는 방법을 먼저 해보았으나, 실패했다. dll에서 함수를 찾을 수 없다는 메시지...
-- 프로시저 등록
-- 함수이름, dll이름
sp_addextendedproc 'Encrypt', 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\ClassLibrary2.dll'
sp_dropextendedproc 'Encrypt'
DECLARE @input_string nvarchar(100) = '9901011122334'
DECLARE @output_string nvarchar(100)
EXEC Encrypt @input_string, @output_string OUTPUT
select @output_string
13. 키를 받아서 암호화하도록 함수를 짜면 더 좋을 듯. 지금은 dll에 들어가있음
--참조1
--http://blog.daum.net/hagi/314
http://msdn.microsoft.com/en-us/library/ms186755.aspx
--참조2
--http://msdn.microsoft.com/ko-kr/library/ms164653(v=sql.105).aspx
--http://blog.naver.com/PostView.nhn?blogId=ellongandy&logNo=90171834891
--http://madchick.egloos.com/1254999
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기