CREATE SECURITY POLICY(Transact-SQL)
적용 대상: Microsoft Fabric의 Microsoft Fabric Warehouse에 있는 SQL Server 2016(13.x) 이상 버전 Azure SQL Database Azure SQL Managed Instance SQL 분석 엔드포인트
행 수준 보안에 대한 보안 정책을 만듭니다.
구문
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 } } ]
인수
security_policy_name
보안 정책의 이름입니다. 보안 정책 이름은 식별자에 대한 규칙을 따라야 하며 데이터베이스에서 각 스키마별로 고유해야 합니다.
schema_name
보안 정책이 속한 스키마의 이름입니다. 스키마 바인딩 때문에 schema_name이 필요합니다.
[ FILTER | BLOCK ]
대상 테이블에 바인딩되어 있는 함수에 대한 보안 조건자의 형식입니다. FILTER
조건자는 읽기 작업에 사용할 수 있는 행을 자동으로 필터링합니다. BLOCK
조건자는 조건자 함수를 위반하는 쓰기 작업을 명시적으로 차단합니다.
tvf_schema_name.security_predicate_function_name
조건자로 사용되고 대상 테이블에 대한 쿼리 시 적용될 인라인 테이블 값 함수입니다. 특정 테이블에 대한 특정 DML 작업을 위해 최대 하나의 보안 조건자를 정의할 수 있습니다. 이 옵션을 사용하여 인라인 테이블 값 함수를 SCHEMABINDING
만들었어야 합니다.
{ column_name | expression }
보안 조건자 함수를 위한 매개 변수로 사용되는 열 이름 또는 식입니다. 대상 테이블에서 열을 사용할 수 있습니다. 식에는 상수, 기본 제공 스칼라 함수, 연산자 및 대상 테이블의 열만이 포함될 수 있습니다. 열 이름 또는 식은 함수의 각 매개 변수에 대해 지정되어야 합니다.
table_schema_name.table_name
보안 조건자를 적용할 대상 테이블입니다. 사용되지 않도록 설정된 여러 보안 정책이 특정 DML 작업용 단일 테이블을 대상으로 할 수 있지만 지정된 시간에 하나만 사용할 수 있습니다.
block_dml_operation
차단 조건자가 적용될 특정 DML 작업입니다. AFTER
는 DML 작업이 수행INSERT
된 후(또는 UPDATE
) 행 값에 대해 조건자가 평가되도록 지정합니다. BEFORE
는 DML 작업이 수행UPDATE
되기 전에 행 값에 대해 조건자가 평가되도록 지정합니다( 또는 DELETE
). 작업이 지정되지 않은 경우 조건자는 모든 작업에 적용됩니다.
[ STATE = { ON | OFF } ]
대상 테이블에 대해 해당 보안 조건자를 강제 적용하여 보안 정책을 사용하거나 사용하지 않도록 설정합니다. 지정되지 않으면 생성되는 보안 정책이 사용되도록 설정됩니다.
[ SCHEMABINDING = { ON | OFF } ]
옵션으로 SCHEMABINDING
정책의 모든 조건자 함수를 만들어야 하는지 여부를 나타냅니다. 기본적으로 이 설정은 ON
.을 사용하여 모든 함수를 만들어야 SCHEMABINDING
합니다.
NOT FOR REPLICATION
복제 에이전트가 대상 개체를 수정할 때 보안 정책을 실행하면 안 됨을 나타냅니다. 자세한 내용은 동기화하는 동안 트리거 및 제약 조건 동작 제어(복제 Transact-SQL 프로그래밍)를 참조하세요.
[ table_schema_name. ] table_name
보안 조건자를 적용할 대상 테이블입니다. 사용되지 않도록 설정된 보안 정책은 여러 개가 단일 테이블을 대상으로 할 수 있지만 지정된 시간에 하나만 사용하도록 설정할 수 있습니다.
설명
메모리 최적화 테이블과 함께 조건자 함수를 사용하는 경우 컴파일 힌트를 WITH NATIVE_COMPILATION
포함하고 SCHEMABINDING
사용해야 합니다.
차단 조건자는 해당 DML 작업이 실행된 후 평가됩니다. 따라서 READ UNCOMMITTED 쿼리에서 롤백될 임시 값을 볼 수 있는 위험이 있습니다.
사용 권한
스키마에 대한 ALTER ANY SECURITY POLICY 권한 및 ALTER 권한이 필요합니다.
또한 추가된 각 조건자에는 다음 권한이 필요합니다.
조건자로 사용 되는 함수에 대한 SELECT 및 REFERENCES 권한.
정책에 바인딩되는 대상 테이블에 대한 REFERENCES 권한.
인수로 사용하는 대상 테이블의 모든 열에 대한 REFERENCES 권한.
예제
다음 예제에서는 구문을 사용하는 방법을 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;