ALTER ASSEMBLY(Transact-SQL)

적용 대상: SQL Server Azure SQL Managed Instance

어셈블리의 SQL Server 카탈로그 속성을 수정하여 어셈블리를 변경합니다. ALTER ASSEMBLY 구현을 보유하고 연결된 파일을 추가하거나 제거하는 .NET Framework 모듈의 최신 복사본으로 새로 고칩니다. 어셈블리는 CREATE ASSEMBLY를 사용하여 만듭니다.

Transact-SQL 구문 표기 규칙

구문

ALTER ASSEMBLY assembly_name
    [ FROM <client_assembly_specifier> | <assembly_bits> ]
    [ WITH <assembly_option> [ , ...n ] ]
    [ DROP FILE { file_name [ , ...n ] | ALL } ]
    [ ADD FILE FROM
    {
        client_file_specifier [ AS file_name ]
      | file_bits AS file_name
    } [ , ...n ]
    ] [ ; ]
<client_assembly_specifier> ::=
    '\\computer_name\share-name\ [ path\ ] manifest_file_name '
  | '[ local_path\ ] manifest_file_name'

<assembly_bits> ::=
    { varbinary_literal | varbinary_expression }

<assembly_option> ::=
    PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
  | VISIBILITY = { ON | OFF }
  | UNCHECKED DATA

인수

assembly_name

수정할 어셈블리의 이름입니다. assembly_name은 데이터베이스에 이미 있어야 합니다.

FROM <client_assembly_specifier> | <assembly_bits>

어셈블리의 구현을 유지하는 .NET Framework 모듈의 최신 복사본으로 어셈블리를 업데이트합니다. 지정한 어셈블리와 관련된 파일이 없는 경우에만 이 옵션을 사용할 수 있습니다.

<client_assembly_specifier> 는 새로 고치는 어셈블리가 있는 네트워크 또는 로컬 위치를 지정합니다. 네트워크 위치에는 컴퓨터 이름, 공유 이름 및 해당 공유 내의 경로가 포함됩니다. manifest_file_name은 어셈블리의 매니페스트가 들어 있는 파일의 이름을 지정합니다.

Important

Azure SQL Database는 파일 참조를 지원하지 않습니다.

<assembly_bits> 는 어셈블리의 이진 값입니다.

또한 업데이트가 필요한 모든 종속 어셈블리에 대해 별도의 ALTER ASSEMBLY 문을 실행해야 합니다.

PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }

어셈블리의 .NET Framework 코드 액세스 권한 설정 속성을 지정합니다. 이 속성에 대한 자세한 내용은 CREATE ASSEMBLY를 참조 하세요.

PERMISSION_SET 옵션은 clr strict 보안 옵션의 영향을 받습니다. clr strict security을 사용하면 모든 어셈블리가 UNSAFE로 처리됩니다.

EXTERNAL_ACCESS 포함된 데이터베이스에서는 옵션 및 UNSAFE 옵션을 사용할 수 없습니다.

VISIBILITY = { ON | OFF }

어셈블리에 대해 CLR(공용 언어 런타임) 함수, 저장 프로시저, 트리거, 사용자 정의 형식 및 사용자 정의 집계 함수를 만들 때 어셈블리를 표시할지 여부를 나타냅니다. 로 OFF설정하면 어셈블리는 다른 어셈블리에서만 호출됩니다. 어셈블리에 대해 이미 만들어진 기존 CLR 데이터베이스 개체가 있는 경우 어셈블리의 표시 유형을 변경할 수 없습니다. assembly_name으로 참조되는 모든 어셈블리는 기본적으로 표시되지 않는 상태로 업로드됩니다.

UNCHECKED DATA

