GÜVENLIK İLKESI OLUŞTURMA (Transact-SQL)

Applies to: SQL Server 2016 (13.x) ve sonraki sürümleri < Microsoft Fabric'da c3>Azure SQL DatabaseAzure SQL Managed InstanceSQL analiz uç noktasıWarehouse in Microsoft FabricSQL database in Microsoft Fabric

SQL Database Engine row-level security için bir güvenlik ilkesi oluşturur.

Fabric Data Warehouse'da satır düzeyi güvenlik, diğer SQL Database Engine ürünlerine benzer şekilde çalışır. Fabric Data Warehouse veya SQL analiz uç noktasında satır düzeyi güvenlik hakkında daha fazla bilgi ve örnek için bkz. Fabric veri ambarında Row-level security.

Transact-SQL söz dizimi kuralları

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

Güvenlik ilkesinin adı. Güvenlik ilkesi adları, tanımlayıcılar için kurallara uymalıdır ve veritabanında ve şemasında benzersiz olmalıdır.

schema_name

Güvenlik ilkesinin ait olduğu şemanın adı. şema bağlaması nedeniyle schema_name gereklidir.

[ FİlTRE | BLOCK ]

İşlevin hedef tabloya bağlanması için güvenlik koşulunun türü.

  • FILTER , okuma işlemleri için kullanılabilen satırları sessizce filtreler.
  • BLOCK koşul işlevini ihlal eden yazma işlemlerini açıkça engeller.

tvf_schema_name.security_predicate_function_name

Bir koşul olarak kullanılacak ve hedef tabloya yönelik sorgular üzerine zorlanacak satır içi tablo değeri işlevi. Belirli bir tabloya yönelik belirli bir DML işlemi için en fazla bir güvenlik koşulu tanımlanabilir. Satır içi tablo değeri işlevi seçeneği kullanılarak SCHEMABINDING oluşturulmuş olmalıdır.

{ column_name | ifade }

Güvenlik koşulu işlevi için parametre olarak kullanılan sütun adı veya ifade. Hedef tablodaki herhangi bir sütun kullanılabilir. İfade yalnızca hedef tablodan sabitleri, yerleşik skaler işlevleri, işleçleri ve sütunları içerebilir. İşlevin her parametresi için bir sütun adı veya ifadesi belirtilmelidir.

table_schema_name.table_name

Güvenlik koşulunun uygulanacağı hedef tablo. Birden çok devre dışı bırakılmış güvenlik ilkesi belirli bir DML işlemi için tek bir tabloyu hedefleyebilir, ancak herhangi bir zamanda yalnızca bir tane etkinleştirilebilir.

block_dml_operation

Blok koşulunun uygulanacağı belirli DML işlemi. AFTER , koşulun DML işlemi (INSERT veya UPDATE) gerçekleştirildikten sonra satırların değerleri üzerinde değerlendirileceğini belirtir. BEFORE DML işlemi (UPDATE veya DELETE) gerçekleştirilmeden önce koşulun satırların değerleri üzerinde değerlendirileceğini belirtir. Hiçbir işlem belirtilmezse, koşul tüm işlemlere uygulanır.

[ DURUM = { AÇIK | KAPALI } ]

Güvenlik ilkesinin hedef tablolara karşı güvenlik koşullarını zorunlu tutmasını etkinleştirir veya devre dışı bırakır. Belirtilmezse, oluşturulan güvenlik ilkesi etkinleştirilir.

[ SCHEMABINDING = { AÇIK | KAPALI } ]

İlkedeki tüm koşul işlevlerinin seçeneğiyle SCHEMABINDING oluşturulması gerekip gerekmediğini gösterir. Varsayılan olarak bu ayardır ON ve tüm işlevleri ile SCHEMABINDINGoluşturulmalıdır.

ÇOĞALTMA IÇIN DEĞIL

Bir çoğaltma aracısı hedef nesneyi değiştirdiğinde güvenlik ilkesinin yürütülmemesi gerektiğini gösterir. Daha fazla bilgi için bkz. Eşitleme Sırasında Tetikleyicilerin ve Kısıtlamaların Davranışını Denetleme (Çoğaltma Transact-SQL Programlama).

[ table_schema_name. ] table_name

Güvenlik koşulunun uygulanacağı hedef tablo. Birden çok devre dışı bırakılmış güvenlik ilkesi tek bir tabloyu hedefleyebilir, ancak herhangi bir zamanda yalnızca bir tane etkinleştirilebilir.

Remarks

Koşul işlevlerini bellek için iyileştirilmiş tablolarla kullanırken derleme ipucunu SCHEMABINDING eklemeniz WITH NATIVE_COMPILATION ve kullanmanız gerekir.

Blok önkoşulları, karşılık gelen DML işlemi yürütüldükten sonra değerlendirilir. Bu nedenle, bir READ UNCOMMITTED sorgunun geri alınacak geçici değerleri görebilmesi tehlikesi vardır.

Permissions

Şema üzerinde ALTER ANY SECURITY POLICY izin ve ALTER izin gerektirir.

Ek olarak, eklenen her koşul için aşağıdaki izinler gereklidir:

  • SELECT ve REFERENCES koşul olarak kullanılan işlev üzerindeki izinler.

  • REFERENCES ilkeye bağlı olan hedef tablo üzerindeki izin.

  • REFERENCES bağımsız değişken olarak kullanılan hedef tablodaki her sütunda izin.

Examples

Aşağıdaki örneklerde söz diziminin kullanımı gösterilmektedir CREATE SECURITY POLICY . Eksiksiz bir güvenlik ilkesi senaryosu örneği için bkz. Satır düzeyi güvenlik.

A. Güvenlik ilkesi oluşturma

Aşağıdaki söz dizimi, tablo için dbo.Customer filtre koşulu olan bir güvenlik ilkesi oluşturur ve güvenlik ilkesini devre dışı bırakır.

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

B. Birden çok tabloyu etkileyen bir ilke oluşturma

Aşağıdaki söz dizimi, üç farklı tabloda üç filtre koşulu olan bir güvenlik ilkesi oluşturur ve güvenlik ilkesini etkinleştirir.

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. Birden çok güvenlik koşulu türüyle ilke oluşturma

Tabloya hem filtre koşulu hem de blok koşulu dbo.Sales ekleme.

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;