2017-10-17 10 views
1

은 내가 공개/개인 키 파일로 서명 permission_set = unsafeCLR, 기능 publish.sql 파일

어셈블리로 배포하고자하는 CLR 기능을 가지고 있고이 assymtric key을 만들었은 loginasymmetric key 것을 사용하여 작성 그리고 해당 로그인에 unsafe 어셈블리에 대한 사용 권한이 부여됩니다.

어셈블리를 배포하려면 방금 .publish.sql을 실행하면됩니다. ./bin/debug를 사용하여 CLR 어셈블리를 배포 할 수 있습니까? 사전

이미 임시 수입 물건을 설정 한 경우
+0

예 게시 구성이 올바르게 구성되어 있으면 가능합니다 (즉, CLR 또는 smf를 무시하지 않아도 됨) –

+0

@DmitrijKultasev SSMS에서 파일을 열고 실행을 누르는 것만 큼 간단합니까? 공개/개인 키가 어디에 있는지 말할 필요가 없습니다. –

+0

이 작업을 수행하는 방법을 모르는 경우 ** 안전하지 않은 어셈블리를 배포해서는 안됩니다. 아마도 SQLCLR에서 전자 메일을 보내려고 시도하지 않아도됩니다. 또는 CSV 파일을로드하는 데 사용하십시오. 또는 쿼리를 실행하십시오. 또는 SQL Server 에이전트, SSIS, 외부 도구에서 수행해야하는 작업.낭비되는 RAM 또는 CPU 사이클은 서버의 메모리 및 CPU 리소스에서 가져옵니다. 따라서 성능이 손상됩니다. –

답변

1

에서

덕분에, 나는, 즉이 질문에 대답 한 것처럼 당신은 그냥 자신을 위해 볼 수있는 그 파일을 실행하지 않은 이유에 궁금 권리? ;-)하지만 예,이 세 단계는 PERMISSION_SET = UNSAFE으로 표시된 어셈블리를 만들고 사용하는 데 필요한 모든 것입니다.

"게시"스크립트는 항상 증분입니다. 따라서 모든 상황에서 작동 할 배포 스크립트로 간주해서는 안됩니다. 빌드를 수행하고 변경하지 않으면 개체를 항상 삭제할 수있는 옵션이없는 한 어셈블리를 다시 배포하지 않습니다 (데이터베이스는 있지만 어셈블리는 기억하지 못합니다.)). "생성"스크립트는 생성 옵션을 선택하면 항상 모든 것을 삭제하고 다시 만듭니다.

그리고 이것이 암시 된 경우 SSDT에 의해 생성 된 게시 스크립트는 기본적으로 프로젝트의 일부가 아닌 서버 수준 개체로 엉망이되지 않습니다 ("프로젝트의 일부분"은 사용자가 master DB)를 첨가 하였다. 따라서 전체 작성 스크립트는 [master]에서 로그인 또는 비대칭 키를 제거하지 않습니다. 그러나 필요한 경우 "로그인을 삭제하지 마십시오"및/또는 "비대칭 키를 삭제하지 마십시오"옵션이 있습니다.

그리고이 질문은 이전 버전의 SQL Server에 대한 것으로, 방금 발표 된 SQL Server 2017은 어셈블리를 배포하기 위해 규칙을 약간 변경합니다. 이 질문에 설명 된 방법은 비대칭 키를 먼저 만들 때 여전히 작동하지만 이제는 SAFE 어셈블리에도 필요합니다. 내가 다시 SQL 서버 2012 모든 버전이 함께하는) 작업을 모두 처리하기위한 (구체적으로) 두 가지 옵션에 대해 설명하고, b)는 완전 자동화 된 방식으로 Visual Studio 및 SSDT의 프레임 워크와 함께 작동 :

먼저 링크 (솔루션 1), I는 SQL Server 중앙을 위해 쓴 다음 문서에 설명 된 방법의 적응되어 있고 그 SQL 서버 2005 작업 수행 - SQL 서버 2016을 :

Stairway to SQLCLR Level 7: Development and Security

+0

"SSDT에 의해 생성 된 게시 스크립트가 서버 수준 개체를 엉망으로 만들지는 않습니다"는 사실이 아닙니다. 프로젝트에 로그인을 쉽게 추가 할 수 있습니다. 이 기능을 활성화/비활성화하는 옵션이 있으며 가장 일반적으로 불가능합니다. –

+0

@DmitrijKultasev True, 나는 이것이 일반적으로 SSDT 외부에서 처리되므로 SQLCLR 프로젝트와 관련하여 일반적으로 말하고있었습니다. 그러나 방금 명확히하기 위해 대답을 업데이트했습니다. 다행히도 새로운 표현이 더 정확할 것입니다. 그 점을 지적 해 주셔서 감사합니다. –