Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler
Azure SQL Database
Azure SQL Managed Instance
SQL analytics endpoint in Microsoft Fabric
Warehouse 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:
-
SELECTveREFERENCESkoşul olarak kullanılan işlev üzerindeki izinler. -
REFERENCESilkeye bağlı olan hedef tablo üzerindeki izin. -
REFERENCESbağı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;