CLR 통합 보안의 링크

 

이 섹션에서는 SQL Server에서 사용자 코드 조각이 Transact-SQL 또는 관리 언어 중 하나로 상호 호출하는 방법을 설명합니다. 개체 간의 이러한 관계를 링크라고 합니다.

호출 링크

호출 링크는 개체를 호출하는 사용자(예: 저장 프로시저를 호출하는 Transact-SQL 일괄 처리)나 CLR(공용 언어 런타임) 저장 프로시저 또는 함수에서의 코드 호출에 해당합니다. 호출 링크 원인은 EXECUTE 검사할 호출 수신자에 대 한 권한이 있습니다.

테이블 액세스 링크

테이블 액세스 링크는 테이블, 뷰 또는 테이블 반환 함수의 값을 검색하거나 수정하는 것에 해당합니다. 테이블 액세스 링크는 SELECT, INSERT, UPDATE 및 DELETE 권한에 따라 액세스를 보다 세부적으로 제어한다는 점을 제외하고는 호출 링크와 유사합니다.

게이트 링크

게이트 링크는 권한이 설정된 후에는 실행하는 동안 전체 개체 관계에서 권한을 확인하지 않는다는 것을 의미합니다. 두 개체 간 게이트 링크가 없는 경우 (예를 들어 개체 x 및 개체 y), 개체에 대 한 권한을 y 및 기타 개체를 개체에서 액세스 y 개체의 생성 시간에만 확인 됩니다 x합니다. 개체의 생성 시 x, 참조 권한을 확인 y 의 소유자에 대 한 x합니다. 실행 시 (예를 들어 개체를 호출 하는 사용자 x), 대조 권한은 y 또는 기타 개체를 정적으로 참조 합니다. 실행 시 적절 한 권한이 개체에 대해 확인 됩니다 x 자체입니다.

게이트 링크는 항상 두 개체 사이의 메타데이터 종속성과 함께 사용됩니다. 이 메타데이터 종속성은 다른 개체가 종속되어 있는 경우 개체를 삭제하지 못하게 하는 관계로, SQL Server 카탈로그에서 설정합니다.

여러 종속 개체에 권한을 부여하는 것이 적절하지 않거나 관리하기 어려울 경우에 게이트 링크를 사용할 수 있습니다. CLR 어셈블리로의 Transact-SQL 진입점을 정의하는 개체(예: CLR 프로시저, 트리거, 함수, 형식 및 집계)와 이 개체가 정의된 어셈블리 사이에 게이트 링크가 사용됩니다. 이러한 개체에 대한 게이트 보안은 CLR 어셈블리에 정의된 Transact-SQL 진입점을 호출하려면 호출자에게 해당 Transact-SQL 진입점에 대한 적절한 권한만 있으면 된다는 것을 의미합니다. 호출자에게 해당 어셈블리나 이 어셈블리가 정적으로 참조하는 다른 어셈블리에 대한 권한은 없어도 됩니다. 어셈블리에 대한 권한은 Transact-SQL 진입점을 만들 때 확인됩니다.

SQL Server 권한 부여 기반 보안

다음은 CLR 기반 데이터베이스 개체의 호출 및 이들 개체 상호 간의 호출에 대한 SQL Server 보안 검사의 기본 규칙입니다. 처음 세 규칙은 어떤 권한을 어떤 개체에 대해 확인하는지를 정의하고 네 번째 규칙은 권한 확인의 실행 컨텍스트를 정의합니다.

  1. 모든 호출에 필요한 EXECUTE 권한에서는 호출 된 동일한 개체 내에서 발생 하지 않는 경우 즉, 동일한 어셈블리 내는 호출 되는 사용 권한 검사를 필요 하지 않습니다. 권한 확인은 실행 시 수행됩니다.

  2. 게이트 링크 필요 참조 호출 하는 개체를 만들 때 호출 수신자에 대해 권한이 있습니다. 개체를 만들 때 호출하는 개체의 소유자에 대한 권한을 확인합니다.

  3. 테이블 액세스 링크를 사용 하려면 해당 선택, 삽입, 업데이트, 또는 삭제 테이블 또는 뷰에 액세스 하 고에 대 한 사용 권한입니다.

  4. 권한 확인은 현재 실행 컨텍스트에 대해 수행됩니다. 호출자와 다른 실행 컨텍스트에서 프로시저와 함수를 만들 수 있습니다. 어셈블리는 항상 해당 어셈블리에 대해 정의된 프로시저, 함수 또는 트리거의 실행 컨텍스트에서 만들어집니다.

참고 항목

CLR 통합 보안