Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server 2016 (13.x) dan versi
yang lebih baru Azure SQL Database
Azure SQL Managed Instance SQL Analytics
titik akhir analitik di Microsoft FabricWarehouse di Microsoft Fabric
SQLdatabase di Microsoft Fabric
Mengubah kebijakan keamanan.
Sintaks
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 } } ]
Argumen
security_policy_name
Nama kebijakan keamanan. Nama kebijakan keamanan harus memenuhi aturan untuk pengidentifikasi dan harus unik dalam database dan skemanya.
schema_name
Nama skema tempat kebijakan keamanan berada. schema_name diperlukan karena pengikatan skema.
[ FILTER | BLOKIR ] **
Jenis predikat keamanan untuk fungsi yang terikat ke tabel target.
FILTER predikat memfilter baris yang tersedia untuk membaca operasi secara diam-diam.
BLOCK predikat secara eksplisit memblokir operasi penulisan yang melanggar fungsi predikat.
tvf_schema_name.security_predicate_function_name
Fungsi nilai tabel sebaris yang Anda gunakan sebagai predikat dan yang Anda terapkan pada kueri terhadap tabel target. Paling banyak, Anda dapat menentukan satu predikat keamanan untuk operasi DML tertentu terhadap tabel tertentu. Buat fungsi nilai tabel sebaris menggunakan SCHEMABINDING opsi .
{ column_name | argumen }
Nama kolom atau ekspresi yang digunakan sebagai parameter untuk fungsi predikat keamanan. Kolom apa pun pada tabel target dapat digunakan sebagai argumen untuk fungsi predikat. Ekspresi yang mencakup literal, bawaan, dan ekspresi yang menggunakan operator aritmatika dapat digunakan.
table_schema_name.table_name
Tabel target untuk predikat keamanan. Beberapa kebijakan keamanan yang dinonaktifkan dapat menargetkan satu tabel untuk operasi DML tertentu, tetapi hanya satu yang dapat diaktifkan pada waktu tertentu.
<block_dml_operation>
Operasi DML tertentu untuk predikat blok yang diterapkan.
AFTER menentukan predikat dievaluasi pada nilai baris setelah operasi DML dilakukan (INSERT atau UPDATE).
BEFORE menentukan predikat dievaluasi pada nilai baris sebelum operasi DML dilakukan (UPDATE atau DELETE). Jika tidak ada operasi yang ditentukan, predikat akan berlaku untuk semua operasi.
Anda tidak dapat MENGUBAH operasi untuk predikat blok yang diterapkan karena operasi digunakan untuk mengidentifikasi predikat secara unik. Sebagai gantinya, Anda harus menghilangkan predikat dan menambahkan predikat baru untuk operasi baru.
DENGAN ( STATUS = { ON | MATI } )
Mengaktifkan atau menonaktifkan kebijakan keamanan agar tidak menegakkan predikat keamanannya terhadap tabel target. Jika tidak ditentukan, kebijakan keamanan yang dibuat diaktifkan.
BUKAN UNTUK REPLIKASI
Menunjukkan kebijakan keamanan tidak boleh dijalankan ketika agen replikasi memodifikasi objek target. Untuk informasi selengkapnya, lihat Mengontrol Perilaku Pemicu dan Batasan Selama Sinkronisasi (Pemrograman Transact-SQL Replikasi).
table_schema_name.table_name
Tabel target untuk predikat keamanan yang diterapkan. Beberapa kebijakan keamanan yang dinonaktifkan dapat menargetkan satu tabel, tetapi hanya satu yang dapat diaktifkan pada waktu tertentu.
Keterangan
Pernyataan KEBIJAKAN KEAMANAN ALTER berada dalam cakupan transaksi. Jika transaksi digulung balik, pernyataan juga digulung balik.
Saat menggunakan fungsi predikat dengan tabel yang dioptimalkan memori, kebijakan keamanan harus menyertakan SCHEMABINDING dan menggunakan WITH NATIVE_COMPILATION petunjuk kompilasi. Argumen SCHEMABINDING tidak dapat diubah dengan ALTER pernyataan karena berlaku untuk semua predikat. Untuk mengubah pengikatan skema, Anda harus menghilangkan dan membuat ulang kebijakan keamanan.
Predikat blok dievaluasi setelah operasi DML yang sesuai dijalankan. Dengan demikian, ada bahaya di mana kueri READ UNCOMMITTED dapat melihat nilai sementara yang akan digulung balik.
Izin
Memerlukan ALTER ANY SECURITY POLICY izin.
Selain itu, izin berikut diperlukan untuk setiap predikat yang ditambahkan:
-
SELECTdanREFERENCESizin pada fungsi yang digunakan sebagai predikat. -
REFERENCESizin pada tabel target yang terikat pada kebijakan. -
REFERENCESizin pada setiap kolom dari tabel target yang digunakan sebagai argumen.
Contoh
Contoh berikut menunjukkan penggunaan ALTER SECURITY POLICY sintaksis. Untuk contoh skenario kebijakan keamanan lengkap, lihat Keamanan tingkat baris.
J. Menambahkan predikat tambahan ke kebijakan
Sintaks berikut mengubah kebijakan keamanan, menambahkan predikat filter pada mytable tabel.
ALTER SECURITY POLICY pol1
ADD FILTER PREDICATE schema_preds.SecPredicate(column1)
ON myschema.mytable;
B. Mengaktifkan kebijakan yang sudah ada
Contoh berikut menggunakan sintaks ALTER untuk mengaktifkan kebijakan keamanan.
ALTER SECURITY POLICY pol1 WITH ( STATE = ON );
C. Menambahkan dan menghilangkan beberapa predikat
Sintaks berikut mengubah kebijakan keamanan, menambahkan predikat filter pada mytable1 tabel dan mytable3 , dan menghapus predikat filter pada mytable2 tabel.
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. Mengubah predikat pada tabel
Sintaks berikut mengubah predikat filter yang myschema.mytable ada pada tabel menjadi SecPredicate2 fungsi.
ALTER SECURITY POLICY pol1
ALTER FILTER PREDICATE schema_preds.SecPredicate2(column1)
ON myschema.mytable;
E. Mengubah predikat blok
Mengubah fungsi predikat blok untuk operasi pada tabel.
ALTER SECURITY POLICY rls.SecPol
ALTER BLOCK PREDICATE rls.tenantAccessPredicate_v2(TenantId)
ON dbo.Sales AFTER INSERT;