Tüm Ürünler
Search
Belge Merkezi

MaxCompute:Etiket tabanlı erişim kontrolü

Son Güncelleme:Oct 04, 2026

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.

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; veya LIST 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


    Evet

    Hedef 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


    Evet

    Kullanıcının veya rolün adı.

    Hesap veya rol bilgilerini almak için MaxCompute istemcisinde LIST users; veya LIST 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


    Evet

    Kullanı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


    Evet

    Hedef 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


    Evet

    Kullanıcının veya rolün adı.

    Hesap veya rol bilgilerini almak için MaxCompute istemcisinde LIST users; veya LIST 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


    Evet

    Hedef 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


    Evet

    Kullanıcının veya rolün adı.

    Hesap veya rol bilgilerini almak için MaxCompute istemcisinde LIST users; veya LIST 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: