ALTER SECURITY POLICY(Transact-SQL)
적용 대상: Microsoft Fabric의 Microsoft Fabric Warehouse에 있는 SQL Server 2016(13.x) 이상 버전 Azure SQL Database Azure SQL Managed Instance SQL 분석 엔드포인트
보안 정책을 변경합니다.
구문
ALTER SECURITY POLICY schema_name.security_policy_name
(
{ ADD { FILTER | BLOCK } PREDICATE tvf_schema_name.security_predicate_function_name
( { column_name | arguments } [ , ...n ] ) ON table_schema_name.table_name
[ <block_dml_operation> ] }
| { ALTER { FILTER | BLOCK } PREDICATE tvf_schema_name.new_security_predicate_function_name
( { column_name | arguments } [ , ...n ] ) ON table_schema_name.table_name
[ <block_dml_operation> ] }
| { DROP { FILTER | BLOCK } PREDICATE ON table_schema_name.table_name }
| [ <additional_add_alter_drop_predicate_statements> [ , ...n ] ]
) [ WITH ( STATE = { 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 | 인수 }
보안 조건자 함수를 위한 매개 변수로 사용되는 열 이름 또는 식입니다. 대상 테이블에 있는 모든 열은 조건자 함수를 위한 인수로 사용할 수 있습니다. 리터럴과 기본 제공 항목, 산술 연산자를 사용하는 식을 포함하는 식을 사용할 수 있습니다.
table_schema_name.table_name
보안 조건자의 대상 테이블입니다. 사용되지 않도록 설정된 여러 보안 정책이 특정 DML 작업용 단일 테이블을 대상으로 할 수 있지만 지정된 시간에 하나만 사용할 수 있습니다.
<block_dml_operation>
적용된 차단 조건자에 대한 특정 DML 작업입니다. AFTER
는 DML 작업이 수행된 후(또는UPDATE
) 행 값에 대해 조건자가 평가됨을INSERT
지정합니다. BEFORE
는 DML 작업이 수행되기 전에 행 값에 대해 조건자가 평가됨을UPDATE
지정합니다 DELETE
. 작업이 지정되지 않은 경우 조건자는 모든 작업에 적용됩니다.
작업은 조건자를 고유하게 식별하는 데 사용되기 때문에 적용된 차단 조건자에 대해 작업을 변경(ALTER)할 수 없습니다. 대신 조건자를 삭제하고 새 작업에 새 조건자를 추가해야 합니다.
WITH ( STATE = { ON | OFF } )
대상 테이블에 대해 해당 보안 조건자를 강제 적용하여 보안 정책을 사용하거나 사용하지 않도록 설정합니다. 지정되지 않으면 생성되는 보안 정책이 사용되도록 설정됩니다.
NOT FOR REPLICATION
복제 에이전트가 대상 개체를 수정할 때 보안 정책을 실행하면 안 됨을 나타냅니다. 자세한 내용은 동기화하는 동안 트리거 및 제약 조건 동작 제어(복제 Transact-SQL 프로그래밍)를 참조하세요.
table_schema_name.table_name
적용된 보안 조건자의 대상 테이블입니다. 사용되지 않도록 설정된 보안 정책은 여러 개가 단일 테이블을 대상으로 할 수 있지만 지정된 시간에 하나만 사용하도록 설정할 수 있습니다.
설명
ALTER SECURITY POLICY 문은 트랜잭션 범위 내에 있습니다. 트랜잭션이 롤백되면 이 문도 롤백됩니다.
메모리 최적화 테이블과 함께 조건자 함수를 사용하는 경우 보안 정책은 컴파일 힌트를 WITH NATIVE_COMPILATION
포함하고 SCHEMABINDING
사용해야 합니다. 인수는 SCHEMABINDING
모든 조건자에서 ALTER
적용되므로 문으로 변경할 수 없습니다. 스키마 바인딩을 변경하려면 보안 정책을 삭제하고 다시 만들어야 합니다.
차단 조건자는 해당 DML 작업이 실행된 후 평가됩니다. 따라서 READ UNCOMMITTED 쿼리에서 롤백될 임시 값을 볼 수 있는 위험이 있습니다.
사용 권한
ALTER ANY SECURITY POLICY
권한이 필요합니다.
또한 추가된 각 조건자에는 다음 권한이 필요합니다.
SELECT
조건자로 사용되는 함수에 대한 권한과REFERENCES
REFERENCES
정책에 바인딩되는 대상 테이블에 대한 사용 권한입니다.REFERENCES
인수로 사용되는 대상 테이블의 모든 열에 대한 사용 권한입니다.
예제
다음 예제에서는 구문을 사용하는 방법을 ALTER SECURITY POLICY
보여 줍니다. 전체 보안 정책 시나리오의 예는 행 수준 보안을 참조하세요.
A. 정책에 추가 조건자 추가
다음 구문은 mytable
테이블에서 필터 조건자를 추가하여 보안 정책을 변경합니다.
ALTER SECURITY POLICY pol1
ADD FILTER PREDICATE schema_preds.SecPredicate(column1)
ON myschema.mytable;
B. 기존 정책 사용
다음 예에서는 ALTER 구문을 사용하여 보안 정책을 사용하도록 설정합니다.
ALTER SECURITY POLICY pol1 WITH ( STATE = ON );
C. 여러 조건자 추가 및 삭제
다음 구문은 mytable1
및 mytable3
테이블에서 필터 조건자를 추가하고 mytable2
테이블에서 필터 조건자를 제거하여 보안 정책을 변경합니다.
ALTER SECURITY POLICY pol1
ADD FILTER PREDICATE schema_preds.SecPredicate1(column1)
ON myschema.mytable1,
DROP FILTER PREDICATE
ON myschema.mytable2,
ADD FILTER PREDICATE schema_preds.SecPredicate2(column2, 1)
ON myschema.mytable3;
D. 테이블의 조건자 변경
다음 구문은 테이블의 기존 필터 조건자를 myschema.mytable
함수로 SecPredicate2
변경합니다.
ALTER SECURITY POLICY pol1
ALTER FILTER PREDICATE schema_preds.SecPredicate2(column1)
ON myschema.mytable;
E. 블록 조건자 변경
테이블 작업에 대한 차단 조건자 함수를 변경합니다.
ALTER SECURITY POLICY rls.SecPol
ALTER BLOCK PREDICATE rls.tenantAccessPredicate_v2(TenantId)
ON dbo.Sales AFTER INSERT;