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


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

A következőkre vonatkozik: : SQL Server 2016 (13.x) és újabb verziók Azure SQL DatabaseAzure SQL Managed InstanceSQL-elemzési végpont a Microsoft FabricWarehouse in Microsoft FabricSQL-adatbázis a Microsoft Fabric

Biztonsági szabályzatot hoz létre szintű biztonsághoz az SQL Database Engine.

A sorszintű biztonság a Fabric Data Warehouse más SQL-Database Engine termékekhez hasonlóan működik. Az Fabric Data Warehouse vagy az SQL Analytics-végpont sorszintű biztonságával kapcsolatos további információkért és példákért lásd: Az adatraktározási Fabric.

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 az azonosítókra vonatkozó szabályokat kell követnie, é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éshez használt 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, amelyet predikátumként használunk, és amelyet a céltáblán lévő lekérdezésekkor kényszerítünk ki. 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

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ó: A triggerek és kényszerek viselkedésének konfigurálása a szinkronizálás során (replikáció Transact-SQL programozás).

[ table_schema_name. ] table_name

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

ALTER ANY SECURITY POLICY A sémához engedélyre és ALTER engedélyre van szükség.

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

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

  • REFERENCES a szabályzathoz kötött céltáblára vonatkozó engedély.

  • REFERENCES az argumentumként használt céltábla minden oszlopára vonatkozó engedély.

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;