MaxCompute memungkinkan Anda menetapkan level akses berbasis label kepada pengguna di tingkat proyek dan label sensitivitas pada tabel atau kolom tabel. Pengguna hanya dapat mengakses data tabel atau kolom yang tingkat sensitivitasnya kurang dari atau sama dengan level akses mereka sendiri. Topik ini menjelaskan cara memberikan izin berbasis label beserta contohnya.
Ikhtisar
Kontrol akses berbasis label—juga dikenal sebagai LabelSecurity—adalah kebijakan kontrol akses wajib yang diterapkan di tingkat proyek. Fitur ini dinonaktifkan secara default.
Pemilik proyek dapat menjalankan perintah SET LabelSecurity=true|false; di tingkat proyek untuk mengaktifkan atau menonaktifkan LabelSecurity.
Setelah mengaktifkan LabelSecurity, pemilik proyek harus menyelesaikan langkah-langkah berikut:
Menentukan tingkat sensitivitas yang jelas untuk tabel atau kolom tabel
Menentukan standar untuk klasifikasi level akses pengguna
Menetapkan label sensitivitas pada tabel atau kolom tabel serta menetapkan label level akses kepada pengguna atau role
Saat pengguna mengakses data yang memiliki label sensitivitas, pengguna tersebut harus memiliki izin SELECT pada tabel target. Selain itu, pengguna hanya dapat mengakses data tabel atau kolom yang tingkat sensitivitasnya kurang dari atau sama dengan level akses pengguna tersebut.
Kemampuan yang didukung
Dukungan tingkat kolom: Granularitas terkecil yang didukung adalah tingkat kolom. Anda dapat menetapkan label sensitivitas ke kolom mana pun dalam suatu tabel. Satu tabel dapat berisi kolom-kolom dengan tingkat sensitivitas yang berbeda.
Dukungan view: Anda dapat menetapkan label sensitivitas pada view. Label sensitivitas view bersifat independen dari label sensitivitas tabel sumbernya.
Anda tidak dapat menetapkan label sensitivitas pada kolom kunci partisi.
Operasi yang didukung
Pemilik proyek dan pengguna dengan role Admin dapat melakukan operasi berikut.
Atur akses tag data untuk pengguna atau role berdasarkan tingkat sensitivitas
Cabut izin akses ke data yang sangat sensitif dari pengguna atau role
Anda dapat melakukan operasi-operasi ini menggunakan MaxCompute client, MaxCompute Studio, atau DataWorks.
Kebijakan kontrol akses default
No-ReadUp: Pengguna tidak dapat mengakses data yang tingkat sensitivitasnya melebihi level akses mereka. Jika bisnis Anda memerlukan perilaku ini, Anda harus secara eksplisit memberikan izin. Untuk informasi lebih lanjut tentang pemberian izin eksplisit, lihat Pemberian label eksplisit.
Trusted-User: Pengguna dapat menulis data yang tingkat sensitivitasnya tidak melebihi level akses mereka. Secara default, tabel atau view yang baru dibuat memiliki tingkat sensitivitas 0 (unclassified). Pengguna baru diberikan level akses 0 secara default.
Ruang lingkup penggunaan
Pada beberapa sistem kontrol akses wajib (MAC) tradisional, kebijakan keamanan yang kompleks mencegah data didistribusikan secara sembarangan dalam suatu proyek.
Misalnya, pengguna tidak dapat menulis data yang tingkat sensitivitasnya lebih rendah dari atau sama dengan level izin akses mereka (No-WriteDown). Namun, MaxCompute tidak mendukung No-WriteDown secara default karena beban manajemen yang terkait dengan tingkat sensitivitas.
Jika proyek Anda memiliki persyaratan serupa, Anda dapat menjalankan perintah
Set ObjectCreatorHasGrantPermission=false;untuk mengubah konfigurasi aman proyek guna mencapai tujuan kontrol tersebut.Untuk mencegah aliran data antar-proyek, jalankan perintah
set ProjectProtection=true;untuk mengaktifkan perlindungan proyek. Setelah perlindungan proyek diaktifkan, pengguna hanya dapat mengakses data di dalam proyek tersebut. Hal ini mencegah data mengalir keluar dari proyek. Untuk informasi lebih lanjut, lihat Mekanisme perlindungan data.Jika suatu objek dihapus, MaxCompute secara otomatis mencabut semua izin berbasis label yang terkait dengan objek tersebut.
Saat pengguna dihapus, izin yang dimilikinya tetap ada. Jika pengguna tersebut kemudian ditambahkan kembali ke proyek, izin historisnya akan diaktifkan ulang. Untuk sepenuhnya menghapus izin pengguna tersebut, lihat Hapus sepenuhnya izin yang tersisa dari pengguna yang dihapus.
Prasyarat
Sebelum menggunakan kontrol akses berbasis label, catat informasi berikut:
Nama akun atau role pengguna yang akan diberikan izin. Akun atau role tersebut harus sudah ditambahkan ke proyek MaxCompute.
Akun Alibaba Cloud menggunakan format ALIYUN$<account_id>
Akun pengguna RAM menggunakan format RAM$<account_id>:<ram_user_uid>
Akun role RAM menggunakan format `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 yang akan diberikan izin.
Jalankan perintah
SHOW TABLES;di MaxCompute client untuk menampilkan daftar nama tabel atau view serta nama kolom.
Tetapkan label sensitivitas pada data tabel atau kolom
Pemilik proyek atau pengguna dengan role Admin menetapkan label sensitivitas pada tabel atau kolom tabel.
Sintaks perintah
SET LabelSecurity=true; SET Label <number> TO TABLE <table_name>[(<column_list>)];Catatan
Jika Anda menetapkan label sensitivitas pada tabel tetapi tidak pada kolom-kolomnya, semua kolom akan mewarisi tingkat sensitivitas tabel tersebut. Misalnya, jika Anda menetapkan level 2 pada suatu tabel dan tidak menetapkan level pada kolom-kolomnya, semua kolom akan memiliki level 2.
Label tingkat kolom menggantikan label tingkat tabel, terlepas dari nilai levelnya. Label tingkat tabel tidak pernah menggantikan label tingkat kolom. Misalnya, jika Anda menetapkan level 2 pada tabel lalu menetapkan level 3 pada kolom col1, tabel tetap memiliki level 2, col1 memiliki level 3, dan kolom lain tetap memiliki level 2.
Untuk mengubah label sensitivitas yang sudah ada pada tabel atau kolom, jalankan kembali perintah tersebut dengan level baru.
Deskripsi
Nama Parameter
Wajib
Deskripsi
number
Ya
Tingkat sensitivitas. Nilai valid: 0 hingga 9. Nilai yang lebih tinggi menunjukkan keamanan yang lebih tinggi.
table_name
Ya
Nama tabel atau view target.
Jalankan perintah
SHOW TABLES;di MaxCompute client untuk menampilkan daftar nama tabel atau view.column_list
Tidak
Nama kolom atau kolom-kolom. Pisahkan beberapa nama kolom dengan koma (,).
Tetapkan label level akses pada pengguna atau role
Pemilik proyek atau pengguna dengan role Admin menetapkan label level akses kepada pengguna atau role lain.
Sintaks perintah
SET LabelSecurity=true; SET Label <number> TO {USER|ROLE} <name>;Catatan
Setelah menetapkan label level akses pada pengguna, pengguna tersebut hanya dapat mengakses data yang tingkat sensitivitasnya kurang dari atau sama dengan level yang ditetapkan. Misalnya, jika Anda menetapkan level 3 pada pengguna, pengguna tersebut hanya dapat mengakses data dengan tingkat sensitivitas 0 hingga 3.
Untuk mengubah label level akses yang sudah ada pada pengguna atau role, jalankan kembali perintah tersebut dengan level baru.
Deskripsi parameter
Nama Parameter
Wajib
Deskripsi
number
Ya
Tingkat sensitivitas tertinggi yang dapat diakses oleh pengguna atau role tersebut. Nilai valid: 0 hingga 9. Nilai ini sesuai dengan label sensitivitas.
name
Ya
Nama pengguna atau role.
Jalankan perintah
LIST users;atauLIST roles;di MaxCompute client untuk menampilkan informasi akun atau role.
Pemberian label eksplisit
Pemilik proyek atau pengguna dengan role Admin memberikan izin kepada pengguna dengan level akses rendah untuk mengakses data yang sangat sensitif.
Sintaks perintah
GRANT Label <number> ON TABLE <table_name> [(<column_list>)] TO {USER|ROLE} <name> [WITH exp <days>];Catatan
Pemberian eksplisit tingkat kolom menggantikan pemberian eksplisit tingkat tabel untuk pengguna yang sama.
Deskripsi parameter
Nama Parameter
Wajib
Deskripsi
number
Ya
Tingkat sensitivitas tertinggi dari data yang dapat diakses oleh pengguna atau role tersebut.
Nilai valid berkisar dari 0 hingga 9, dan setiap nilai sesuai dengan tag tingkat sensitivitas data.
table_name
Ya
Nama tabel atau view target.
Jalankan perintah
SHOW TABLES;di MaxCompute client untuk menampilkan daftar nama tabel atau view.column_list
Tidak
Tentukan parameter ini saat memberikan akses ke kolom tertentu dalam tabel atau view target. Pisahkan beberapa nama kolom dengan koma (,).
name
Ya
Nama pengguna atau role.
Jalankan perintah
LIST users;atauLIST roles;di MaxCompute client untuk menampilkan informasi akun atau role.days
Tidak
Waktu hidup (TTL) izin, dalam satuan hari. Nilai valid: 0 hingga 263-1. Jika diabaikan, TTL default adalah 180 hari.
Cabut pemberian label eksplisit
Pemilik proyek atau pengguna dengan role Admin mencabut pemberian label eksplisit.
Sintaks perintah
REVOKE Label ON TABLE <table_name> [(<column_list>)] FROM {USER|ROLE} <name>;Catatan
Mencabut pemberian eksplisit tingkat tabel juga mencabut semua pemberian eksplisit tingkat kolom untuk pengguna yang sama.
Mencabut pemberian label eksplisit tidak memengaruhi label level akses pengguna. Misalnya, jika pengguna memiliki level akses 2 dan sebelumnya diberikan izin eksplisit untuk mengakses data dengan tingkat sensitivitas hingga 3, pengguna tersebut masih dapat mengakses data dengan tingkat sensitivitas hingga 2 setelah izin tersebut dicabut.
Deskripsi metrik
Nama Parameter
Wajib
Deskripsi
table_name
Ya
Nama tabel atau view target.
Jalankan perintah
SHOW TABLES;di MaxCompute client untuk menampilkan daftar nama tabel atau view.column_list
Tidak
Tentukan parameter ini saat mencabut akses ke kolom tertentu dalam tabel atau view target. Pisahkan beberapa nama kolom dengan koma (,).
name
Ya
Nama pengguna atau role.
Jalankan perintah
LIST users;atauLIST roles;di MaxCompute client untuk menampilkan informasi akun atau role.
Bersihkan izin yang kedaluwarsa
Setelah pemberian label eksplisit kedaluwarsa, pemilik proyek atau pengguna dengan role Admin harus menjalankan perintah berikut untuk membersihkan informasi izin yang kedaluwarsa.
clear expired grants;Contoh kontrol akses berbasis label
Asumsikan sebuah tabel bernama sale_detail ada di proyek test_project. 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 Bob dan telah ditambahkan ke test_project.
Pernyataan pembuatan tabel adalah sebagai berikut:
CREATE TABLE sale_detail (
shop_name STRING COMMENT 'Shop name',
customer_id STRING COMMENT 'Customer ID',
total_price DOUBLE COMMENT 'Order total'
);Contoh 1: Tetapkan label sensitivitas pada tabel sale_detail atau kolom-kolomnya
-- Bob masuk ke test_project.
USE test_project;
-- Tetapkan tabel sale_detail ke tingkat sensitivitas 1. Semua kolom sekarang memiliki level 1.
SET Label 1 TO TABLE sale_detail;
-- Tetapkan kolom shop_name dan customer_id ke level 2. Kolom lain tetap di level 1.
SET Label 2 TO TABLE sale_detail(shop_name, customer_id);
-- Lihat informasi label tabel.
DESCRIBE sale_detail;
-- Output
+------------------------------------------------------------------------------------+
| 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 | | Order total |
+------------------------------------------------------------------------------------+
-- Ubah tabel sale_detail ke level 3. Kolom shop_name dan customer_id tetap di level 2. Kolom lain berubah ke level 3.
SET Label 3 TO TABLE sale_detail;
-- Lihat informasi label tabel.
DESCRIBE sale_detail;
-- Output
+------------------------------------------------------------------------------------+
| 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 |
+------------------------------------------------------------------------------------+
-- Ubah kolom shop_name dan customer_id ke level 4. Kolom lain tetap di level 3.
SET Label 4 TO TABLE sale_detail(shop_name, customer_id);
-- Lihat informasi label tabel.
DESCRIBE sale_detail;
-- Output
+------------------------------------------------------------------------------------+
| TableLabel: |
| 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 | | Order total |
+------------------------------------------------------------------------------------+Contoh 2: Tetapkan label level akses pada pengguna reguler dan pengguna RAM di proyek
Pengguna reguler di proyek: Kate@aliyun.com
Pengguna RAM di proyek: RAM$Bob@aliyun.com:Allen
-- Bob masuk ke test_project.
USE test_project;
-- Tetapkan level akses Kate ke 3. Kate dapat mengakses data dengan tingkat sensitivitas 0 hingga 3.
SET Label 3 TO USER ALIYUN$Kate@aliyun.com;
-- Tetapkan level akses pengguna RAM Allen ke 1. Allen dapat mengakses data dengan tingkat sensitivitas 0 hingga 1.
SET Label 1 TO USER RAM$Bob@aliyun.com:Allen;
-- Lihat level akses Allen.
SHOW LABEL GRANTS FOR RAM$Bob@aliyun.com:Allen;
-- Output
User Label: 1
(granted label list is empty)Contoh 3: Berikan izin eksplisit kepada Allen untuk mengakses data yang sangat sensitif
-- Masuk ke test_project.
USE test_project;
-- Berikan izin eksplisit kepada Allen untuk mengakses data di sale_detail dengan tingkat sensitivitas hingga 3. Izin berlaku selama 4 hari.
GRANT LABEL 3 ON TABLE sale_detail TO USER RAM$Bob@aliyun.com:Allen WITH exp 4;
-- Lihat izin eksplisit Allen.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
-- Output:
User Label: 1
+-------------+--------------+--------------------------+
| Column | GrantedLabel | Expires |
+-------------+--------------+--------------------------+
| total_price | 3 | 2025-12-26T11:13:20+0800 |
+-------------+--------------+--------------------------+
-- Berikan izin eksplisit kepada Allen untuk mengakses kolom shop_name, customer_id, dan total_price di sale_detail dengan tingkat sensitivitas hingga 4. 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 izin eksplisit Allen.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
-- Output:
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: Cabut izin Allen untuk mengakses data yang sangat sensitif
-- Sebelumnya:
-- Pertama, diberikan izin eksplisit kepada Allen untuk mengakses data di sale_detail dengan tingkat sensitivitas hingga 3.
-- Kemudian, diberikan izin eksplisit kepada Allen untuk mengakses kolom shop_name, customer_id, dan total_price di sale_detail dengan tingkat sensitivitas hingga 4.
-- Cabut izin Allen untuk mengakses kolom shop_name, customer_id, dan total_price di sale_detail.
REVOKE LABEL ON TABLE sale_detail(shop_name, customer_id, total_price) FROM USER RAM$Bob@aliyun.com:Allen;
-- Lihat izin Allen yang dicabut.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
-- Output:
-- Cabut izin Allen untuk mengakses data sensitif di sale_detail.
REVOKE LABEL ON TABLE sale_detail FROM USER RAM$Bob@aliyun.com:Allen;
-- Lihat izin Allen yang dicabut.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
-- Output:
User Label: 1
+-------------+--------------+---------+
| Column | GrantedLabel | Expires |
+-------------+--------------+---------+
| total_price | 1 | |
+-------------+--------------+---------+Langkah selanjutnya
Setelah memahami cara kerja otorisasi berbasis label, berikan izin sesuai kebutuhan bisnis Anda: