Izin terperinci SQL di Microsoft Fabric

Berlaku untuk: Titik Akhir dan Gudang SQL di Microsoft Fabric

Ketika izin out-of-the-box yang disediakan oleh penugasan ke peran ruang kerja atau diberikan melalui izin item tidak mencukupi, konstruksi SQL standar tersedia untuk kontrol yang lebih terperinci.

Untuk Titik Akhir dan Gudang SQL:

  • Keamanan tingkat objek dapat dikelola menggunakan sintaks GRANT, REVOKE, dan DENY.
    • Untuk informasi selengkapnya, lihat sintaks T-SQL untuk GRANT, REVOKE, dan DENY.
  • Pengguna dapat ditetapkan ke peran SQL, baik peran database kustom maupun bawaan.

Penting

Microsoft Fabric sedang dalam pratinjau.

Izin terperinci pengguna

  • Agar pengguna dapat tersambung ke database, pengguna harus ditetapkan ke peran Ruang Kerja atau diberi izin Baca item. Tanpa izin Baca minimal, koneksi gagal.
  • Jika Anda ingin menyiapkan izin terperinci pengguna sebelum mengizinkan mereka terhubung ke gudang, izin dapat terlebih dahulu disiapkan dalam SQL. Kemudian, mereka dapat diberikan akses dengan menetapkannya ke peran Ruang Kerja atau memberikan izin item.

Batasan

  • CREATE USER tidak dapat dijalankan secara eksplisit saat ini. Ketika GRANT atau DENY dijalankan, pengguna akan dibuat secara otomatis.
  • Keamanan tingkat baris saat ini tidak didukung.
  • Masking data dinamis saat ini tidak didukung.

Lihat izin saya

Saat pengguna tersambung ke string koneksi SQL, mereka dapat melihat izin yang tersedia untuk mereka menggunakan fungsi sys.fn_my_permissions .

Izin cakupan database pengguna:

SELECT *
FROM sys.fn_my_permissions(NULL, "Database")

Izin tercakup skema pengguna:

SELECT *
FROM sys.fn_my_permissions("<schema-name>", "Schema")

Izin cakupan objek pengguna:

SELECT *
FROM sys.fn_my_permissions("<schema-name>.<object-name>", "Object")

Menampilkan izin yang diberikan secara eksplisit kepada pengguna

Saat tersambung melalui string koneksi SQL, pengguna dengan izin yang ditingkatkan dapat meminta izin yang telah diberikan dengan menggunakan tampilan sistem. Ini tidak memperlihatkan izin pengguna atau pengguna yang diberikan kepada pengguna dengan ditetapkan ke peran ruang kerja atau izin item yang ditetapkan.

SELECT DISTINCT pr.principal_id, pr.name, pr.type_desc, 
 pr.authentication_type_desc, pe.state_desc, pe.permission_name
FROM sys.database_principals AS pr
JOIN sys.database_permissions AS pe
 ON pe.grantee_principal_id = pr.principal_id;

Membatasi akses baris dengan menggunakan tampilan

Keamanan tingkat baris saat ini tidak didukung. Sebagai solusinya, tampilan dan fungsi sistem dapat digunakan untuk membatasi akses pengguna ke data. Ini dapat dicapai dengan cara berikut:

  1. Berikan pengguna izin Baca Fabric saja - Ini akan memberi mereka izin CONNECT hanya untuk Gudang.

  2. Secara opsional, buat peran kustom dan tambahkan pengguna ke peran, jika Anda ingin membatasi akses berdasarkan peran.

    CREATE ROLE PrivilegedRole
    
    ALTER ROLE PrivilegedRole ADD MEMBER [userOne@contoso.com]
    
  3. Membuat tampilan yang mengkueri tabel yang ingin Anda batasi akses barisnya

  4. Tambahkan klausa WHERE dalam definisi VIEW, menggunakan fungsi sistem SUSER_SNAME() atau IS_ROLEMEMBER(), untuk memfilter berdasarkan nama pengguna atau keanggotaan peran. Di bawah ini adalah contoh penyediaan akses ke baris tertentu kepada pengguna berdasarkan data wilayah dalam baris. Kondisi pertama menyediakan akses ke baris, dari wilayah tertentu, ke satu pengguna tertentu, sementara kondisi kedua menyediakan akses ke baris, dari wilayah tertentu, ke setiap anggota peran kustom PrivilegedRole.

    CREATE VIEW dbo.RestrictedAccessTable as
    select *
    from dbo.SampleTable
    WHERE
    ( SUSER_SNAME() = 'userTwo@contoso.com' AND test_region = '<region_one_name>')
    OR
    ( IS_ROLEMEMBER('PrivilegedRole', SUSER_SNAME()) = 1 AND test_region = '<region_two_name')
    
  5. Berikan akses ke tampilan:

    GRANT SELECT ON dbo.RestrictedAccessTable TO [userOne@contoso.com]
    

Langkah berikutnya