Sdílet prostřednictvím


ZMĚNA BEZPEČNOSTNÍ POLITIKY (Transact-SQL)

Platí na: SQL Server 2016 (13.x) a pozdější verze Azure SQL DatabaseAzure SQL Managed InstanceSQL analytics endpoint in Microsoft FabricWarehouse in Microsoft FabricSQL database in Microsoft Fabric

Změní zásadu zabezpečení.

Transact-SQL konvence syntaxe

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í:

  • SELECT a REFERENCES oprávnění k funkci, která se používá jako predikát.
  • REFERENCES oprávnění k cílové tabulce, která je svázaná se zásadou.
  • REFERENCES oprá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;