기본적으로 ALTER ASSEMBLY 개별 테이블 행의 일관성을 확인해야 하는 경우 실패합니다. 이 옵션을 사용하면 나중에 을 사용하여 검사를 연기할 수 있습니다 DBCC CHECKTABLE. 지정한 경우 SQL Server는 다음 조건을 포함하는 테이블이 데이터베이스에 있더라도 문을 실행 ALTER ASSEMBLY 합니다.

  • Transact-SQL 함수나 메서드를 통해 직접 또는 간접적으로 어셈블리의 메서드를 참조하는 지속형 계산 열

  • CHECK 어셈블리의 메서드를 직접 또는 간접적으로 참조하는 제약 조건입니다.

  • 어셈블리에 의존하는 CLR 사용자 정의 형식의 열 및 형식은 (비Native) serialization 형식을 UserDefined 구현합니다.

  • 를 사용하여 WITH SCHEMABINDING만든 뷰를 참조하는 CLR 사용자 정의 형식의 열입니다.

제약 CHECK 조건이 있으면 사용하지 않도록 설정되고 신뢰할 수 없는 것으로 표시됩니다. 어셈블리에 의존하는 열이 포함된 모든 테이블은 명시적으로 확인되기 전까지 확인되지 않은 데이터를 포함하는 것으로 표시됩니다.

db_ownerdb_ddlowner 고정 데이터베이스 역할의 멤버만이 이 옵션을 지정할 수 있습니다.

ALTER ANY SCHEMA 이 옵션을 지정하려면 권한이 필요합니다.

자세한 내용은 어셈블리 구현을 참조 하세요.

DROP FILE { file_name [ ,... n ] | ALL }

어셈블리와 관련된 특정 파일이나 모든 파일을 데이터베이스에서 제거합니다. 다음 DROP FILE 과 함께 ADD FILE 사용하는 경우 먼저 실행합니다. 이렇게 하면 파일을 동일한 파일 이름으로 바꿀 수 있습니다.

참고 항목

이 옵션은 포함된 데이터베이스 또는 Azure SQL Database에서 사용할 수 없습니다.

{ client_file_specifier [ AS file_name ]에서 파일 추가 | AS file_name } file_bits

소스 코드, 디버그 파일 또는 기타 관련 정보와 같은 어셈블리와 연결할 파일을 서버에 업로드하고 카탈로그 뷰에 sys.assembly_files 표시됩니다. client_file_specifier는 업로드할 파일이 있는 위치를 지정합니다. 이 옵션 대신 file_bits를 사용하면 파일을 구성하는 이진 값 목록을 지정할 수 있습니다. file_name은 SQL Server 인스턴스에 저장되어야 하는 파일 이름을 지정합니다. file_bits가 지정되면 file_name가 지정되어야 하고 client_file_specifier가 지정되면 선택적입니다. file_name 지정하지 않으면 client_file_specifier file_name 부분이 file_name 사용됩니다.

참고 항목

이 옵션은 포함된 데이터베이스 또는 Azure SQL Database에서 사용할 수 없습니다.

코드 액세스 보안이 지원되지 않음

CLR은 더 이상 보안 경계로 지원되지 않는 .NET Framework의 CAS(코드 액세스 보안)를 사용합니다. PERMISSION_SET = SAFE로 만든 CLR 어셈블리에서 외부 시스템 리소스에 액세스하고, 비관리 코드를 호출하고, sysadmin 권한을 얻을 수 있습니다. SQL Server 2017(14.x) 이상 버전에서 sp_configure 옵션, clr strict security는 CLR 어셈블리의 보안을 향상시킵니다. clr strict security는 기본적으로 사용되며 SAFEEXTERNAL_ACCESS 어셈블리가 UNSAFE로 표시된 것처럼 처리됩니다. clr strict security 옵션은 이전 버전과의 호환성을 위해 사용하지 않도록 설정할 수 있지만 권장하지는 않습니다.

모든 어셈블리는 master 데이터베이스에서 UNSAFE ASSEMBLY 권한이 부여된 해당 로그인이 포함된 인증서 또는 비대칭 키로 서명하는 것이 좋습니다. 또한 SQL Server 관리자는 데이터베이스 엔진에서 신뢰해야 하는 어셈블리 목록에 어셈블리를 추가할 수도 있습니다. 자세한 내용은 sys.sp_add_trusted_assembly를 참조하세요.

