2012-01-01 2 views
0

폴더를 만드는 간단한 CLR 프로 시저를 만들었습니다. 문제는 "CREATE PROCEDURE ..."문을 사용하여 SQL Server 내에서 프로 시저를 만들 때마다 프로 시저가 자동으로 암호화된다는 것입니다. WITH ENCRYPTION 절을 사용하지 않고 CLR 개체에 사용할 수 없다는 것을 알고 있으므로 여기에서 혼란 스럽습니다. 내가 SQL 서버 2008 R2 작업 그룹 버전을 사용하고CLR 저장 프로 시저가 자동으로 암호화됩니다.

CREATE PROCEDURE CreateFolder(@Path nvarchar(500), @FolderName nvarchar(50), @ReturnCode int output, @ReturnMessage nvarchar(500) output) 
WITH EXECUTE AS OWNER 
AS 
EXTERNAL NAME MyLibrary.[MyLibrary.StoredProcedures].CreateFolder 
GO 

: 다음은 내 코드입니다.

This is the screenshot

어떤 도움

이 많이 감사합니다.

감사합니다.

답변

2

Management Studio에서 코드를 볼 수 없어 암호화 된 것으로 표시됩니까? 스크립트가 ALTER 또는 아무것도 스크립트 할 수 없으므로 가능성이 있습니다.

+1

당신이 옳았습니다. 프로 시저를 열 수는 없지만 코드를 "작성"으로 스크립팅하여 볼 수 있습니다. - 고맙습니다. – Fayde

1

SQLCLR 개체는 암호화되지 않습니다. 사실 질문에서 언급 한 것처럼 WITH ENCRYPTION 옵션은 SQLCLR 개체에도 사용할 수 없습니다. SSMS에서 암호화 된 것으로 보이는 이유는 정의를 볼 수 없기 때문이 아니라 처음에 정의가 없기 때문입니다. sys.sql_modules을 보면 저장 프로 시저, 함수, 트리거, 뷰 등의 정의를 볼 수 있지만 SQLCLR 개체는 아닙니다. 당신이 sys.parameters 카탈로그 뷰를 보면 또한, has_default_value 및 링크 된 MSDN 페이지에 따라라는 필드가 :

SQL 서버는이 카탈로그 뷰의 CLR 개체에 대한 기본값을 유지하고는, 따라서 Transact-SQL 개체의 경우이 열의 값은 0입니다. Transact-SQL 개체에서 매개 변수의 기본값을 보려면 sys.sql_modules 카탈로그 뷰의 정의 열을 쿼리하거나 OBJECT_DEFINITION 시스템 함수를 사용합니다.

(질문에 도시 된 것과 같은) SQLCLR 객체의 CREATE 문은 메타 데이터로부터 그들이 요청되는 때마다 생성된다.

관련 문제