Menerapkan keamanan tingkat baris dengan konteks sesi di penyusun API Data
Gunakan fitur konteks sesi SQL untuk menerapkan keamanan tingkat baris di penyusun API Data.
Prasyarat
- Server dan database SQL yang ada.
- CLI penyusun API Data. Pasang CLI
- Klien database (SQL Server Management Studio, Azure Data Studio, dll.)
- Jika Anda tidak memiliki klien yang terinstal, instal Azure Data Studio
Create tabel dan data SQL
Create tabel dengan data fiktif untuk digunakan dalam skenario contoh ini.
Sambungkan ke database SQL menggunakan klien atau alat pilihan Anda.
Create tabel bernama
Revenues
dengan kolom , ,category
revenue
, danusername
id
.DROP TABLE IF EXISTS dbo.Revenues; CREATE TABLE dbo.Revenues( id int PRIMARY KEY, category varchar(max) NOT NULL, revenue int, username varchar(max) NOT NULL ); GO
Sisipkan empat contoh baris buku ke
Revenues
dalam tabel.INSERT INTO dbo.Revenues VALUES (1, 'Book', 5000, 'Oscar'), (2, 'Comics', 10000, 'Oscar'), (3, 'Journals', 20000, 'Hannah'), (4, 'Series', 40000, 'Hannah') GO
Uji data Anda dengan kueri sederhana
SELECT *
.SELECT * FROM dbo.Revenues
Buat fungsi bernama
RevenuesPredicate
. Fungsi ini akan memfilter hasil berdasarkan konteks sesi saat ini.CREATE FUNCTION dbo.RevenuesPredicate(@username varchar(max)) RETURNS TABLE WITH SCHEMABINDING AS RETURN SELECT 1 AS fn_securitypredicate_result WHERE @username = CAST(SESSION_CONTEXT(N'name') AS varchar(max));
Create kebijakan keamanan bernama
RevenuesSecurityPolicy
menggunakan fungsi .CREATE SECURITY POLICY dbo.RevenuesSecurityPolicy ADD FILTER PREDICATE dbo.RevenuesPredicate(username) ON dbo.Revenues;
Jalankan alat
Jalankan alat Penyusun API Data (DAB) untuk menghasilkan file konfigurasi dan satu entitas.
Create konfigurasi baru saat mengatur
--set-session-context
ke true.dab init \ --database-type mssql \ --connection-string "<sql-connection-string>" \ --set-session-context true
Tambahkan entitas baru bernama
revenue
untukdbo.Revenues
tabel.dab add revenue \ --source "dbo.Revenues" \ --permissions "anonymous:read"
Mulai alat penyusun API Data.
dab start
Navigasi ke
http://localhost:5000/api/revenue
titik akhir. Amati bahwa tidak ada data yang dikembalikan. Perilaku ini terjadi karena konteks sesi tidak diatur dan tidak ada rekaman yang cocok dengan predikat filter.
Uji di SQL
Uji filter dan predikat di SQL secara langsung untuk memastikannya berfungsi.
Sambungkan lagi ke server SQL menggunakan klien atau alat pilihan Anda.
Jalankan
sp_set_session_context
untuk mengatur klaim konteksname
sesi Anda secara manual ke nilaiOscar
statis .EXEC sp_set_session_context 'name', 'Oscar';
Jalankan kueri umum
SELECT *
. Amati bahwa hasilnya secara otomatis difilter menggunakan predikat .SELECT * FROM dbo.Revenues;