Aracılığıyla paylaş


GÜVENLİK POLITIKASI OLUŞTUR (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler Azure SQL DatabaseAzure SQL Managed InstanceSQL analytics endpoint in Microsoft FabricWarehouse SQL databasein Microsoft Fabric SQL database in Microsoft Fabric

Satır düzeyi güvenlik için bir güvenlik ilkesi oluşturur.

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ın kurallarına uymalı ve veritabanında ve şemasında benzersiz olmalıdır.

schema_name

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

[ FİlTRE | BLOCK ]

Hedef tabloya bağlı olan işlevin 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şlevidir. 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 tablodur. 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 tablodur. 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, READ UNCOMMITTED sorgusunun geri alınacak geçici değerleri görebilmesi tehlikesi vardır.

Permissions

Şemada ALTER ANY SECURITY POLICY izni ve ALTER izni gerektirir.

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

  • Koşul olarak kullanılan işlev üzerinde SELECT ve REFERENCES izinleri.

  • İlkeye bağlı olan hedef tablo üzerindeki BAŞVURUlar izni.

  • BAŞVURULAR 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;