2017-09-20 4 views
2

데이터베이스에 RBAC-RLS 보안을 구현 중이며 질문이 있습니다. 다음은 시나리오입니다.동일한 테이블에 여러 보안 조건 (FILTER | BLOCK)이 있습니다.

로깅 된 사용자에게 해당 권한이 있는지 확인하는 입력 매개 변수 @PermissionId이있는 하나의 입력 매개 변수가있는 함수가 있습니다. 데이터베이스의 각 역할은 여러 사용 권한과 연결되며 각 사용자는 여러 역할을 가질 수 있습니다.

테이블이 Products이고 권한이 ReadProducts 인 사용자 만 테이블의 내용을 볼 수 있다고 가정 해 봅시다.

CREATE SECURITY POLICY ReadProducts 
ADD FILTER PREDICATE HasPermission('ReadProducts') ON Products 

그리고는 OK,하지만 지금 나는 또한 권한 SystemAdministrator이 그가 필요도 Products 테이블의 내용을 볼 수있는 권한을 가지고.

나는 그것이 가정된다, 또는 두 정책 사이에 충돌이있을 것 같은 다른 정책

CREATE SECURITY POLICY ReadProducts 
ADD FILTER PREDICATE HasPermission('SystemAdministrator') ON Products 

가 작동겠습니까 추가하면?

다른 상황에서 첫 번째 정책에 다른 필터 조건자를 추가하면 어떻게됩니까? 그러면 다음과 같이됩니다 :

CREATE SECURITY POLICY ReadProducts 
ADD FILTER PREDICATE HasPermission('ReadProducts') ON Products 
ADD FILTER PREDICATE HasPermission('SystemAdmin') ON Products 

괜찮을까요? 내 말은 사용자가이 두 가지 권한 중 하나를 가지고 테이블 Products의 내용을 볼 수있을 것인가?

답변

1

알아 냈습니다. 따라서 여기에 있습니다 :

동일한 데이터베이스 테이블에 2 개의 보안 정책을 사용할 수 없으며 두 번째 보안 정책을 만들 수 없습니다. - 오류가 발생합니다.

또한 동일한 보안 정책의 동일한 테이블에 2 개의 FILTER 술어를 사용할 수 없습니다. - 당신은 오류가 발생합니다

솔루션 :

CREATE SECURITY POLICY [Log] 
ADD FILTER PREDICATE [dbo].[HasSecurityPermission]('ReadLog') ON [dbo].[table], 
ADD BLOCK PREDICATE [dbo].[HasSecurityPermission]('AddLog') ON [dbo].[table] AFTER INSERT, 
ADD BLOCK PREDICATE [dbo].[HasSecurityPermission]('EditLog') ON [dbo].[table] BEFORE UPDATE, 
ADD BLOCK PREDICATE [dbo].[HasSecurityPermission]('RemoveLog') ON [dbo].[table] BEFORE DELETE 

그래서 당신이 각 데이터베이스에 대해 4 권한이 필요합니다 이 같은 1 개 필터와 3-4 블록 술어와 데이터베이스의 각 테이블에 대한 보안 정책 만들기 마지막으로 사용자 유형 (공용 사용자, 데모, 시스템 관리자, 수퍼 유저 ...)만큼 많은 역할을 생성하고 원하는 권한으로 연결하십시오.

그게 전부 야!