설명

ALTER ASSEMBLY 는 수정 중인 어셈블리에서 코드를 실행하는 현재 실행 중인 세션을 중단하지 않습니다. 현재 세션은 어셈블리의 변경되지 않은 비트를 사용하여 실행이 완료됩니다.

절이 FROM 지정된 경우 제공된 ALTER ASSEMBLY 모듈의 최신 복사본과 관련하여 어셈블리를 업데이트합니다. 어셈블리에 대해 이미 정의된 SQL Server 인스턴스에 CLR 함수, 저장 프로시저, 트리거, 데이터 형식 및 사용자 정의 집계 함수가 있을 수 있으므로 문은 이를 어셈블리 ALTER ASSEMBLY 의 최신 구현으로 다시 바인딩합니다. 이렇게 다시 바인딩하기 위해서는 동일한 서명의 수정된 어셈블리에도 CLR 함수, 저장 프로시저 및 트리거를 매핑하는 메서드가 있어야 합니다. CLR 사용자 정의 형식 및 사용자 정의 집계 함수를 구현하는 클래스는 여전히 사용자 정의 형식이나 집계에 대한 요구 사항을 충족해야 합니다.

주의

지정되지 않은 경우 WITH UNCHECKED DATA SQL Server는 새 어셈블리 버전이 테이블, 인덱스 또는 기타 영구 사이트의 기존 데이터에 영향을 미치는 경우 실행을 방지 ALTER ASSEMBLY 하려고 합니다. 그러나 SQL Server는 CLR 어셈블리가 업데이트될 때 계산 열, 인덱스, 인덱싱된 뷰 또는 식이 기본 루틴 및 형식과 일치하도록 보장하지 않습니다. 실행할 ALTER ASSEMBLY 때 식 결과와 어셈블리에 저장된 해당 식을 기반으로 하는 값이 일치하지 않도록 하려면 주의해야 합니다.

ALTER ASSEMBLY 어셈블리 버전을 변경합니다. 어셈블리의 culture 및 공개 키 토큰은 동일하게 유지됩니다.

다음 항목을 변경하는 데 문을 ALTER ASSEMBLY 사용할 수 없습니다.

  • 어셈블리를 참조하는 SQL Server 인스턴스의 CLR 함수, 집계 함수, 저장 프로시저 및 트리거의 서명. SQL Server가 SQL Server의 .NET Framework 데이터베이스 개체를 새 버전의 어셈블리로 다시 바인딩할 수 없는 경우 ALTER ASSEMBLY가 실패합니다.

  • 다른 어셈블리에서 호출되는 어셈블리에 있는 메서드의 서명

  • 어셈블리의 속성에서 DependentList 참조되는 어셈블리에 의존하는 어셈블리 목록입니다.

  • 해당 메서드에 직접 또는 간접적으로 의존하는 인덱스나 지속형 계산 열이 없는 경우 메서드의 인덱싱 가능성

  • FillRow CLR 테이블 반환 함수의 메서드 이름 특성입니다.

  • Accumulate 사용자 정의 집계에 대한 및 Terminate 메서드 서명입니다.

  • 시스템 어셈블리

  • 어셈블리 소유권. 대신 ALTER AUTHORIZATION를 사용합니다.

또한 사용자 정의 형식 ALTER ASSEMBLY 을 구현하는 어셈블리의 경우 다음 변경 내용만 만드는 데 사용할 수 있습니다.

  • 서명 또는 특성이 변경되지 않는 한 사용자 정의 형식 클래스의 공용 메서드 수정

  • 새 공용 메서드를 추가하는 경우

  • 프라이빗 메서드를 어떤 방식으로든 수정하는 경우

데이터 멤버 또는 기본 클래스를 포함하여 네이티브 직렬화된 사용자 정의 형식 내에 포함된 필드는 사용하여 ALTER ASSEMBLY변경할 수 없습니다. 다른 모든 변경은 지원되지 않습니다.

