Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na: SQL Server 2016 (13.x) a pozdější verze
Azure SQL Database
Azure SQL Managed Instance
SQL analytics endpoint in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL database in Microsoft Fabric
Změní zásadu zabezpečení.
Syntaxe
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 } } ]
Argumenty
security_policy_name
Název zásady zabezpečení. Názvy zásad zabezpečení musí splňovat pravidla pro identifikátory a musí být jedinečné v rámci databáze a pro jeho schéma.
schema_name
Název schématu, do kterého zásady zabezpečení patří. schema_name se vyžaduje kvůli vazbě schématu.
[ FILTR | BLOK ] **
Typ predikátu zabezpečení pro funkci vázanou na cílovou tabulku.
FILTER predikáty bezobslužně filtrují řádky, které jsou k dispozici pro operace čtení.
BLOCK predikáty explicitně blokují operace zápisu, které porušují predikát funkce.
tvf_schema_name. security_predicate_function_name
Funkce hodnoty vložené tabulky, kterou používáte jako predikát, a kterou vynucujete při dotazech na cílovou tabulku. Ve většině případů můžete definovat jeden predikát zabezpečení pro konkrétní operaci DML s konkrétní tabulkou. Pomocí této možnosti vytvořte funkci SCHEMABINDING vložené hodnoty tabulky.
{ column_name | argumenty }
Název sloupce nebo výraz použitý jako parametry pro funkci predikátu zabezpečení. Všechny sloupce v cílové tabulce lze použít jako argumenty pro predikát funkce. Výrazy, které obsahují literály, předdefinované výrazy a výrazy, které používají aritmetické operátory, lze použít.
table_schema_name.table_name
Cílová tabulka predikátu zabezpečení. Několik zakázaných zásad zabezpečení může cílit na jednu tabulku pro konkrétní operaci DML, ale v daném okamžiku je možné povolit pouze jednu.
<block_dml_operation>
Konkrétní operace DML pro použitý predikát bloku.
AFTER určuje predikát, který se vyhodnotí na hodnotách řádků po provedení operace DML (INSERT nebo UPDATE).
BEFORE určuje predikát, který se vyhodnocuje na hodnotách řádků před provedením operace DML (UPDATE nebo DELETE). Pokud není zadána žádná operace, predikát se použije pro všechny operace.
Operaci použitého predikátu bloku nemůžete změnit, protože se operace používá k jednoznačné identifikaci predikátu. Místo toho je nutné vypustit predikát a přidat nový pro novou operaci.
S ( STAV = { ON | VYPNUTO } )
Povolí nebo zakáže zásady zabezpečení vynucování predikátů zabezpečení pro cílové tabulky. Pokud není zadána zásada zabezpečení, která se vytváří, je povolená.
NE PRO REPLIKACI
Označuje, že zásady zabezpečení by se neměly spouštět, když agent replikace upraví cílový objekt. Další informace naleznete v tématu Řízení chování aktivačních událostí a omezení během synchronizace (replikace Transact-SQL programování).
table_schema_name.table_name
Cílová tabulka použitého predikátu zabezpečení. Několik zakázaných zásad zabezpečení může cílit na jednu tabulku, ale v daném okamžiku je možné povolit jenom jednu.
Poznámky
Příkaz ALTER SECURITY POLICY je v oboru transakce. Pokud je transakce vrácena zpět, příkaz se také vrátí zpět.
Při použití predikátových funkcí s tabulkami optimalizovanými pro paměť musí zásady zabezpečení obsahovat SCHEMABINDING a používat nápovědu WITH NATIVE_COMPILATION pro kompilaci. Argument SCHEMABINDING nelze změnit pomocí ALTER příkazu, protože se vztahuje na všechny predikáty. Pokud chcete změnit vazbu schématu, musíte odstranit a znovu vytvořit zásady zabezpečení.
Predikáty bloku se vyhodnocují po provedení odpovídající operace DML. V takovém případě existuje nebezpečí, kdy dotaz READ UNCOMMITTED může zobrazit přechodné hodnoty, které se vrátí zpět.
Povolení
Vyžaduje oprávnění ALTER ANY SECURITY POLICY.
Kromě toho jsou pro každý přidaný predikát vyžadována následující oprávnění:
-
SELECTaREFERENCESoprávnění k funkci, která se používá jako predikát. -
REFERENCESoprávnění k cílové tabulce, která je svázaná se zásadou. -
REFERENCESoprávnění ke každému sloupci z cílové tabulky použité jako argumenty.
Příklady
Následující příklady ukazují použití ALTER SECURITY POLICY syntaxe. Příklad kompletního scénáře zásad zabezpečení najdete v tématu Zabezpečení na úrovni řádků.
A. Přidání dalšího predikátu do zásady
Následující syntaxe změní zásadu zabezpečení a přidá do tabulky predikát mytable filtru.
ALTER SECURITY POLICY pol1
ADD FILTER PREDICATE schema_preds.SecPredicate(column1)
ON myschema.mytable;
B. Povolení existujících zásad
Následující příklad používá syntaxi ALTER k povolení zásad zabezpečení.
ALTER SECURITY POLICY pol1 WITH ( STATE = ON );
C. Přidání a vyřazení více predikátů
Následující syntaxe změní zásady zabezpečení, přidá do tabulek predikáty mytable1 filtru a mytable3 odebere predikát filtru v mytable2 tabulce.
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. Změna predikátu v tabulce
Následující syntaxe změní stávající predikát filtru v myschema.mytable tabulce na SecPredicate2 funkci.
ALTER SECURITY POLICY pol1
ALTER FILTER PREDICATE schema_preds.SecPredicate2(column1)
ON myschema.mytable;
E. Změna predikátu bloku
Změna funkce predikátu bloku pro operaci v tabulce
ALTER SECURITY POLICY rls.SecPol
ALTER BLOCK PREDICATE rls.tenantAccessPredicate_v2(TenantId)
ON dbo.Sales AFTER INSERT;