All Products
Search
Document Center

MaxCompute:Kontrol akses berbasis label

Last Updated:May 16, 2026

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; atau LIST 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; atau LIST 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; atau LIST 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; atau LIST 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: