Setelah menginstal sebuah package di proyek Anda, terapkan kontrol akses detail halus untuk membatasi pengguna atau peran yang dapat mengakses resource tertentu dalam package tersebut. MaxCompute mendukung dua kebijakan komplementer: kontrol akses berbasis daftar kontrol akses (ACL) untuk izin tingkat objek, dan LabelSecurity untuk penerapan sensitivitas data tingkat kolom. Terapkan terlebih dahulu kontrol akses berbasis ACL, lalu tambahkan LabelSecurity secara opsional untuk membatasi akses berdasarkan tingkat keamanan.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Menginstal sebuah package di proyek Anda. Lihat Akses resource lintas-proyek berbasis package.
Memiliki peran project owner atau peran admin di proyek tempat package tersebut diinstal.
Kontrol akses berbasis ACL
Kontrol akses berbasis ACL memungkinkan project owner atau pengguna dengan peran admin memberikan atau mencabut izin pada objek tertentu dalam sebuah package. Pengguna di proyek yang menginstal hanya dapat melakukan operasi yang secara eksplisit diberikan pada objek tersebut.
Jalankan perintah-perintah berikut dari client MaxCompute, MaxCompute Studio, atau konsol DataWorks.
Berikan izin
Untuk memberikan izin pada objek tertentu dalam package:
grant <actions> on <object_type> <object_name> to [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");Untuk memberikan izin pada kolom tertentu dalam tabel:
-- Pemberian izin tingkat kolom: tentukan daftar kolom setelah nama tabel
grant <actions> on table <table_name>[(<column_list>)] to [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");| Parameter | Wajib | Deskripsi |
|---|---|---|
actions | Ya | Izin yang akan diberikan. Jalankan describe package <project_name>.<package_name>; untuk melihat izin yang tersedia untuk setiap objek. |
object_type | Ya | Jenis objek. Jalankan describe package <project_name>.<package_name>; untuk melihat jenis objek yang termasuk dalam package. |
object_name | Ya | Nama objek. Jalankan describe package <project_name>.<package_name>; untuk melihat nama objek. |
name | Ya | Nama pengguna atau role. Lihat View users atau View roles. |
table_name | Ya (tingkat kolom) | Nama tabel. Jalankan describe package <project_name>.<package_name>; untuk melihat tabel dalam package. |
column_list | Tidak | Satu atau beberapa nama kolom, dipisahkan koma. |
"refobject"="true" | Ya | Mengaktifkan kontrol akses detail halus untuk package. |
"refproject"="<project_name>" | Ya | Nama proyek MaxCompute yang memiliki package tersebut. |
"package"="<package_name>" | Ya | Nama package. |
Lihat izin
Untuk melihat izin berbasis ACL saat ini pada objek dalam package:
show grants on <object_type> <object_name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");Cabut izin
Untuk mencabut izin dari objek tertentu:
revoke <actions> on <object_type> <object_name> from [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");Untuk mencabut izin dari kolom tertentu dalam tabel:
revoke <actions> on table <table_name>[(<column_list>)] from [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");Contoh: Memberikan dan mencabut izin tabel
Contoh berikut menggunakan skenario dari Akses resource lintas-proyek berbasis package. John (project owner dari prj2) memberikan izin SELECT kepada Bob pada tabel sampletable dalam package datamining (dimiliki oleh prj1), lalu mencabutnya.
use prj2;
-- Berikan SELECT pada tabel kepada Bob
grant Select on table sampletable to user aliyun$bob@aliyun.com
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
-- Verifikasi pemberian izin
show grants on table sampletable
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
-- Cabut izin tersebut
revoke Select on table sampletable from user aliyun$bob@aliyun.com
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");Kontrol akses berbasis label
LabelSecurity menambahkan lapisan kontrol kedua di atas kontrol akses berbasis ACL. Setelah memberikan izin ACL, aktifkan LabelSecurity untuk membatasi akses lebih lanjut berdasarkan tingkat sensitivitas data. Pengguna hanya dapat membaca data yang tingkat keamanannya sama dengan atau di bawah tingkat yang ditentukan.
Terapkan kontrol akses berbasis ACL sebelum menerapkan LabelSecurity. LabelSecurity hanya berlaku untuk resource tabel dalam package.
Berikan izin berbasis label
grant label <number> on table <table_name>[(<column_list>)] to [user|role] <name>
[with exp <days>]
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");| Parameter | Wajib | Deskripsi |
|---|---|---|
number | — | Tingkat keamanan untuk data sensitif. Lihat Kontrol akses berbasis label. |
table_name | Ya | Nama tabel. Jalankan describe package <project_name>.<package_name>; untuk melihat tabel dalam package. |
column_list | Tidak | Satu atau beberapa nama kolom, dipisahkan koma. |
name | Ya | Nama pengguna atau role. Lihat View users atau View roles. |
days | Tidak | Jumlah hari izin tersebut berlaku. Default: 180 hari. |
"refobject"="true" | Ya | Mengaktifkan kontrol akses detail halus untuk package. |
"refproject"="<project_name>" | Ya | Nama proyek MaxCompute yang memiliki package tersebut. |
"package"="<package_name>" | Ya | Nama package. |
Lihat izin berbasis label
show label grants on table <table_name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");Cabut izin berbasis label
revoke label on table <table_name>[(<column_list>)] from [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");Contoh: Menggabungkan kontrol akses berbasis ACL dan berbasis label
Contoh berikut merupakan kelanjutan dari contoh ACL di atas. Tabel sampletable memiliki tiga kolom dengan tingkat keamanan berbeda: t1 (tingkat 1), t2 (tingkat 2), dan t3 (tingkat 3). John memberikan akses kepada Bob hingga tingkat keamanan 2, berlaku selama 7 hari.
use prj2;
-- Langkah 1: Aktifkan LabelSecurity
set LabelSecurity=true;
-- Langkah 2: Tetapkan tingkat keamanan untuk setiap kolom
set label 1 to table sampletable(t1);
set label 2 to table sampletable(t2);
set label 3 to table sampletable(t3);
-- Langkah 3: Berikan akses label 2 kepada Bob untuk t2, berlaku 7 hari
-- Bob sudah memiliki SELECT pada tabel dari pemberian izin ACL di atas.
-- Setelah ini, Bob dapat membaca t2 (tingkat 2) tetapi tidak t3 (tingkat 3).
grant label 2 on table sampletable(t2) to user aliyun$bob@aliyun.com with exp 7
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
-- Verifikasi pemberian izin label
show label grants on table sampletable
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
-- Cabut akses label
revoke label 2 on table sampletable(t2) from user aliyun$bob@aliyun.com
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");Ketika pemilik package (di prj1) memberikan hak kepada proyek lain untuk menginstal package tersebut, mereka juga harus menentukan label jika kontrol akses berbasis label diperlukan:allowproject <project_name> to install package <package_name> using label <number>;Langkah berikutnya
Akses resource lintas-proyek berbasis package — buat, instal, dan kelola package.
Kontrol akses berbasis label — pahami cara kerja LabelSecurity di MaxCompute.
View users dan View roles — cari informasi pengguna dan peran sebelum memberikan izin.