Bagikan melalui


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.)

Create tabel dan data SQL

Create tabel dengan data fiktif untuk digunakan dalam skenario contoh ini.

  1. Sambungkan ke database SQL menggunakan klien atau alat pilihan Anda.

  2. Create tabel bernama Revenues dengan kolom , , categoryrevenue, dan usernameid.

    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
    
  3. 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
    
  4. Uji data Anda dengan kueri sederhana SELECT * .

    SELECT * FROM dbo.Revenues
    
  5. 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));
    
  6. 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.

  1. Create konfigurasi baru saat mengatur --set-session-context ke true.

    dab init \
        --database-type mssql \
        --connection-string "<sql-connection-string>" \
        --set-session-context true
    
  2. Tambahkan entitas baru bernama revenue untuk dbo.Revenues tabel.

    dab add revenue \
        --source "dbo.Revenues" \
        --permissions "anonymous:read"
    
  3. Mulai alat penyusun API Data.

    dab start
    
  4. 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.

  1. Sambungkan lagi ke server SQL menggunakan klien atau alat pilihan Anda.

  2. Jalankan sp_set_session_context untuk mengatur klaim konteks name sesi Anda secara manual ke nilai Oscarstatis .

    EXEC sp_set_session_context 'name', 'Oscar';
    
  3. Jalankan kueri umum SELECT * . Amati bahwa hasilnya secara otomatis difilter menggunakan predikat .

    SELECT * FROM dbo.Revenues;