Megosztás a következőn keresztül:


BIZTONSÁGI SZABÁLYZAT LÉTREHOZÁSA (Transact-SQL)

Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziók Azure SQL DatabaseAzure SQL Managed InstanceSQL analytics endpoint in Microsoft FabricWarehouse SQL databasein Microsoft Fabric SQL database in Microsoft Fabric

Biztonsági szabályzatot hoz létre a sorszintű biztonság érdekében.

Transact-SQL szintaxis konvenciók

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

A biztonsági szabályzat neve. A biztonsági házirendek neveinek meg kell felelniük az azonosítókra vonatkozó szabályoknak, és egyedinek kell lenniük az adatbázisban és a sémában.

schema_name

Annak a sémának a neve, amelyhez a biztonsági szabályzat tartozik. schema_name sémakötés miatt szükséges.

[ FILTER | BLOKK ]

A céltáblához kötött függvény biztonsági predikátumának típusa. FILTER predikátumok csendesen szűrik az olvasási műveletekhez elérhető sorokat. BLOCK predikátumok kifejezetten blokkolják az írási műveleteket, amelyek megsértik a predikátumfüggvényt.

tvf_schema_name.security_predicate_function_name

A beágyazott tábla értékfüggvénye lesz predikátumként használva, és a céltáblán lévő lekérdezések esetén lesz érvényesítve. Legfeljebb egy biztonsági predikátum határozható meg egy adott DML-művelethez egy adott táblán. A beágyazott tábla értékfüggvényének a SCHEMABINDING beállítással kell létrejönnie.

{ column_name | kifejezés }

A biztonsági predikátumfüggvény paramétereként használt oszlopnév vagy kifejezés. A céltábla bármely oszlopa használható. A kifejezések csak állandókat tartalmazhatnak, amelyek skaláris függvényekben, operátorokban és oszlopokban találhatók a céltáblából. A függvény minden paraméteréhez oszlopnevet vagy kifejezést kell megadni.

table_schema_name.table_name

Az a céltábla, amelyre a biztonsági predikátumot alkalmazni fogja. Több letiltott biztonsági szabályzat egyetlen táblát célozhat meg egy adott DML-művelethez, de egyszerre csak egy engedélyezhető.

block_dml_operation

Az a DML-művelet, amelyre a blokk predikátumot alkalmazni fogja. AFTERazt határozza meg, hogy a predikátum a DML-művelet végrehajtása (vagy INSERT) után a sorok értékei alapján lesz kiértékelve.UPDATE BEFORE azt adja meg, hogy a predikátum kiértékelése a sorok értékein történik a DML-művelet végrehajtása előtt (UPDATE vagy DELETE). Ha nincs megadva művelet, a predikátum minden műveletre érvényes lesz.

[ STATE = { ON | KI } ]

Engedélyezi vagy letiltja, hogy a biztonsági szabályzat kényszerítse a biztonsági predikátumokat a céltáblákra. Ha nincs megadva, a létrehozott biztonsági szabályzat engedélyezve van.

[ SCHEMABINDING = { ON | KI } ]

Azt jelzi, hogy a házirend összes predikátumfüggvényét létre kell-e hozni a SCHEMABINDING beállítással. Alapértelmezés szerint ez a beállítás, ON és minden függvényt létre kell hozni a következővel SCHEMABINDING: .

REPLIKÁCIÓHOZ NEM

Azt jelzi, hogy a biztonsági szabályzat nem hajtható végre, ha egy replikációs ügynök módosítja a célobjektumot. További információ: Az eseményindítók és a kényszerek viselkedésének szabályozása a szinkronizálás során (replikáció Transact-SQL programozás).

[ table_schema_name. ] table_name

Az a céltábla, amelyre a biztonsági predikátumot alkalmazni fogja. Több letiltott biztonsági szabályzat egyetlen táblát célozhat meg, de egy adott időpontban csak egy engedélyezhető.

Remarks

Ha predikátumfüggvényeket használ memóriaoptimalizált táblákkal, a fordítási SCHEMABINDING tippet fel kell vennie WITH NATIVE_COMPILATION és használnia kell.

A blokk predikátumok kiértékelése a megfelelő DML-művelet végrehajtása után történik. Ezért fennáll a veszélye annak, hogy a READ UNCOMMITTED lekérdezések átmeneti értékeket láthatnak, amelyek vissza lesznek állítva.

Permissions

Az ALTER ANY BIZTONSÁGI HÁZIREND engedélyre és alter engedélyre van szükség a sémán.

Emellett a következő engedélyekre van szükség minden hozzáadott predikátumhoz:

  • SELECT és REFERENCES engedélyek a predikátumként használt függvényhez.

  • A szabályzathoz kötött céltáblán található HIVATKOZÁSOK engedély.

  • HIVATKOZÁSOK engedély az argumentumként használt céltábla minden oszlopán.

Examples

Az alábbi példák a szintaxis használatát CREATE SECURITY POLICY mutatják be. Egy teljes biztonsági szabályzatra példa: Sorszintű biztonság.

A. Biztonsági szabályzat létrehozása

Az alábbi szintaxis létrehoz egy biztonsági szabályzatot a dbo.Customer tábla szűrő predikátumával, és letiltja a biztonsági szabályzatot.

CREATE SECURITY POLICY [FederatedSecurityPolicy]   
ADD FILTER PREDICATE [rls].[fn_securitypredicate]([CustomerId])   
ON [dbo].[Customer];  

B. Több táblát érintő szabályzat létrehozása

Az alábbi szintaxis három különböző táblán három szűrő predikátumot tartalmazó biztonsági szabályzatot hoz létre, és engedélyezi a biztonsági szabályzatot.

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. Szabályzat létrehozása több típusú biztonsági predikátummal

Szűrő predikátum és blokk predikátum hozzáadása a dbo.Sales táblához.

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;