SQL 데이터베이스 엔진 row-level security 보안 정책을 만듭니다.
Fabric Data Warehouse 행 수준 보안은 다른 SQL 데이터베이스 엔진 제품과 유사하게 작동합니다. Fabric Data Warehouse 또는 SQL 분석 엔드포인트의 행 수준 보안에 대한 자세한 내용과 예제는 Fabric 데이터 웨어하우징의 수준 보안 참조하세요.
Syntax
CREATE SECURITY POLICY [schema_name. ] security_policy_name
{ ADD [ FILTER | BLOCK ] } PREDICATE tvf_schema_name.security_predicate_function_name
( { column_name | expression } [ , ...n] ) ON table_schema_name. table_name
[ <block_dml_operation> ] , [ , ...n]
[ WITH ( STATE = { ON | OFF } [,] [ SCHEMABINDING = { ON | OFF } ] ) ]
[ NOT FOR REPLICATION ]
[;]
<block_dml_operation>
[ { AFTER { INSERT | UPDATE } }
| { BEFORE { UPDATE | DELETE } } ]
Arguments
security_policy_name
보안 정책의 이름입니다. 보안 정책 이름은 식별자에 대한 규칙을 따르고 데이터베이스 및 해당 스키마 내에서 고유해야 합니다.
schema_name
보안 정책이 속한 스키마의 이름입니다. 스키마 바인딩 때문에 schema_name이 필요합니다.
[ 필터 | 차단 ]
대상 테이블에 바인딩할 함수에 대한 보안 조건자의 형식입니다.
-
FILTER조건자는 읽기 작업에 사용할 수 있는 행을 자동으로 필터링합니다. -
BLOCK조건자는 조건자 함수를 위반하는 쓰기 작업을 명시적으로 차단합니다.
tvf_schema_name.security_predicate_function_name
조건자로 사용되며 대상 테이블에 대한 쿼리에 적용되는 인라인 테이블 값 함수입니다. 특정 테이블에 대한 특정 DML 작업을 위해 최대 하나의 보안 조건자를 정의할 수 있습니다. 이 옵션을 사용하여 인라인 테이블 값 함수를 SCHEMABINDING 만들었어야 합니다.
{ column_name | 표현 식 }
보안 조건자 함수를 위한 매개 변수로 사용되는 열 이름 또는 식입니다. 대상 테이블에서 열을 사용할 수 있습니다. 식에는 대상 테이블의 스칼라 함수, 연산자 및 열에 기본 제공되는 상수만 포함될 수 있습니다. 열 이름 또는 식은 함수의 각 매개 변수에 대해 지정되어야 합니다.
table_schema_name.table_name
보안 조건자가 적용될 대상 테이블입니다. 사용되지 않도록 설정된 여러 보안 정책이 특정 DML 작업용 단일 테이블을 대상으로 할 수 있지만 지정된 시간에 하나만 사용할 수 있습니다.
block_dml_operation
차단 조건자가 적용될 특정 DML 작업입니다.
AFTER 는 DML 작업이 수행INSERT 된 후(또는 UPDATE) 행 값에 대해 조건자가 평가되도록 지정합니다.
BEFORE 는 DML 작업이 수행UPDATE 되기 전에 행 값에 대해 조건자가 평가되도록 지정합니다( 또는 DELETE). 작업이 지정되지 않은 경우 조건자는 모든 작업에 적용됩니다.
[ 상태 = { ON | 꺼짐 } ]
대상 테이블에 대해 해당 보안 조건자를 강제 적용하여 보안 정책을 사용하거나 사용하지 않도록 설정합니다. 지정되지 않으면 생성되는 보안 정책이 사용되도록 설정됩니다.
[ 스키마바인딩 = { ON | 꺼짐 } ]
옵션으로 SCHEMABINDING 정책의 모든 조건자 함수를 만들어야 하는지 여부를 나타냅니다. 기본적으로 이 설정은 ON .을 사용하여 모든 함수를 만들어야 SCHEMABINDING합니다.
복제용이 아님
복제 에이전트가 대상 개체를 수정할 때 보안 정책을 실행하면 안 됨을 나타냅니다. 자세한 내용은 동기화 중 트리거 및 제약 조건 동작(복제 Transact-SQL 프로그래밍) 을 참조하세요.
[ table_schema_name. ] table_name
보안 조건자가 적용될 대상 테이블입니다. 사용되지 않도록 설정된 보안 정책은 여러 개가 단일 테이블을 대상으로 할 수 있지만 지정된 시간에 하나만 사용하도록 설정할 수 있습니다.
Remarks
메모리 최적화 테이블과 함께 조건자 함수를 사용하는 경우 컴파일 힌트를 SCHEMABINDING 포함하고 WITH NATIVE_COMPILATION 사용해야 합니다.
차단 조건자는 해당 DML 작업이 실행된 후 평가됩니다. 따라서 쿼리에서 롤백될 임시 값을 볼 수 있는 위험이 READ UNCOMMITTED 있습니다.
Permissions
스키마에 ALTER ANY SECURITY POLICY 대한 사용 권한 및 ALTER 권한이 필요합니다.
또한 추가된 각 조건자에는 다음 권한이 필요합니다.
조건자로 사용 되는 함수에 대한
SELECT및REFERENCES권한.정책에 바인딩되는 대상 테이블에 대한
REFERENCES권한.인수로 사용하는 대상 테이블의 모든 열에 대한
REFERENCES권한.
Examples
다음 예제에서는 구문을 사용하는 방법을 CREATE SECURITY POLICY 보여 줍니다. 전체 보안 정책 시나리오의 예는 행 수준 보안을 참조하세요.
A. 보안 정책 만들기
다음 구문은 테이블에 대한 dbo.Customer 필터 조건자를 사용하여 보안 정책을 만들고 보안 정책을 사용하지 않도록 설정합니다.
CREATE SECURITY POLICY [FederatedSecurityPolicy]
ADD FILTER PREDICATE [rls].[fn_securitypredicate]([CustomerId])
ON [dbo].[Customer];
B. 여러 테이블에 영향을 주는 정책 만들기
다음 구문은 서로 다른 세 테이블에서 3개의 필터 조건자를 사용하여 보안 정책을 만들고 보안 정책을 사용하도록 설정합니다.
CREATE SECURITY POLICY [FederatedSecurityPolicy]
ADD FILTER PREDICATE [rls].[fn_securitypredicate1]([CustomerId])
ON [dbo].[Customer],
ADD FILTER PREDICATE [rls].[fn_securitypredicate1]([VendorId])
ON [dbo].[ Vendor],
ADD FILTER PREDICATE [rls].[fn_securitypredicate2]([WingId])
ON [dbo].[Patient]
WITH (STATE = ON);
C. 여러 유형의 보안 조건자를 사용하여 정책 만들기
테이블에 필터 조건자와 블록 조건자를 모두 추가합니다 dbo.Sales .
CREATE SECURITY POLICY rls.SecPol
ADD FILTER PREDICATE rls.tenantAccessPredicate(TenantId) ON dbo.Sales,
ADD BLOCK PREDICATE rls.tenantAccessPredicate(TenantId) ON dbo.Sales AFTER INSERT;