다음을 통해 공유


분산형 분할 뷰의 메타데이터 표시 문제 해결

권한이 적은 사용자가 분산형 분할 뷰를 통해 데이터를 삽입, 업데이트 또는 삭제하려고 시도하면 SQL Server에서 다음 오류를 생성합니다.

오류 4436 "분할 열을 찾을 수 없으므로 UNION ALL 뷰 '%.*ls'을(를) 업데이트할 수 없습니다."

이 문제는 모든 기본 테이블이 동일한 SQL Server 인스턴스에 있는 경우와 같은 로컬 분할 뷰에는 영향을 주지 않습니다.

배경

분산 쿼리의 경우 SQL Server에서 원격(연결된) 서버의 테이블에 있는 CHECK 제약 조건의 SQL 정의를 읽을 수 있어야 합니다. 즉, 분산 쿼리의 호출자에게 원격 테이블에 대한 CONTROL, ALTER, TAKE OWNERSHIP 또는 VIEW DEFINITION 권한이 있어야 합니다. 분산 쿼리의 호출자에게 이 사용 권한 중 하나가 없으면 쿼리가 실패하고 오류 4436이 표시됩니다.

[!참고]

사용자에게 이러한 사용 권한 중 하나가 없을 경우 사용자가 카탈로그를 쿼리하면 sys.check_constraintsdefinition 열 값이 NULL이 됩니다.

오류 4436을 해결하려면

호출자가 CHECK 제약 조건의 정의를 볼 수 있게 하려면 분산형 분할 뷰의 기반이 되는 모든 대상 테이블에 대한 VIEW DEFINITION 권한을 해당 호출자에게 부여합니다.

예를 들어 Server1 및 Server2가 연결된 서버이며 서로 연결된 서버로 정의되었다고 가정해 보십시오. master.dbo.t1은 dpv_users 데이터베이스 역할의 모든 멤버가 액세스할 수 있는 분할 테이블이라고 가정합니다. 또한 dpv_users에는 분산형 분할 뷰에서 SELECT, INSERT, UPDATE 및 DELETE 권한을 가진 모든 사용자가 포함된다고 가정합니다.

연결된 각 서버에서 다음 코드를 실행합니다.

CREATE TABLE t1(c INT PRIMARY KEY CHECK (...)) ; -- CHECK is different on each server.
GO

GRANT SELECT, INSERT, UPDATE, DELETE, VIEW DEFINITION ON t1 TO dpv_users ;
GO

CREATE VIEW the_dpv AS
    SELECT * FROM Server1.master.dbo.t1
    UNION ALL
    SELECT * FROM Server2.master.dbo.t1 
GO