MaxCompute, etiket tabanlı erişim kontrolünü destekler. Tablolara veya sütunlara hassasiyet düzeyi etiketleri atayabilir ve kullanıcılara proje düzeyinde erişim düzeyi etiketleri verebilirsiniz. Kullanıcılar, bir MaxCompute projesindeki verilere yalnızca verilerin hassasiyet düzeyi kendilerine atanan erişim düzeyine eşit veya daha düşük olduğunda erişebilir. Bu konu, bu izinlerin nasıl yönetileceğini açıklar ve örnekler sunar.
Çalışma mantığı
LabelSecurity olarak da bilinen etiket tabanlı erişim kontrolü, varsayılan olarak devre dışı olan proje düzeyinde zorunlu erişim kontrolü (MAC) ilkesidir.
Proje sahibi, proje düzeyinde LabelSecurity'yi etkinleştirmek veya devre dışı bırakmak için SET LabelSecurity=true|false; komutunu çalıştırabilir.
LabelSecurity'yi etkinleştirdikten sonra proje sahibinin aşağıdaki işlemleri yapması gerekir:
Tablolar veya sütunlar için net hassasiyet düzeyleri tanımlayın.
Kullanıcı erişim düzeyi sınıflandırmalarını belirleyin.
Tablolara veya sütunlara hassasiyet düzeyi etiketleri, kullanıcılara veya rollere ise erişim düzeyi etiketleri atayın.
Bir kullanıcı hassasiyet düzeyi atanmış verilere eriştiğinde, hedef tablo için SELECT iznine sahip olmalı ve yalnızca hassasiyet düzeyi kendi erişim düzeyine eşit veya daha düşükse tablo veya sütun verilerine erişebilir.
Desteklenen özellikler
Sütun düzeyinde destek: Desteklenen en ince granülerlik sütun düzeyidir. Bir tablodaki herhangi bir sütun için hassasiyet düzeyi etiketleri ayarlayabilirsiniz. Bu sayede bir tablo, farklı hassasiyet düzeylerine sahip sütunlardan oluşabilir.
Görünüm desteği: Görünümler için hassasiyet düzeyi etiketleri ayarlayabilirsiniz. Bir görünümün hassasiyet düzeyi etiketi, bu görünümün kaynak tablolarındaki etiketlerden bağımsızdır.
Bölüm sütunlarında hassasiyet düzeyi etiketleri ayarlamak desteklenmez.
Desteklenen işlemler
Proje sahibi veya Admin rolüne sahip bir kullanıcı aşağıdaki işlemleri yapabilir.
Tablolar veya sütunlar için hassasiyet düzeyi etiketlerini ayarlama
Kullanıcılar veya roller için erişim düzeyi etiketlerini ayarlama
Bu işlemleri MaxCompute istemcisi, MaxCompute Studio ve DataWorks gibi araçları kullanarak yapabilirsiniz.
Varsayılan erişim kontrolü ilkeleri
No-ReadUp: Kullanıcıların kendi erişim düzeyinden daha yüksek bir hassasiyet düzeyine sahip verilere erişmesini yasaklar. İş senaryonuz bunu gerektiriyorsa açık bir izin vermeniz gerekir. Daha fazla bilgi için bkz. Etiket izinlerini açıkça verme.
Trusted-User: Kullanıcıların kendi erişim düzeyinden daha yüksek olmayan bir hassasiyet düzeyine sahip veri yazmasına olanak tanır. Yeni oluşturulan tablolar veya görünümler varsayılan olarak 0. düzeye (gizli değil) ayarlanır. Yeni kullanıcılar da varsayılan olarak 0. düzeydedir.
Kullanım notları
-
Bazı geleneksel MAC sistemleri, bir proje içinde verilerin keyfi dağıtımını önlemek için daha karmaşık güvenlik ilkelerini destekler.
Örneğin, No-WriteDown ilkesi kullanıcıların kendi erişim düzeylerinden daha düşük bir hassasiyet düzeyine veri yazmasını yasaklar. Veri hassasiyet düzeylerinin yönetim maliyetini azaltmak amacıyla MaxCompute varsayılan olarak No-WriteDown ilkesini desteklemez.
Projeniz benzer kısıtlamalar gerektiriyorsa projenizin güvenlik yapılandırmasını ihtiyaçlarınıza göre değiştirmek için
Set ObjectCreatorHasGrantPermission=false;komutunu çalıştırabilirsiniz. Verilerin farklı projeler arasında akmasını önlemek için ProjectProtection özelliğini etkinleştirmek üzere
set ProjectProtection=true;komutunu çalıştırabilirsiniz. Bu özellik etkinleştirildiğinde veri erişimini mevcut projeyle sınırlayarak verilerin proje dışına çıkmasını engeller. Proje veri koruması hakkında daha fazla bilgi için bkz. Veri koruma mekanizması.Bir nesneyi sildiğinizde MaxCompute bununla ilişkili tüm etiket izinlerini otomatik olarak geri alır.
Bir kullanıcıyı projeden kaldırdığınızda MaxCompute izinlerini saklar. Kullanıcıyı daha sonra projeye tekrar eklerseniz önceki izinleri yeniden etkinleşir. Bir kullanıcının izin bilgilerini kalıcı olarak temizlemek için bkz. Silinen kullanıcıların bıraktığı izin bilgilerini kalıcı olarak temizleme.
Ön koşullar
Etiket tabanlı erişim kontrolü çözümünü kullanmadan önce aşağıdaki bilgilere ihtiyacınız vardır:
-
İzin verilecek hesabın veya rolün adı. Hesabı veya rolü MaxCompute projesine eklemiş olmalısınız.
Alibaba Cloud hesap formatı: ALIYUN$<account_id>
RAM kullanıcı hesabı formatı: RAM$<account_id>:<RAM_user_UID>
RAM rolü hesabı formatı:
RAM$<account_id>:role/<RAM_role_name>
Hesap veya rol bilgilerini almak için MaxCompute istemcisinde
LIST users;veyaLIST roles;komutunu çalıştırın.Yeni bir kullanıcı veya rol eklemek için bkz. Kullanıcı Planlama ve Yönetimi veya Rol Planlama.
-
Hedef tablonun veya sütunun adı.
Tablo veya görünüm adlarını ve sütunları almak için MaxCompute istemcisinde
SHOW TABLES;komutunu çalıştırın.
Tablolar veya sütunlar için hassasiyet düzeylerini ayarlama
Proje sahibi veya Admin rolüne sahip bir kullanıcı, tablolar veya sütunlar için hassasiyet düzeyi etiketleri ayarlayabilir.
-
Komut sözdizimi
SET LabelSecurity=true; SET Label <number> TO TABLE <table_name>[(<column_list>)]; -
Kullanım notları
Bir tablo için hassasiyet düzeyi etiketi ayarlar ancak sütunları için ayarlamazsanız tablodaki tüm sütunlar tablonun hassasiyet düzeyini miras alır.
Sütun düzeyindeki bir etiket her zaman tablo düzeyindeki etiketi geçersiz kılar. Tablo düzeyinde bir etiket ayarlamak mevcut sütun düzeyi etiketlerini etkilemez. Örneğin, başlangıçta bir tablonun hassasiyet düzeyini 2 olarak ayarlar ardından col1 adlı bir sütunun hassasiyet düzeyini 3 olarak belirlerseniz tablonun hassasiyet düzeyi 2 olarak kalır, col1'in hassasiyet düzeyi 3 olur ve diğer sütunlar 2. düzeyde kalır.
Bir tablo veya sütundaki mevcut hassasiyet düzeyi etiketini değiştirmek için komutu yeni düzeyle birlikte yeniden çalıştırın.
Bir etiketi kaldırmak için hassasiyet düzeyini 0 olarak ayarlayın.
-
Parametreler
Parametre
Gerekli
Açıklama
number
Evet
Hassasiyet düzeyini belirtir. Geçerli değerler: 0 ile 9. Daha yüksek değerler daha yüksek hassasiyeti gösterir.
table_name
EvetHedef tablonun veya görünümün adı.
Tablo veya görünüm adlarını almak için MaxCompute istemcisinde
SHOW TABLES;komutunu çalıştırın.
column_list
Hayır
Bir veya daha fazla sütun adı belirtir. Birden çok sütun adını virgülle (,) ayırın.
Kullanıcılar veya roller için erişim düzeylerini ayarlama
Proje sahibi veya Admin rolüne sahip bir kullanıcı, diğer kullanıcılar veya roller için erişim düzeyi etiketleri ayarlayabilir.
-
Komut sözdizimi
SET LabelSecurity=true; SET Label <number> TO {USER|ROLE} <name>; -
Kullanım notları
Bir kullanıcı için erişim düzeyi etiketi ayarlandıktan sonra kullanıcı yalnızca hassasiyet düzeyi kendi erişim düzeyine eşit veya daha düşük olan verilere erişebilir. Örneğin, bir kullanıcıya 3 erişim düzeyi atanırsa yalnızca 0 ile 3 arasındaki hassasiyet düzeyine sahip verilere erişebilir.
Bir kullanıcı veya rol için mevcut erişim düzeyi etiketini değiştirmek için komutu yeni erişim düzeyi etiketiyle birlikte yeniden çalıştırın.
-
Parametreler
Parametre
Gerekli
Açıklama
number
Evet
Kullanıcının veya rolün erişebileceği en yüksek veri hassasiyet düzeyini belirtir. Geçerli değerler: 0 ile 9.
name
EvetKullanıcının veya rolün adı.
Hesap veya rol bilgilerini almak için MaxCompute istemcisinde
LIST users;veyaLIST roles;komutunu çalıştırın.
Etiket izinlerini açıkça verme
Proje sahibi veya Admin rolüne sahip bir kullanıcı, kullanıcılara atanan erişim düzeyini aşan verilere erişme izni verebilir.
-
Komut sözdizimi
GRANT Label <number> ON TABLE <table_name> [(<column_list>)] TO {USER|ROLE} <name> [WITH exp <days>]; -
Kullanım notları
Belirli bir kullanıcı için sütun üzerinde yapılan açık bir izin, üst tablo üzerinde yapılan açık izni geçersiz kılar.
-
Parametreler
Parametre
Gerekli
Açıklama
number
EvetKullanıcının veya rolün erişebileceği en yüksek veri hassasiyet düzeyi.
Bu değer veri hassasiyet düzeyi etiketlerine karşılık gelir. Geçerli değerler: 0 ile 9.
table_name
EvetHedef tablonun veya görünümün adı.
Tablo veya görünüm adlarını almak için MaxCompute istemcisinde
SHOW TABLES;komutunu çalıştırın.
column_list
Hayır
İzin verilecek sütunları belirtir. Virgülle (,) ayrılmış birden çok sütun adı belirtebilirsiniz.
name
EvetKullanıcının veya rolün adı.
Hesap veya rol bilgilerini almak için MaxCompute istemcisinde
LIST users;veyaLIST roles;komutunu çalıştırın.
days
Hayır
İznin gün cinsinden geçerlilik süresi. Geçerli değerler: 0 ile 263-1. Bu parametreyi belirtmezseniz izin varsayılan olarak 180 gün geçerlidir.
Açık etiket izinlerini geri alma
Proje sahibi veya Admin rolüne sahip bir kullanıcı açık etiket izinlerini geri alabilir.
-
Komut sözdizimi
REVOKE Label ON TABLE <table_name> [(<column_list>)] FROM {USER|ROLE} <name>; -
Kullanım notları
Bir tablo üzerindeki açık izni geri almak aynı kullanıcı için o tablonun sütunlarındaki tüm açık izinleri de geri alır.
Açık bir izni geri almak kullanıcının atanmış erişim düzeyini etkilemez. Örneğin, bir kullanıcının erişim düzeyi 2'dir ve bir tablodaki hassasiyet düzeyi 3'e kadar olan verilere açıkça erişim izni verilmiştir. Açık izin geri alındığında kullanıcı tabloda hassasiyet düzeyi 2 veya daha düşük olan verilere hala erişebilir.
-
Parametreler
Parametre
Gerekli
Açıklama
table_name
EvetHedef tablonun veya görünümün adı.
Tablo veya görünüm adlarını almak için MaxCompute istemcisinde
SHOW TABLES;komutunu çalıştırın.
column_list
Hayır
İzinlerin geri alınacağı sütunları belirtir. Virgülle (,) ayrılmış birden çok sütun adı belirtebilirsiniz.
name
EvetKullanıcının veya rolün adı.
Hesap veya rol bilgilerini almak için MaxCompute istemcisinde
LIST users;veyaLIST roles;komutunu çalıştırın.
Süresi dolmuş izinleri temizleme
Açık izinlerin süresi dolduktan sonra proje sahibi veya Admin rolüne sahip bir kullanıcı bunları temizlemek için aşağıdaki komutu çalıştırmalıdır.
clear expired grants;
Örnekler
test_project adlı bir projenin sale_detail adlı bir tablo içerdiğini varsayalım. Tabloda shop_name, customer_id ve total_price sütunları bulunur.
Bob@aliyun.com, test_project projesinin proje sahibidir. Allen, Bob'un Alibaba Cloud hesabı altındaki bir RAM kullanıcısıdır ve Bob, Allen'ı test_project projesine eklemiştir.
Tabloyu oluşturmak için aşağıdaki ifade kullanılır:
CREATE TABLE sale_detail (
shop_name STRING COMMENT 'Shop name',
customer_id STRING COMMENT 'Customer ID',
total_price DOUBLE COMMENT 'Order total price'
);
Örnek 1: Hassasiyet düzeylerini ayarlama
-- Bob enters the test_project project.
USE test_project;
-- Set the label of the sale_detail table to level 1. At this point, all columns in the table have a sensitivity level of 1.
SET Label 1 TO TABLE sale_detail;
-- Set the label for the shop_name and customer_id columns of sale_detail to level 2. Other columns remain at level 1.
SET Label 2 TO TABLE sale_detail(shop_name, customer_id);
-- View the label information of the table.
DESCRIBE sale_detail;
-- The result is as follows:
+------------------------------------------------------------------------------------+
| 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 |
+------------------------------------------------------------------------------------+
-- Modify the label of the sale_detail table to level 3. Note that the labels for the shop_name and customer_id columns remain at level 2, and the labels for other columns are changed to 3.
SET Label 3 TO TABLE sale_detail;
-- View the label information of the table.
DESCRIBE sale_detail;
-- The result is as follows:
+------------------------------------------------------------------------------------+
| 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 |
+------------------------------------------------------------------------------------+
-- Modify the label for the shop_name and customer_id columns of the sale_detail table to level 4. The labels for other columns remain at level 3.
SET Label 4 TO TABLE sale_detail(shop_name, customer_id);
-- View the label information of the table.
DESCRIBE sale_detail;
-- The result is as follows:
+------------------------------------------------------------------------------------+
| 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 |
+------------------------------------------------------------------------------------+
Örnek 2: Kullanıcı erişim düzeylerini ayarlama
Projedeki normal kullanıcı: Kate@aliyun.com
Projedeki RAM kullanıcısı: RAM$Bob@aliyun.com:Allen
-- Bob enters the test_project project.
USE test_project;
-- Set the access level label for Kate to 3. Kate can access data with a sensitivity level from 0 to 3.
SET Label 3 TO USER ALIYUN$Kate@aliyun.com;
-- Set the access level label for the RAM user Allen to 1. Allen can access data with a sensitivity level from 0 to 1.
SET Label 1 TO USER RAM$Bob@aliyun.com:Allen;
-- View the access level information for Allen.
SHOW LABEL GRANTS FOR RAM$Bob@aliyun.com:Allen;
-- The result is as follows:
User Label: 1
(granted label list is empty)
Örnek 3: Açık izinler verme
-- Enter the test_project project.
USE test_project;
-- Explicitly grant Allen permission to access data with a sensitivity level up to 3 in the sale_detail table. The permission is valid for 4 days.
GRANT LABEL 3 ON TABLE sale_detail TO USER RAM$Bob@aliyun.com:Allen WITH exp 4;
-- View the result of the explicit grant for Allen.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
-- The result is as follows:
User Label: 1
+-------------+--------------+--------------------------+
| Column | GrantedLabel | Expires |
+-------------+--------------+--------------------------+
| total_price | 3 | 2025-12-26T11:13:20+0800 |
+-------------+--------------+--------------------------+
-- Explicitly grant Allen permission to access data with a sensitivity level up to 4 in the shop_name, customer_id, and total_price columns of the sale_detail table. The permission is valid for 10 days.
GRANT LABEL 4 ON TABLE sale_detail(shop_name, customer_id, total_price) TO USER RAM$Bob@aliyun.com:Allen WITH exp 10;
-- View the result of the explicit grant for Allen.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
-- The result is as follows:
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 |
+-------------+--------------+--------------------------+
Örnek 4: Açık izinleri geri alma
-- In the previous data permission configuration:
-- First, Allen was explicitly granted permission to access data with a sensitivity level up to 3 in the sale_detail table.
-- Then, Allen was explicitly granted permission to access data with a sensitivity level up to 4 in the shop_name, customer_id, and total_price columns of the sale_detail table.
-- Revoke the column-level data access permission for Allen on the shop_name, customer_id, and total_price columns of the sale_detail table.
REVOKE LABEL ON TABLE sale_detail(shop_name, customer_id, total_price) FROM USER RAM$Bob@aliyun.com:Allen;
-- View the result after the permission is revoked for Allen.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
--The result is as follows:
-- Revoke the permission for Allen to access sensitive data in the sale_detail table.
REVOKE LABEL ON TABLE sale_detail FROM USER RAM$Bob@aliyun.com:Allen;
--View the result after the permission is revoked for Allen.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
--The result is as follows:
User Label: 1
(granted label list is empty)
Sonraki adımlar
Etiket tabanlı yetkilendirme mekanizmasını anladıktan sonra ihtiyaç duyduğunuz şekilde izinler verebilirsiniz: