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
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;