Keamanan tingkat-kolom

Keamanan Tingkat-Kolom memungkinkan pelanggan untuk mengontrol akses ke kolom tabel berdasarkan konteks eksekusi pengguna atau keanggotaan grup.

Sejak video ini diposting, Keamanan tingkat baris menjadi tersedia untuk kumpulan SQL khusus di Azure Synapse.

Keamanan tingkat-kolom menyederhanakan desain dan pengkodean keamanan dalam aplikasi Anda, memungkinkan Anda membatasi akses kolom untuk melindungi data sensitif. Misalnya, memastikan bahwa pengguna tertentu hanya dapat mengakses kolom tertentu dari tabel yang terkait dengan departemen mereka. Logika pembatasan akses terletak di tingkat database daripada jauh dari data di tingkat aplikasi lain. Database menerapkan pembatasan akses setiap kali akses data dicoba dari tingkat mana pun. Pembatasan ini membuat keamanan Anda lebih andal dan kuat dengan mengurangi luas permukaan sistem keamanan Anda secara keseluruhan. Selain itu, keamanan tingkat- kolom juga menghilangkan kebutuhan untuk memperkenalkan tampilan untuk memfilter kolom untuk memberlakukan pembatasan akses pada pengguna.

Anda dapat menerapkan keamanan tingkat-kolom dengan pernyataan T-SQL GRANT. Dengan mekanisme ini, autentikasi SQL dan Azure Active Directory (Azure AD) didukung.

Diagram shows a schematic table with the first column headed by a closed padlock and its cells an orange color while the other columns are white cells.

Sintaks

GRANT <permission> [ ,...n ] ON
    [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
    TO <database_principal> [ ,...n ]
    [ WITH GRANT OPTION ]
    [ AS <database_principal> ]
<permission> ::=
    SELECT
  | UPDATE
<database_principal> ::=
      Database_user
    | Database_role
    | Database_user_mapped_to_Windows_User
    | Database_user_mapped_to_Windows_Group

Contoh

Contoh berikut menunjukkan cara membatasi TestUser mengakses kolom SSN pada tabel Membership:

Buat tabel Membership dengan kolom SSN yang digunakan untuk menyimpan nomor jaminan sosial:

CREATE TABLE Membership
  (MemberID int IDENTITY,
   FirstName varchar(100) NULL,
   SSN char(9) NOT NULL,
   LastName varchar(100) NOT NULL,
   Phone varchar(12) NULL,
   Email varchar(100) NULL);

Izinkan TestUser mengakses semua kolom kecuali kolom SSN, yang memiliki data sensitif:

GRANT SELECT ON Membership(MemberID, FirstName, LastName, Phone, Email) TO TestUser;

Kueri yang dijalankan sebagai TestUser akan gagal jika mereka menyertakan kolom SSN:

SELECT * FROM Membership;

-- Msg 230, Level 14, State 1, Line 12
-- The SELECT permission was denied on the column 'SSN' of the object 'Membership', database 'CLS_TestDW', schema 'dbo'.

Menggunakan Kasus

Beberapa contoh penggunaan keamanan tingkat-kolom saat ini:

  • Perusahaan jasa keuangan hanya mengizinkan manajer akun untuk memiliki akses ke nomor jaminan sosial pelanggan (SSN), nomor telepon, dan data pribadi lainnya.
  • Penyedia layanan kesehatan hanya mengizinkan dokter dan perawat untuk memiliki akses ke rekaman medis sensitif sekaligus mencegah anggota departemen penagihan melihat data ini.