어셈블리 ( Transact SQL ) | Microsoft Docs 
 클래스 메타데이터 와 관리 코드 를 SQL ServerSQL Server 인 스턴스 의 개체 로 포함 하 는 관리 되 는 응용 프로그램 모듈 을 만듭니다 . Creates a managed application module that contains class metadata and managed code as an object in an instance of SQL ServerSQL Server . 이 모듈 을 참조 하 여 데이터베이스 에서 CLR ( 공용 언어 런타임 ) 함수 , 저장 프로시저 , 트리거 , 사용 자 정의 집계 및 사용 자 정의 형식 을 만들 수 있 습니다 . By referencing this module , common language runtime ( CLR ) functions , stored procedures , triggers , user - defined aggregates , and user - defined types can be created in the database . 
 어셈블리 의 이름 입니다 . Is the name of the assembly . 이름 은 데이터베이스 와 유효 한 내 에서 고유 해야 합니다 . 식별자 합니다 . The name must be unique within the database and a valid identifier . 
 어셈블리 소유자 인 사용 자 또는 역할 의 이름 을 지정 합니다 . Specifies the name of a user or role as owner of the assembly . owner _ name 는 현재 사용 자 가 멤버 , 또는 현재 사용 자 대 한 IMPERSONATE 권한 이 있 어야 하 는 역할 의 이름 이 어야 합니다 . owner _ name 합니다 . owner _ name must either be the name of a role of which the current user is a member , or the current user must have IMPERSONATE permission on owner _ name . 값 을 지정 하 지 않 으면 현재 사용 자 에게 소유 권 이 부여 됩니다 . If not specified , ownership is given to the current user . 
 업로드 할 어셈블리 가 있 는 로컬 경로 나 네트워크 위치 와 어셈블리 에 해당 하 는 매니 페스트 파일 이름 을 지정 합니다 . Specifies the local path or network location where the assembly that is being uploaded is located , and also the manifest file name that corresponds to the assembly . < client _ assembly _ specifier > 는 고정 된 문자열 또는 변수 는 고정 문자열 식 평가 로 표현 할 수 있 습니다 . < client _ assembly _ specifier > can be expressed as a fixed string or an expression evaluating to a fixed string , with variables . CREATE ASSEMBLY 로 는 다중 모듈 어셈블리 를 로드 할 수 없 습니다 . CREATE ASSEMBLY does not support loading multimodule assemblies . SQL ServerSQL Server 에서 는 동일 한 위치 에서 이 어셈블리 의 모든 종속 어셈블리 를 찾 은 다음 동일 한 소유자 를 사용 하 여 해당 종속 어셈블리 를 루트 수준 어셈블리 로 업로드 합니다 . also looks for any dependent assemblies of this assembly in the same location and also uploads them with the same owner as the root level assembly . 이러 한 종속 어셈블리 를 찾 을 수 없 으며 현재 데이터베이스 에 종속 어셈블리 가 로드 되 어 있 지 않 은 경우 CREATE ASSEMBLY 는 실패 합니다 . If these dependent assemblies are not found and they are not already loaded in the current database , CREATE ASSEMBLY fails . 종속 어셈블리 가 현재 데이터베이스 에 로드 되 어 있 는 경우 해당 어셈블리 의 소유자 는 새로 만든 어셈블리 의 소유자 와 동일 해야 합니다 . If the dependent assemblies are already loaded in the current database , the owner of those assemblies must be the same as the owner of the newly created assembly . 
 < client _ assembly _ specifier > 로그인 된 한 사용자 의 가장 하 는 경우 지정 할 수 없 습니다 . < client _ assembly _ specifier > cannot be specified if the logged in user is being impersonated . 
 어셈블리 와 어셈블리 의 종속 어셈블리 를 구성 하 는 이진 값 목록 입니다 . Is the list of binary values that make up the assembly and its dependent assemblies . 목록 에서 첫 번 째 값 은 루트 수준 어셈블리 로 간주 됩니다 . The first value in the list is considered the root - level assembly . 종속 어셈블리 에 해당 하 는 값 은 순서 에 관계없이 입력 할 수 있 습니다 . The values corresponding to the dependent assemblies can be supplied in any order . 루트 어셈블리 의 종속 성 에 해당 하 지 않 는 값 은 모두 무시 됩니다 . Any values that do not correspond to dependencies of the root assembly are ignored . 
 이 varbinary 리터럴 . Is a varbinary literal . 
 형식 의 식 varbinary 합니다 . Is an expression of type varbinary . 
 PERMISSION _ SET 옵션 에 영향 을 받 는 clr strict security 열기 경고 에 설명 된 옵션 입니다 . The PERMISSION _ SET option is affected by the clr strict security option , described in the opening warning . 때 clr strict security 가 사용 하 도록 설정 으로 모든 어셈블리 로 처리 UNSAFE 합니다 . When clr strict security is enabled , all assemblies are treated as UNSAFE . 
 SQL ServerSQL Server 에서 어셈블리 에 액세스 할 때 이 어셈블리 에 부여 된 코드 액세스 권한 집합 을 지정 합니다 . Specifies a set of code access permissions that are granted to the assembly when it is accessed by SQL ServerSQL Server . 지정 하 지 않 으면 기본 적 으로 SAFE 가 적용 됩니다 . If not specified , SAFE is applied as the default . 
 SAFE 를 사용 하 는 것 이 좋 습니다 . We recommend using SAFE . SAFE 는 가장 제한 적 인 권한 집합 입니다 . SAFE is the most restrictive permission set . SAFE 권한 을 사용 하 여 어셈블리 에서 실행 한 코드 는 파일 , 네트워크 , 환경 변수 또는 레지스트리 와 같 은 외부 시스템 리소스 에 액세스 할 수 없 습니다 . Code executed by an assembly with SAFE permissions cannot access external system resources such as files , the network , environment variables , or the registry . 
 EXTERNAL _ ACCESS 를 사용 하 면 어셈블리 에서 파일 , 네트워크 , 환경 변수 및 레지스트리 와 같 은 특정 외부 시스템 리소스 에 액세스 할 수 있 습니다 . EXTERNAL _ ACCESS enables assemblies to access certain external system resources such as files , networks , environmental variables , and the registry . 
 UNSAFE 를 사용 하 면 어셈블리 에서 SQL ServerSQL Server 인 스턴스 의 내부 리소스 와 외부 리소스 모두 에 제한 없이 액세스 할 수 있 습니다 . UNSAFE enables assemblies unrestricted access to resources , both within and outside an instance of SQL ServerSQL Server . UNSAFE 어셈블리 내 에서 실행 되 는 코드 는 비 관리 코드 를 호출 할 수 있 습니다 . Code running from within an UNSAFE assembly can call unmanaged code . 
 SAFE 권한 설정 은 SQL ServerSQL Server 인 스턴스 의 외부 리소스 에 액세스 하 지 않 고 계산 및 데이터 관리 태 스 크 를 수행 하 는 어셈블리 에 권장 됩니다 . SAFE is the recommended permission setting for assemblies that perform computation and data management tasks without accessing resources outside an instance of SQL ServerSQL Server . 
 SQL ServerSQL Server 인 스턴스 의 외부 리소스 에 액세스 하 는 어셈블리 에 는 EXTERNAL _ ACCESS 를 사용 하 는 것 이 좋 습니다 . We recommend using EXTERNAL _ ACCESS for assemblies that access resources outside of an instance of SQL ServerSQL Server . EXTERNAL _ ACCESS 어셈블리 는 SAFE 어셈블리 수준 의 안정 성 및 확장 성 보호 를 제공 하 지만 보 안 측면 에서 는 UNSAFE 어셈블리 와 유사 합니다 . EXTERNAL _ ACCESS assemblies include the reliability and scalability protections of SAFE assemblies , but from a security perspective are similar to UNSAFE assemblies . 그 이유 는 EXTERNAL _ ACCESS 어셈블리 의 코드 에서 명시 적 으로 호출자 를 가장 하 지 않 는 한 기본 적 으로 코드 가 SQL ServerSQL Server 서비스 계정 으로 실행 되 고 이 계정 을 통해 외부 리소스 에 액세스 하 기 때문 입니다 . This is because code in EXTERNAL _ ACCESS assemblies runs by default under the SQL ServerSQL Server service account and accesses external resources under that account , unless the code explicitly impersonates the caller . 따라서 EXTERNAL _ ACCESS 어셈블리 를 만드 는 사용 권한 은 SQL ServerSQL Server 서비스 계정 에서 코드 를 실행 하 도록 트러스트 된 로그인 에 만 부여 해야 합니다 . Therefore , permission to create EXTERNAL _ ACCESS assemblies should be granted only to logins that are trusted to run code under the SQL ServerSQL Server service account . 가장 에 대 한 자세 한 내용 은 참조 CLR 통합 보안 합니다 . For more information about impersonation , see CLR Integration Security . 
 UNSAFE 를 지정 하 면 어셈블리 의 코드 를 사용 하 여 SQL ServerSQL Server 프로세스 공간 에서 모든 작업 을 자유 롭 게 수행 할 수 있 게 되 므로 SQL ServerSQL Server 가 취약 해질 가능 성 이 있 습니다 . Specifying UNSAFE enables the code in the assembly complete freedom to perform operations in the SQL ServerSQL Server process space that can potentially compromise the robustness of SQL ServerSQL Server . UNSAFE 어셈블리 는 SQL ServerSQL Server 또는 공용 언어 런타임 중 하나 의 보안 시스템 을 손상 시킬 수 도 있 습니다 . UNSAFE assemblies can also potentially subvert the security system of either SQL ServerSQL Server or the common language runtime . 따라서 UNSAFE 권한 은 가장 높 은 수준 의 트러스트 된 어셈블리 에 만 부여 해야 합니다 . UNSAFE permissions should be granted only to highly trusted assemblies . 구성원 만 는 sysadmin 고정 된 서버 역할 만들 고 안전 하 지 않 은 어셈블리 를 변경 할 수 있 습니다 . Only members of the sysadmin fixed server role can create and alter UNSAFE assemblies . 
 어셈블리 사용 권한 집합 에 대 한 자세 한 내용 은 참조 어셈블리 디자인 합니다 . For more information about assembly permission sets , see Designing Assemblies . 
 CREATE ASSEMBLY 는 관리 코드 에서 . dll 파일 로 미리 컴파일 된 어셈블리 를 SQL Server 인 스턴스 내부 에서 사용 할 수 있 도록 업로드 합니다 . CREATE ASSEMBLY uploads an assembly that was previously compiled as a . dll file from managed code for use inside an instance of SQL Server . 
 사용 하 도록 설정 되 면 CREATE ASSEMBLY 및 ALTER ASSEMBLY 문의 PERMISSION _ SET 옵션 은 런타임 에서 무시 되 지만 PERMISSION _ SET 옵션 은 메타데이터 에서 유지 됩니다 . When enabled , the PERMISSION _ SET option in the CREATE ASSEMBLY and ALTER ASSEMBLY statements is ignored at run - time , but the PERMISSION _ SET options are preserved in metadata . 이 옵션 을 무시 하 면 기존 코드 문 의 중단 을 최소 화 합니다 . Ignoring the option , minimizes breaking existing code statements . 
 SQL ServerSQL Server 에서 는 이름 , culture 및 공개 키 가 동일 한 서로 다른 버전 의 어셈블리 를 등록 할 수 없 습니다 . does not allow registering different versions of an assembly with the same name , culture and public key . 
 에 지정 된 어셈블리 에 액세스 하 려고 할 때 < client _ assembly _ specifier >, SQL ServerSQL Server 현재 Windows 로그인 의 보안 컨텍스트 를 가장 합니다 . When attempting to access the assembly specified in < client _ assembly _ specifier >, SQL ServerSQL Server impersonates the security context of the current Windows login . 경우 < client _ assembly _ specifier > 네트워크 위치 ( UNC 경로 ) 를 지정 합니다 . 현재 로그인 의 가장 전달 되 지 않 습니다 네트워크 위치 에 위임 제한 때문 입니다 . If < client _ assembly _ specifier > specifies a network location ( UNC path ) , the impersonation of the current login is not carried forward to the network location because of delegation limitations . 이 경우 에 는 SQL ServerSQL Server 서비스 계정 의 보안 컨텍스트 를 사용 하 여 액세스 합니다 . In this case , access is made using the security context of the SQL ServerSQL Server service account . 자세 한 내용 은 참조 자격 증명 ( 데이터베이스 엔진 ) 합니다 . For more information , see Credentials ( Database Engine ) . 
 로 지정 된 루트 어셈블리 외 에 도 assembly _ name , SQL ServerSQL Server 업로드 할 루트 어셈블리 에서 참조 되 는 모든 어셈블리 를 업로드 하 려 합니다 . Besides the root assembly specified by assembly _ name , SQL ServerSQL Server tries to upload any assemblies that are referenced by the root assembly being uploaded . 참조 하 는 어셈블리 가 이전 의 CREATE ASSEMBLY 문 에 의해 이미 데이터베이스 에 업로드 된 경우 에 는 루트 어셈블리 에서 사용 할 수 있 으므로 해당 어셈블리 는 업로드 되 지 않 습니다 . If a referenced assembly is already uploaded to the database because of an earlier CREATE ASSEMBLY statement , this assembly is not uploaded but is available to the root assembly . 종속 어셈블리 가 이전 에 업로드 되 지 않 았 지만 SQL ServerSQL Server 가 원본 디렉터리 에서 해당 매니 페스트 파일 을 찾 지 못하 는 경우 CREATE ASSEMBLY 는 오류 를 반환 합니다 . If a dependent assembly was not previously uploaded , but SQL ServerSQL Server cannot locate its manifest file in the source directory , CREATE ASSEMBLY returns an error . 
 루트 어셈블리 에서 참조 하 는 종속 어셈블리 가 데이터베이스 에 없 으며 암시 적 으로 루트 어셈블리 와 함께 로드 되 는 경우 해당 종속 어셈블리 의 권한 집합 은 루트 수준 어셈블리 와 동일 합니다 . If any dependent assemblies referenced by the root assembly are not already in the database and are implicitly loaded together with the root assembly , they have the same permission set as the root level assembly . 종속 어셈블리 를 루트 수준 어셈블리 와 다른 권한 집합 을 사용 하 여 만들 어야 한다면 적절 한 권한 집합 을 사용 하 여 루트 수준 어셈블리 보다 먼저 명시 적 으로 업로드 해야 합니다 . If the dependent assemblies must be created by using a different permission set than the root - level assembly , they must be uploaded explicitly before the root level assembly with the appropriate permission set . 
 어셈블리 유효 성 검사 Assembly Validation 
 SQL ServerSQL Server 에서 는 CREATE ASSEMBLY 문 으로 업로드 된 어셈블리 이진 파일 에 대해 다음 사항 을 확인 합니다 . performs checks on the assembly binaries uploaded by the CREATE ASSEMBLY statement to guarantee the following : 
 어셈블리 이진 파일 이 유효 한 메타데이터 와 코드 세그먼트 로 된 올바른 형식 인지 확인 하 고 코드 세그먼트 에 유효 한 MSIL ( Microsoft Intermediate Language ) 명령 이 있 는지 확인 합니다 . The assembly binary is well formed with valid metadata and code segments , and the code segments have valid Microsoft Intermediate language ( MSIL ) instructions . 
 지원 되 는 다음 어셈블리 중 하나 를 참조 하 는 시스템 어셈블리 집합 은 SQL ServerSQL Server : Microsoft . Visualbasic . dll , Mscorlib . dll , System . Data . dll , System . dll , System . Xml . dll , Microsoft . Visualc . dll , Custommarshallers . dll , System . Security . dll , System . Web . Services . dll , System . Data . SqlXml . dll , System . Core . dll 및 system . xml . linq . dll 중 하나 입니다 . The set of system assemblies it references is one of the following supported assemblies in SQL ServerSQL Server : Microsoft . Visualbasic . dll , Mscorlib . dll , System . Data . dll , System . dll , System . Xml . dll , Microsoft . Visualc . dll , Custommarshallers . dll , System . Security . dll , System . Web . Services . dll , System . Data . SqlXml . dll , System . Core . dll , and System . Xml . Linq . dll . 다른 시스템 어셈블리 는 참조 할 수 있 지만 데이터베이스 에 명시 적 으로 등록 해야 합니다 . Other system assemblies can be referenced , but they must be explicitly registered in the database . 
 SAFE 또는 EXTERNAL ACCESS 권한 집합 을 사용 하 여 만든 어셈블리 의 경우 For assemblies created by using SAFE or EXTERNAL ACCESS permission sets : 
 어셈블리 코드 가 안전 한 형식 이 어야 합니다 . The assembly code should be type - safe . 형식 안전 성 은 어셈블리 에 대해 공용 언어 런타임 검증 도구 를 실행 하 여 설정 합니다 . Type safety is established by running the common language runtime verifier against the assembly . 
 어셈블리 의 클래스 에 는 읽 기 전용 으로 표시 되 지 않 은 정적 데이터 멤버 가 포함 되 어서 는 안 됩니다 . The assembly should not contain any static data members in its classes unless they are marked as read - only . 
 어셈블리 의 클래스 는 파이널 라이저 메서 드 를 포함 할 수 없 습니다 . The classes in the assembly cannot contain finalizer methods . 
 어셈블리 의 클래스 나 메서 드 에 는 허용 되 는 코드 특성 만 사용 하 여 주석 을 추가 해야 합니다 . The classes or methods of the assembly should be annotated only with allowed code attributes . 자세 한 내용 은 참조 CLR 루틴 에 대 한 사용자 지정 특성 합니다 . For more information , see Custom Attributes for CLR Routines . 
 CREATE ASSEMBLY 를 실행 할 때 수행 되 는 위 와 같 은 확인 작업 외 에 도 어셈블리 의 코드 를 실행 할 때 수행 되 는 추가 확인 작업 이 있 습니다 . Besides the previous checks that are performed when CREATE ASSEMBLY executes , there are additional checks that are performed at execution time of the code in the assembly : 
 특정 호출 MicrosoftMicrosoft . NET Framework . NET Framework 어셈블리 의 권한 집합 에 해당 권한 이 포함 되 어 있 지 않 으면 특정 코드 액세스 권한 이 필요 한 Api 는 실패 할 수 있 습니다 . Calling certain MicrosoftMicrosoft . NET Framework . NET Framework APIs that require a specific Code Access Permission may fail if the permission set of the assembly does not include that permission . 
 SAFE 및 EXTERNAL _ ACCESS 어셈블리 의 경우 특정 HostProtectionAttributes 를 사용 하 여 주석 을 추가 한 . NET Framework . NET Framework API 를 호출 하 려고 하 면 실패 합니다 . For SAFE and EXTERNAL _ ACCESS assemblies , any attempt to call . NET Framework . NET Framework APIs that are annotated with certain HostProtectionAttributes will fail . 
 자세 한 내용 은 참조 어셈블리 디자인 합니다 . For more information , see Designing Assemblies . 
 CREATE ASSEMBLY 권한 이 필요 합니다 . Requires CREATE ASSEMBLY permission . 
 업로드 할 어셈블리 에서 참조 하 는 어셈블리 가 이미 데이터베이스 에 있 는 경우 사용 자 는 해당 어셈블리 의 소유자 여야 합니다 . User must be the owner of any assemblies that are referenced by the assembly that are to be uploaded if the assemblies already exist in the database . 파일 경로 사용 하 여 어셈블리 를 업로드 하 려면 현재 사용 자 의 멤버 이거 나 Windows 인증 로그인 이 어야 합니다 는 sysadmin 고정 된 서버 역할 입니다 . To upload an assembly by using a file path , the current user must be a Windows authenticated login or a member of the sysadmin fixed server role . CREATE ASSEMBLY 를 실행 하 는 사용자 의 Windows 로그인 에 는 문 에서 로드 할 공유 와 파일 에 대한 읽 기 권한 이 있 어야 합니다 . The Windows login of the user that executes CREATE ASSEMBLY must have read permission on the share and the files being loaded in the statement . 
 CLR 엄격 한 보안 사용 권한 Permissions with CLR strict security 
 CLR strict security 를 사용 할 때 CLR 어셈블리 를 만드 는 데 필요 한 권한 은 다음 과 같 습니다 . The following permissions required to create a CLR assembly when CLR strict security is enabled : 
 사용 자 에게 CREATE ASSEMBLY 권한 이 있 어야 합니다 . The user must have the CREATE ASSEMBLY permission 
 다음 조건 중 하나 가 충족 되 어야 합니다 . And one of the following conditions must also be true : 
 어셈블리 는 서버 에 대한 UNSAFE ASSEMBLY 권한 이 있 는 해당 로그인 이 포함 된 인증서 또는 비대칭 키로 서명 됩니다 . The assembly is signed with a certificate or asymmetric key that has a corresponding login with the UNSAFE ASSEMBLY permission on the server . 어셈블리 에 서명 하 는 것 이 좋 습니다 . Signing the assembly is recommended . 
 데이터베이스 는 ON 으로 설정 된 TRUSTWORTHY 속성 을 가지 고 있 고 서버 에 대한 UNSAFE ASSEMBLY 권한 이 있 는 로그인 으로 소유 됩니다 . The database has the TRUSTWORTHY property set to ON , and the database is owned by a login that has the UNSAFE ASSEMBLY permission on the server . 이 방법 은 권장 되 지 않 습니다 . This option is not recommended . 
 예 1 : dll 에서 어셈블리 만들 기 Example A : Creating an assembly from a dll 
 다음 예 에서 는 SQL Server 데이터베이스 엔진 SQL Server Database Engine 예제 를 로컬 컴퓨터 의 기본 위치 에 설치 하 고 HelloWorld . csproj 예제 응용 프로그램 을 컴파일 했 다고 가정 합니다 . The following example assumes that the SQL Server 데이터베이스 엔진 SQL Server Database Engine samples are installed in the default location of the local computer and the HelloWorld . csproj sample application is compiled . 자세 한 내용 은 참조 Hello World 예제 합니다 . For more information , see Hello World Sample . 
 예 b : 어셈블리 비트 로부터 어셈블리 만들 기 Example B : Creating an assembly from assembly bits 
 샘플 비트 ( 하 지 않 은 완전 하 거나 유효 ) 를 사용 자 어셈블리 비트 로 대체 합니다 . Replace the sample bits ( which are not complete or valid ) with your assembly bits . 
 ALTER assembly ( Transact SQL ) ALTER ASSEMBLY ( Transact - SQL ) 
 DROP assembly ( Transact SQL ) DROP ASSEMBLY ( Transact - SQL ) 
 집계 ( 만들 기 Transact SQL ) CREATE AGGREGATE ( Transact - SQL ) 
 사용 시나리오 및 공용 언어 런타임 ( 에 대 한 예제 CLR ) 통합 Usage Scenarios and Examples for Common Language Runtime ( CLR ) Integration