Aracılığıyla paylaş


GÜVENLİK POLITIKASINI DEĞIŞTIRİN (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

Bir güvenlik ilkesini değiştirir.

Transact-SQL söz dizimi kuralları

Sözdizimi

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 } } ]

Tartışmalar

security_policy_name

Güvenlik ilkesinin adı. Güvenlik ilkesi adları, tanımlayıcılar için kuralları karşılamalı 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ğlı güvenlik koşulu 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

Koşul olarak kullandığınız ve bir hedef tabloya yönelik sorgular için uyguladığınız satır içi tablo değeri işlevi. En fazla, belirli bir tabloya yönelik belirli bir DML işlemi için bir güvenlik koşulu tanımlayabilirsiniz. seçeneğini kullanarak SCHEMABINDING satır içi tablo değeri işlevini oluşturun.

{ column_name | argümanlar }

Güvenlik koşulu işlevi için parametre olarak kullanılan sütun adı veya ifade. Hedef tablodaki tüm sütunlar koşul işlevi için bağımsız değişken olarak kullanılabilir. Değişmez değerleri, yerleşikleri ve aritmetik işleçleri kullanan ifadeleri içeren ifadeler kullanılabilir.

table_schema_name.table_name

Güvenlik koşulunun hedef tablosu. 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>

Uygulanan blok koşulu için belirli DML işlemi. AFTER , DML işlemi (INSERT veya UPDATE) gerçekleştirildikten sonra satır değerlerinde koşulun değerlendirildiğini belirtir. BEFORE , DML işlemi (UPDATE veya DELETE) gerçekleştirilmeden önce satır değerlerinde koşulun değerlendirildiğini belirtir. Hiçbir işlem belirtilmezse, koşul tüm işlemlere uygulanır.

Uygulanan bir blok koşulu için işlemi DEĞIŞTIREMEZsiniz, çünkü işlem koşulu benzersiz olarak tanımlamak için kullanılır. Bunun yerine, koşulu bırakmanız ve yeni işlem için yeni bir koşul eklemeniz gerekir.

WITH ( STATE = { ÜZERINDE | 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.

Ç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

Uygulanan güvenlik koşulu için 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.

Açıklamalar

ALTER SECURITY POLICY deyimi bir işlemin kapsamındadır. İşlem geri alınırsa deyim de geri alınır.

Koşul işlevlerini bellek için iyileştirilmiş tablolarla kullanırken, güvenlik ilkeleri derleme ipucunu SCHEMABINDING içermelidir WITH NATIVE_COMPILATION ve kullanmalıdır. SCHEMABINDING Bağımsız değişken, tüm koşullara uygulandığından deyimiyle ALTER değiştirilemez. Şema bağlamasını değiştirmek için güvenlik ilkesini bırakmanız ve yeniden oluşturmanız gerekir.

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

İzinler

ALTER ANY SECURITY POLICY izni 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.

Örnekler

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

A. İlkeye ek koşul ekleme

Aşağıdaki söz dizimi, tabloya filtre koşulu mytable ekleyerek bir güvenlik ilkesini değiştirir.

ALTER SECURITY POLICY pol1
    ADD FILTER PREDICATE schema_preds.SecPredicate(column1)
    ON myschema.mytable;

B. Var olan bir ilkeyi etkinleştirme

Aşağıdaki örnek, güvenlik ilkesini etkinleştirmek için ALTER söz dizimini kullanır.

ALTER SECURITY POLICY pol1 WITH ( STATE = ON );

C. Birden çok koşul ekleme ve bırakma

Aşağıdaki söz dizimi bir güvenlik ilkesini değiştirir, ve mytable1 tablolarına filtre koşullarını mytable3 ekler ve tablodaki filtre koşulunu mytable2 kaldırır.

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. Tablodaki koşulu değiştirme

Aşağıdaki söz dizimi, tablodaki mevcut filtre koşulunu myschema.mytableSecPredicate2 işlev olarak değiştirir.

ALTER SECURITY POLICY pol1
    ALTER FILTER PREDICATE schema_preds.SecPredicate2(column1)
        ON myschema.mytable;

E. Blok koşullarını değiştirme

Tablodaki bir işlemin blok koşulu işlevini değiştirme.

ALTER SECURITY POLICY rls.SecPol
    ALTER BLOCK PREDICATE rls.tenantAccessPredicate_v2(TenantId)
    ON dbo.Sales AFTER INSERT;