지정 ALTER ASSEMBLY 하지 않으면 ADD FILE FROM 어셈블리와 연결된 파일을 삭제합니다.

데이터 절 없이 UNCHECKED 실행되는 경우 ALTER ASSEMBLY 새 어셈블리 버전이 테이블의 기존 데이터에 영향을 주지 않는지 확인하기 위해 검사가 수행됩니다. 확인해야 하는 데이터의 양에 따라 이 단계가 성능에 영향을 줄 수 있습니다.

사용 권한

ALTER 어셈블리에 대한 권한이 필요합니다. 추가 요구 사항은 다음과 같습니다.

  • 기존 사용 권한 집합 EXTERNAL_ACCESS이 있는 어셈블리를 변경하려면 서버에 대한 권한이 필요합니다 EXTERNAL ACCESS ASSEMBLY .

  • 기존 사용 권한 집합 UNSAFE 에 서버에 대한 권한이 필요한 어셈블리를 변경합니다 UNSAFE ASSEMBLY .

  • 어셈블리의 사용 권한 집합을 EXTERNAL_ACCESS변경하려면 서버에 대한 권한이 필요합니다 EXTERNAL ACCESS ASSEMBLY .

  • 어셈블리의 사용 권한 집합을 UNSAFE변경하려면 서버에 대한 권한이 필요합니다 UNSAFE ASSEMBLY .

  • 지정하려면 WITH UNCHECKED DATA 권한이 필요합니다 ALTER ANY SCHEMA .

엄격한 CLR 보안 사용 권한

clr strict security를 사용할 때 CLR 어셈블리를 만드는 데 필요한 권한은 다음과 같습니다.

  • 사용자에게 ALTER ASSEMBLY 권한이 있어야 합니다.

  • 다음 조건 중 하나가 충족되어야 합니다.

    • 어셈블리는 서버에 대한 UNSAFE ASSEMBLY 권한이 있는 해당 로그인이 포함된 인증서 또는 비대칭 키로 서명됩니다. 어셈블리에 서명하는 것이 좋습니다.

    • 데이터베이스는 ON으로 설정된 TRUSTWORTHY 속성을 가지고 있고 서버에 대한 UNSAFE ASSEMBLY 권한이 있는 로그인으로 소유됩니다. 이 옵션은 권장되지 않습니다.

어셈블리 권한 집합에 대한 자세한 내용은 어셈블리 디자인을 참조 하세요.

예제

A. 어셈블리 새로 고침

다음 예에서는 ComplexNumber 어셈블리를 어셈블리의 구현을 유지하는 .NET Framework 모듈의 최신 복사본으로 업데이트합니다.

참고 항목

샘플 스크립트를 실행하여 어셈블리 ComplexNumberUserDefinedDataType 만들 수 있습니다. 자세한 내용은 사용자 정의 형식을 참조하세요.

 ALTER ASSEMBLY ComplexNumber
 FROM 'C:\Program Files\Microsoft SQL Server\130\Tools\Samples\1033\Engine\Programmability\CLR\UserDefinedDataType\CS\ComplexNumber\obj\Debug\ComplexNumber.dll'

Important

Azure SQL Database는 파일 참조를 지원하지 않습니다.

B. 어셈블리와 연결할 파일 추가

다음 예에서는 Class1.cs 어셈블리와 연결할 소스 코드 파일 MyClass를 업로드합니다. 이 예에서는 데이터베이스에 이미 MyClass 어셈블리가 있다고 가정합니다.

ALTER ASSEMBLY MyClass
ADD FILE FROM 'C:\MyClassProject\Class1.cs';

Important

Azure SQL Database는 파일 참조를 지원하지 않습니다.

C. 어셈블리의 사용 권한 변경

다음 예에서는 ComplexNumber 어셈블리 사용 권한 설정을 SAFE에서 EXTERNAL ACCESS로 변경합니다.

ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS;