다음을 통해 공유


CLR 통합 보안의 링크

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

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

테이블 액세스 링크는 테이블, 뷰 또는 테이블 반환 함수의 값을 검색하거나 수정하는 데 해당합니다. 호출 링크는 SELECT, INSERT, UPDATE 및 DELETE 권한 측면에서 세분화된 액세스 제어가 있다는 점을 제외하고 호출 링크와 유사합니다.

제어된 링크는 실행 중에 개체 관계가 설정된 후에는 사용 권한이 검사되지 않음을 의미합니다. 두 개체(예: 개체 x 및 개체 y) 사이에 제어된 링크가 있는 경우 개체 y 및 개체 y 에서 액세스하는 다른 개체에 대한 사용 권한은 개체x를 만들 때만 확인됩니다. 개체 x를 만들 때 xREFERENCE의 소유자에 대해 y에 대한 사용 권한이 확인됩니다. 실행 시(예: 누군가가 개체 x를 호출하는 경우)에는 정적으로 참조하는 y 또는 다른 개체에 대해 확인된 권한이 없습니다. 실행 시 개체 x 자체에 대해 적절한 권한이 확인됩니다.

제어된 링크는 항상 두 개체 간의 메타데이터 종속성과 함께 사용됩니다. 이 메타데이터 종속성은 다른 개체가 종속되는 한 개체가 삭제되지 않도록 하는 SQL Server 카탈로그에 설정된 관계입니다.

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

SQL Server Authorization-Based 보안

다음은 SQL Server 보안 검사에서 CLR 기반 데이터베이스 개체의 호출과 그 사이의 호출을 확인하는 기본 규칙입니다. 처음 세 규칙은 검사되는 사용 권한과 개체에 대해 정의합니다. 네 번째 규칙은 사용 권한이 검사되는 실행 컨텍스트를 정의합니다.

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

  2. 제어된 링크는 호출 개체를 만들 때 호출 수신자에 대한 권한이 필요합니다 REFERENCE . 개체를 만들 때 호출 개체의 소유자에 대한 사용 권한이 확인됩니다.

  3. 테이블 액세스 링크에는 액세스 중인 테이블 또는 뷰에 대한 해당 SELECT, INSERTUPDATE또는 DELETE 권한이 필요합니다.

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

또한 참조하십시오

CLR 통합 보안