MaxCompute mendukung kontrol akses berbasis label. Anda dapat menetapkan label tingkat sensitivitas ke tabel atau kolom dan label tingkat akses ke pengguna di tingkat proyek. Pengguna hanya dapat mengakses data dalam proyek MaxCompute jika tingkat sensitivitas data tersebut kurang dari atau sama dengan tingkat akses yang ditetapkan untuk mereka. Topik ini menjelaskan cara mengelola izin tersebut dan menyediakan contoh.
Cara kerja
Kontrol akses berbasis label, juga dikenal sebagai LabelSecurity, adalah kebijakan mandatory access control (MAC) di tingkat proyek yang secara default dinonaktifkan.
Pemilik proyek dapat menjalankan perintah SET LabelSecurity=true|false; untuk mengaktifkan atau menonaktifkan LabelSecurity di tingkat proyek.
Setelah Anda mengaktifkan LabelSecurity, pemilik proyek harus melakukan tindakan berikut:
Menentukan tingkat sensitivitas yang jelas untuk tabel atau kolom.
Menentukan klasifikasi tingkat akses pengguna.
Menetapkan label tingkat sensitivitas ke tabel atau kolom, serta label tingkat akses ke pengguna atau role.
Saat pengguna mengakses data yang memiliki tingkat sensitivitas tertentu, pengguna tersebut harus memiliki izin SELECT untuk tabel target dan hanya dapat mengakses data tabel atau kolom tersebut jika tingkat sensitivitasnya kurang dari atau sama dengan tingkat akses pengguna tersebut.
Fitur yang didukung
Dukungan tingkat kolom: Granularitas terkecil yang didukung adalah tingkat kolom. Anda dapat menetapkan label tingkat sensitivitas untuk setiap kolom dalam suatu tabel. Hal ini memungkinkan satu tabel terdiri atas kolom-kolom dengan tingkat sensitivitas berbeda.
Dukungan tampilan: Anda dapat mengatur label tingkat sensitivitas untuk tampilan. Label tingkat sensitivitas tampilan bersifat independen dari label pada tabel sumber-nya.
Menetapkan label tingkat sensitivitas pada kolom partisi tidak didukung.
Operasi yang didukung
Pemilik proyek atau pengguna dengan role Admin dapat melakukan operasi berikut.
Anda dapat melakukan operasi ini menggunakan alat seperti MaxCompute client, MaxCompute Studio, dan DataWorks.
Kebijakan kontrol akses default
No-ReadUp: Melarang pengguna mengakses data dengan tingkat sensitivitas lebih tinggi daripada tingkat akses mereka. Jika skenario bisnis Anda memerlukan hal ini, Anda harus memberikan izin secara eksplisit. Untuk informasi selengkapnya, lihat Memberikan izin label secara eksplisit.
Trusted-User: Mengizinkan pengguna menulis data dengan tingkat sensitivitas tidak lebih tinggi daripada tingkat akses mereka. Tabel atau view yang baru dibuat secara default memiliki tingkat 0 (tidak rahasia). Pengguna baru juga secara default memiliki tingkat 0.
Catatan penggunaan
Beberapa sistem MAC tradisional mendukung kebijakan keamanan yang lebih kompleks untuk mencegah distribusi data secara sembarangan dalam suatu proyek.
Sebagai contoh, kebijakan No-WriteDown melarang pengguna menulis data ke tingkat sensitivitas yang lebih rendah daripada tingkat akses mereka. Untuk mengurangi biaya manajemen tingkat sensitivitas data, MaxCompute tidak mendukung kebijakan No-WriteDown secara default.
Jika proyek Anda memerlukan pembatasan serupa, Anda dapat menjalankan perintah
Set ObjectCreatorHasGrantPermission=false;untuk mengubah konfigurasi keamanan proyek sesuai kebutuhan Anda.Untuk mencegah aliran data antar-proyek yang berbeda, Anda dapat menjalankan perintah
set ProjectProtection=true;untuk mengaktifkan fitur ProjectProtection. Setelah diaktifkan, fitur ini membatasi akses data hanya pada proyek saat ini dan mencegah data keluar dari proyek tersebut. Untuk informasi selengkapnya tentang perlindungan data proyek, lihat Mekanisme perlindungan data.Saat Anda menghapus suatu objek, MaxCompute secara otomatis mencabut semua izin label yang terkait dengannya.
Saat Anda menghapus pengguna dari suatu proyek, MaxCompute tetap menyimpan izin mereka. Jika nanti Anda menambahkan kembali pengguna tersebut ke proyek, izin sebelumnya akan diaktifkan ulang. Untuk menghapus permanen informasi izin pengguna, lihat Menghapus permanen informasi izin yang ditinggalkan oleh pengguna yang dihapus.
Prasyarat
Sebelum menggunakan solusi kontrol akses berbasis label, Anda memerlukan informasi berikut:
Nama akun atau nama role penerima izin. Anda harus menambahkan akun atau role tersebut ke proyek MaxCompute.
Format untuk akun Alibaba Cloud: ALIYUN$<account_id>
Format untuk akun pengguna RAM: RAM$<account_id>:<RAM_user_UID>
Format untuk akun role RAM:
RAM$<account_id>:role/<RAM_role_name>
Jalankan perintah
LIST users;atauLIST roles;di MaxCompute client untuk mendapatkan informasi akun atau role.Untuk menambahkan pengguna atau role baru, lihat Perencanaan dan Manajemen Pengguna atau Perencanaan Role.
Nama tabel atau kolom target.
Jalankan perintah
SHOW TABLES;di MaxCompute client untuk mendapatkan nama tabel, view, dan kolom.
Menetapkan tingkat sensitivitas untuk tabel atau kolom
Pemilik proyek atau pengguna dengan role Admin dapat menetapkan label tingkat sensitivitas untuk tabel atau kolom.
Sintaks perintah
SET LabelSecurity=true; SET Label <number> TO TABLE <table_name>[(<column_list>)];Catatan penggunaan
Jika Anda menetapkan label tingkat sensitivitas untuk suatu tabel tetapi tidak untuk kolom-kolomnya, semua kolom dalam tabel tersebut akan mewarisi tingkat sensitivitas tabel tersebut.
Label tingkat kolom selalu menggantikan label tingkat tabel. Menetapkan label tingkat tabel tidak memengaruhi label tingkat kolom yang sudah ada. Sebagai contoh, jika awalnya Anda menetapkan tingkat sensitivitas tabel menjadi 2, lalu menetapkan tingkat sensitivitas kolom bernama col1 menjadi 3, maka tingkat sensitivitas tabel tetap 2, tingkat sensitivitas col1 menjadi 3, dan kolom lain tetap pada tingkat 2.
Untuk mengubah label tingkat sensitivitas yang sudah ada pada tabel atau kolom, jalankan kembali perintah tersebut dengan tingkat baru.
Untuk menghapus label, tetapkan tingkat sensitivitasnya menjadi 0.
Parameter
Parameter
Wajib
Deskripsi
number
Ya
Menentukan tingkat sensitivitas. Nilai valid: 0 hingga 9. Nilai yang lebih tinggi menunjukkan sensitivitas yang lebih besar.
table_name
Ya
Nama tabel atau view target.
Jalankan perintah
SHOW TABLES;di MaxCompute client untuk mendapatkan nama tabel atau view.column_list
Tidak
Menentukan satu atau beberapa nama kolom. Pisahkan beberapa nama kolom dengan koma (,).
Menetapkan tingkat akses untuk pengguna atau role
Pemilik proyek atau pengguna dengan role Admin dapat menetapkan label tingkat akses untuk pengguna atau role lain.
Sintaks perintah
SET LabelSecurity=true; SET Label <number> TO {USER|ROLE} <name>;Catatan penggunaan
Setelah label tingkat akses ditetapkan untuk pengguna, pengguna tersebut hanya dapat mengakses data dengan tingkat sensitivitas yang kurang dari atau sama dengan tingkat akses mereka. Sebagai contoh, jika pengguna diberi tingkat akses 3, mereka hanya dapat mengakses data dengan tingkat sensitivitas dari 0 hingga 3.
Untuk mengubah label tingkat akses yang sudah ada untuk pengguna atau role, jalankan kembali perintah tersebut dengan label tingkat akses baru.
Parameter
Parameter
Wajib
Deskripsi
number
Ya
Menentukan tingkat sensitivitas data tertinggi yang dapat diakses oleh pengguna atau role tersebut. Nilai valid: 0 hingga 9.
name
Ya
Nama pengguna atau role.
Jalankan perintah
LIST users;atauLIST roles;di MaxCompute client untuk mendapatkan informasi akun atau role.
Memberikan izin label secara eksplisit
Pemilik proyek atau pengguna dengan role Admin dapat memberikan izin kepada pengguna untuk mengakses data yang melebihi tingkat akses yang ditetapkan untuk mereka.
Sintaks perintah
GRANT Label <number> ON TABLE <table_name> [(<column_list>)] TO {USER|ROLE} <name> [WITH exp <days>];Catatan penggunaan
Untuk pengguna tertentu, pemberian izin eksplisit pada kolom menggantikan pemberian izin eksplisit pada tabel induknya.
Parameter
Parameter
Wajib
Deskripsi
number
Ya
Tingkat sensitivitas data tertinggi yang dapat diakses oleh pengguna atau role tersebut.
Nilai ini sesuai dengan label tingkat sensitivitas data. Nilai valid: 0 hingga 9.
table_name
Ya
Nama tabel atau view target.
Jalankan perintah
SHOW TABLES;di MaxCompute client untuk mendapatkan nama tabel atau view.column_list
Tidak
Menentukan kolom-kolom yang akan diberikan izin. Anda dapat menentukan beberapa nama kolom yang dipisahkan dengan koma (,).
name
Ya
Nama pengguna atau role.
Jalankan perintah
LIST users;atauLIST roles;di MaxCompute client untuk mendapatkan informasi akun atau role.days
Tidak
Masa berlaku izin dalam hari. Nilai valid: 0 hingga 263-1. Jika Anda tidak menentukan parameter ini, izin secara default berlaku selama 180 hari.
Mencabut izin label eksplisit
Pemilik proyek atau pengguna dengan role Admin dapat mencabut izin label eksplisit.
Sintaks perintah
REVOKE Label ON TABLE <table_name> [(<column_list>)] FROM {USER|ROLE} <name>;Catatan penggunaan
Mencabut pemberian izin eksplisit pada tabel juga mencabut semua pemberian izin eksplisit pada kolom-kolom tabel tersebut untuk pengguna yang sama.
Mencabut pemberian izin eksplisit tidak memengaruhi tingkat akses yang ditetapkan untuk pengguna tersebut. Sebagai contoh, pengguna memiliki tingkat akses 2 dan diberikan izin eksplisit untuk mengakses data dengan tingkat sensitivitas hingga 3 dalam suatu tabel. Setelah izin eksplisit tersebut dicabut, pengguna masih dapat mengakses data dengan tingkat sensitivitas 2 atau lebih rendah dalam tabel tersebut.
Parameter
Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel atau view target.
Jalankan perintah
SHOW TABLES;di MaxCompute client untuk mendapatkan nama tabel atau view.column_list
Tidak
Menentukan kolom-kolom yang akan dicabut izinnya. Anda dapat menentukan beberapa nama kolom yang dipisahkan dengan koma (,).
name
Ya
Nama pengguna atau role.
Jalankan perintah
LIST users;atauLIST roles;di MaxCompute client untuk mendapatkan informasi akun atau role.
Menghapus izin yang kedaluwarsa
Setelah izin eksplisit kedaluwarsa, pemilik proyek atau pengguna dengan role Admin harus menjalankan perintah berikut untuk menghapusnya.
clear expired grants;Contoh
Asumsikan bahwa proyek bernama test_project berisi tabel bernama sale_detail. Tabel tersebut memiliki kolom shop_name, customer_id, dan total_price.
Bob@aliyun.com adalah pemilik proyek test_project. Allen adalah pengguna RAM di bawah akun Alibaba Cloud Bob, dan Bob telah menambahkan Allen ke proyek test_project.
Pernyataan berikut digunakan untuk membuat tabel:
CREATE TABLE sale_detail (
shop_name STRING COMMENT 'Shop name',
customer_id STRING COMMENT 'Customer ID',
total_price DOUBLE COMMENT 'Order total price'
);Contoh 1: Menetapkan tingkat sensitivitas
-- Bob memasuki proyek test_project.
USE test_project;
-- Tetapkan label tabel sale_detail ke tingkat 1. Pada titik ini, semua kolom dalam tabel memiliki tingkat sensitivitas 1.
SET Label 1 TO TABLE sale_detail;
-- Tetapkan label untuk kolom shop_name dan customer_id pada sale_detail ke tingkat 2. Kolom lain tetap pada tingkat 1.
SET Label 2 TO TABLE sale_detail(shop_name, customer_id);
-- Lihat informasi label tabel.
DESCRIBE sale_detail;
-- Hasilnya sebagai berikut:
+------------------------------------------------------------------------------------+
| TableLabel: |
| MaxLabel: L2 |
+------------------------------------------------------------------------------------+
| InternalTable: YES | Size: 0 |
+------------------------------------------------------------------------------------+
| Native Columns: |
+------------------------------------------------------------------------------------+
| Field | Type | Label | Comment |
+------------------------------------------------------------------------------------+
| shop_name | string | 2 | Shop name |
| customer_id | string | 2 | Customer ID |
| total_price | double | 1 | Order total price |
+------------------------------------------------------------------------------------+
-- Ubah label tabel sale_detail menjadi tingkat 3. Perhatikan bahwa label untuk kolom shop_name dan customer_id tetap pada tingkat 2, sedangkan label untuk kolom lain diubah menjadi 3.
SET Label 3 TO TABLE sale_detail;
-- Lihat informasi label tabel.
DESCRIBE sale_detail;
-- Hasilnya sebagai berikut:
+------------------------------------------------------------------------------------+
| TableLabel: 3 |
| MaxLabel: L3 |
+------------------------------------------------------------------------------------+
| InternalTable: YES | Size: 0 |
+------------------------------------------------------------------------------------+
| Native Columns: |
+------------------------------------------------------------------------------------+
| Field | Type | Label | Comment |
+------------------------------------------------------------------------------------+
| shop_name | string | 2 | Shop name |
| customer_id | string | 2 | Customer ID |
| total_price | double | 3 | Order total price |
+------------------------------------------------------------------------------------+
-- Ubah label untuk kolom shop_name dan customer_id pada tabel sale_detail menjadi tingkat 4. Label untuk kolom lain tetap pada tingkat 3.
SET Label 4 TO TABLE sale_detail(shop_name, customer_id);
-- Lihat informasi label tabel.
DESCRIBE sale_detail;
-- Hasilnya sebagai berikut:
+------------------------------------------------------------------------------------+
| TableLabel: 3 |
| MaxLabel: L4 |
+------------------------------------------------------------------------------------+
| InternalTable: YES | Size: 0 |
+------------------------------------------------------------------------------------+
| Native Columns: |
+------------------------------------------------------------------------------------+
| Field | Type | Label | Comment |
+------------------------------------------------------------------------------------+
| shop_name | string | 4 | Shop name |
| customer_id | string | 4 | Customer ID |
| total_price | double | 3 | Order total price |
+------------------------------------------------------------------------------------+Contoh 2: Menetapkan tingkat akses pengguna
Pengguna reguler dalam proyek: Kate@aliyun.com
Pengguna RAM dalam proyek: RAM$Bob@aliyun.com:Allen
-- Bob memasuki proyek test_project.
USE test_project;
-- Tetapkan label tingkat akses untuk Kate menjadi 3. Kate dapat mengakses data dengan tingkat sensitivitas dari 0 hingga 3.
SET Label 3 TO USER ALIYUN$Kate@aliyun.com;
-- Tetapkan label tingkat akses untuk pengguna RAM Allen menjadi 1. Allen dapat mengakses data dengan tingkat sensitivitas dari 0 hingga 1.
SET Label 1 TO USER RAM$Bob@aliyun.com:Allen;
-- Lihat informasi tingkat akses untuk Allen.
SHOW LABEL GRANTS FOR RAM$Bob@aliyun.com:Allen;
-- Hasilnya sebagai berikut:
User Label: 1
(granted label list is empty)Contoh 3: Memberikan izin eksplisit
-- Masuk ke proyek test_project.
USE test_project;
-- Berikan izin eksplisit kepada Allen untuk mengakses data dengan tingkat sensitivitas hingga 3 dalam tabel sale_detail. Izin berlaku selama 4 hari.
GRANT LABEL 3 ON TABLE sale_detail TO USER RAM$Bob@aliyun.com:Allen WITH exp 4;
-- Lihat hasil pemberian izin eksplisit untuk Allen.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
-- Hasilnya sebagai berikut:
User Label: 1
+-------------+--------------+--------------------------+
| Column | GrantedLabel | Expires |
+-------------+--------------+--------------------------+
| total_price | 3 | 2025-12-26T11:13:20+0800 |
+-------------+--------------+--------------------------+
-- Berikan izin eksplisit kepada Allen untuk mengakses data dengan tingkat sensitivitas hingga 4 pada kolom shop_name, customer_id, dan total_price dalam tabel sale_detail. Izin berlaku selama 10 hari.
GRANT LABEL 4 ON TABLE sale_detail(shop_name, customer_id, total_price) TO USER RAM$Bob@aliyun.com:Allen WITH exp 10;
-- Lihat hasil pemberian izin eksplisit untuk Allen.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
-- Hasilnya sebagai berikut:
User Label: 1
+-------------+--------------+--------------------------+
| Column | GrantedLabel | Expires |
+-------------+--------------+--------------------------+
| customer_id | 4 | 2026-01-01T11:14:40+0800 |
+-------------+--------------+--------------------------+
| shop_name | 4 | 2026-01-01T11:14:40+0800 |
+-------------+--------------+--------------------------+
| total_price | 4 | 2026-01-01T11:14:40+0800 |
+-------------+--------------+--------------------------+Contoh 4: Mencabut izin eksplisit
-- Dalam konfigurasi izin data sebelumnya:
-- Pertama, Allen diberikan izin eksplisit untuk mengakses data dengan tingkat sensitivitas hingga 3 dalam tabel sale_detail.
-- Kemudian, Allen diberikan izin eksplisit untuk mengakses data dengan tingkat sensitivitas hingga 4 pada kolom shop_name, customer_id, dan total_price dalam tabel sale_detail.
-- Cabut izin akses data tingkat kolom untuk Allen pada kolom shop_name, customer_id, dan total_price dalam tabel sale_detail.
REVOKE LABEL ON TABLE sale_detail(shop_name, customer_id, total_price) FROM USER RAM$Bob@aliyun.com:Allen;
-- Lihat hasil setelah izin dicabut untuk Allen.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
--Hasilnya sebagai berikut:
-- Cabut izin bagi Allen untuk mengakses data sensitif dalam tabel sale_detail.
REVOKE LABEL ON TABLE sale_detail FROM USER RAM$Bob@aliyun.com:Allen;
--Lihat hasil setelah izin dicabut untuk Allen.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
--Hasilnya sebagai berikut:
User Label: 1
(granted label list is empty)Langkah selanjutnya
Setelah memahami mekanisme otorisasi berbasis label, Anda dapat memberikan izin sesuai kebutuhan: