All Products
Search
Document Center

MaxCompute:Kontrol akses tingkat baris

Last Updated:May 22, 2026

Untuk mengontrol akses ke data tertentu dalam tabel MaxCompute bagi pengguna atau role, MaxCompute menyediakan kontrol akses tingkat baris. Fitur ini memungkinkan Anda menetapkan kebijakan yang mencocokkan pengguna dengan data yang diizinkan untuk mereka akses. Penerapan kebijakan langsung pada tabel memastikan bahwa pengguna dan role hanya melihat data yang sah, sehingga meningkatkan keamanan dan kepatuhan terhadap regulasi data.

Informasi latar belakang

Tabel MaxCompute dapat berisi data dalam jumlah besar. Dalam skenario berbagi data, administrator data sering kali perlu memastikan bahwa pengguna tertentu hanya dapat mengakses baris data yang telah diotorisasi untuk mereka lihat. Sebelumnya, mengontrol akses tingkat baris memerlukan pembuatan Tampilan terpisah untuk setiap pengguna atau menggunakan Tugas ETL untuk memfilter dan menyalin data ke tabel lain.

Kontrol akses tingkat baris menyederhanakan alur kerja ini. Anda tidak perlu memindahkan atau menyalin data, maupun membuat dan memelihara Tampilan.

Kontrol akses tingkat baris berlaku untuk skenario berikut:

  • Kueri SQL.

  • Mengunduh data tabel menggunakan MaxCompute Tunnel.

  • Membaca data tabel menggunakan mesin eksternal, seperti Spark atau Flink.

Catatan

Mesin yang tidak mendukung kontrol akses tingkat baris MaxCompute (seperti Hologres) tidak dapat mengakses data yang dilindungi. Anda tetap dapat berbagi data yang telah difilter menggunakan Tampilan atau tabel yang disalin.

Tabel berikut menjelaskan perintah untuk kontrol akses tingkat baris.

Tindakan

Deskripsi

Titik masuk

CREATE/REPLACE

Membuat atau memodifikasi Row Access Policy untuk pengguna atau role tertentu.

DROP

Menghapus kebijakan dari tabel.

DESC

Menampilkan detail izin kebijakan pada tabel.

LIST

Menampilkan daftar kebijakan pada tabel.

Batasan

  • Batasan berikut berlaku untuk kontrol akses tingkat baris:

    • Hanya administrator (pengguna dengan role Admin atau pemilik tabel) yang dapat mengonfigurasi Row Access Policy.

    • Anda tidak dapat mengonfigurasi Row Access Policy pada tabel transaksional, Tampilan, atau Tampilan yang di-materialisasi. Anda tidak dapat membuat Tampilan yang di-materialisasi pada tabel yang memiliki Row Access Policy, maupun menambahkan Row Access Policy ke tabel dasar dari Tampilan yang di-materialisasi. Namun, Anda dapat membuat Tampilan berdasarkan tabel yang memiliki Row Access Policy. Dalam kasus ini, hasil kueri dari Tampilan ditentukan oleh Row Access Policy pada tabel dasar dan aturan yang ditetapkan oleh pemilik Tampilan.

    • Anda tidak dapat melakukan operasi evolusi skema pada tabel yang memiliki Row Access Policy.

    • Anda tidak dapat menambahkan tabel yang memiliki Row Access Policy sebagai resource tabel UDF, maupun mengonfigurasi Row Access Policy pada tabel yang merupakan resource tabel UDF. Kesalahan tidak dilaporkan saat konfigurasi, tetapi akan muncul kesalahan pada waktu proses.

    • Anda tidak dapat menambahkan aturan penyembunyian (masking rule) ke tabel yang memiliki Row Access Policy.

    • Kontrol akses tingkat baris saat ini tidak mendukung Pemangkasan partisi. Jika ds adalah bidang partisi, pemindaian tabel penuh mungkin diperlukan untuk memfilter data meskipun kondisi filter seperti ds='20220101' ditentukan dalam filter_expr. Untuk informasi lebih lanjut tentang filter_expr, lihat Deskripsi filter_expr.

  • Batasan berikut berlaku saat Anda berbagi tabel dengan Row Access Policy lintas Proyek menggunakan package:

    • Anda dapat mengonfigurasi izin tingkat baris untuk pengguna yang tidak berada dalam Proyek tersebut, seperti Akun Alibaba Cloud atau Pengguna RAM dari penyewa saat ini.

    • Saat Anda menggunakan tabel dengan Row Access Policy lintas Proyek, hanya kebijakan pengguna atau kebijakan DEFAULT yang berlaku.

    • Anda tidak dapat menambahkan Row Access Policy lain ke tabel dalam package yang sudah memiliki Row Access Policy.

Catatan penggunaan

  • Perilaku operator atau fungsi yang digunakan dalam filter_expr dapat dipengaruhi oleh berbagai parameter flag. MaxCompute memeriksa apakah pengaturan parameter pada waktu proses kueri sesuai dengan pengaturan saat pembuatan kebijakan. Jika tidak sesuai, kesalahan berikut terjadi.

    FAILED: ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: java.lang.IllegalArgumentException: Row access policy flag mismatch for: xxx
  • Sebelum menjalankan perintah kontrol akses tingkat baris seperti CREATE, DROP, DESC, atau LIST, Anda harus menyetel parameter GUC berikut pada tingkat session untuk mengaktifkan kontrol akses tingkat baris.

    Catatan

    Fitur ini akan diaktifkan secara default pada tingkat session di rilis mendatang. Untuk informasi lebih lanjut, lihat pengumuman rilis.

    SET odps.sql.row.policy.enabled=true;
  • Saat Anda melakukan kueri pada tabel dengan kontrol akses tingkat baris, volume data masukan untuk penagihan bayar sesuai penggunaan tidak berkurang akibat filtering karena kontrol akses tingkat baris tidak mendukung Pemangkasan partisi. Pengguna dengan Row Access Policy mungkin menerima set hasil yang telah difilter meskipun melakukan kueri pada seluruh tabel. Volume data yang dipindai dari tabel sumber mungkin lebih besar dari yang diharapkan berdasarkan ukuran hasil. Perhatikan biaya Anda secara cermat.

  • Anda juga dapat menerapkan kontrol akses tingkat baris dengan membuat dan berbagi beberapa Tampilan atau tabel dengan aturan filter untuk pengguna berbeda. Pendekatan ini memungkinkan Anda melakukan komputasi pada data yang telah difilter dan lebih sederhana serta intuitif. Untuk informasi lebih lanjut, lihat Kontrol akses tingkat baris. Dibandingkan dengan membuat objek bersama untuk pengguna, kontrol akses tingkat baris membuat rencana eksekusi kueri untuk tabel asli menjadi lebih kompleks. Namun, pendekatan ini menghilangkan kebutuhan untuk membuat objek bersama individual, menghindari penyimpanan berlebihan, dan lebih cocok untuk menetapkan aturan bagi banyak pengguna. Anda dapat memilih metode yang paling sesuai dengan kebutuhan Anda.

Sintaks

Anda dapat menggunakan perintah CREATE/REPLACE, DROP, DESC, dan LIST untuk membuat (atau memodifikasi), menghapus, atau melihat Row Access Policy.

CREATE/REPLACE

  • Sintaks

    CREATE [OR REPLACE] ROW ACCESS POLICY [IF NOT EXISTS] <policy_name> 
    ON <table_name> 
    TO <authorized_objects> 
    FILTER USING <filter_expr>
    [AS <clause>];
  • Deskripsi

    Membuat atau memodifikasi Row Access Policy untuk memberikan izin kepada pengguna atau role tertentu.

  • Parameter

    Parameter

    Deskripsi

    policy_name

    Nama Row Access Policy. Anda dapat menyesuaikan nama tersebut.

    table_name

    Nama tabel yang akan diakses.

    authorized_objects

    Objek yang akan diberi otorisasi. Nilai yang valid:

    • USER <user_list>: Daftar nama pengguna yang diberi otorisasi, dipisahkan dengan koma.

    • ROLE <role_list>: Daftar nama role yang diberikan. Nama role dipisahkan dengan koma.

    • DEFAULT: Aturan default yang berlaku ketika tidak ada aturan pengguna atau aturan role yang cocok.

    filter_expr

    Ekspresi filter. Untuk informasi lebih lanjut, lihat deskripsi filter_expr.

    clause

    Atribut Row Access Policy. Nilainya dapat berupa PERMISSIVE atau RESTRICTIVE. Untuk informasi lebih lanjut, lihat Menentukan Atribut PERMISSIVE atau RESTRICTIVE.

    • deskripsi filter_expr

      Versi saat ini memberlakukan batasan ketat pada filter_expr:

      • filter_expr harus berupa ekspresi skalar yang dievaluasi ke tipe BOOLEAN.

      • Ekspresi tidak boleh berisi subkueri atau pernyataan seperti SELECT, CREATE, atau UPDATE.

      • filter_expr hanya dapat mereferensi konstanta atau kolom dari tabel yang diotorisasi. Ekspresi tidak boleh mereferensi kolom dari tabel lain.

      • Anda dapat menggunakan operator bawaan MaxCompute, termasuk operator relasional, aritmetika, bitwise, dan logika. Untuk informasi lebih lanjut, lihat Operator.

      • Hanya sebagian fungsi skalar bawaan yang diizinkan. Fungsi yang ditentukan pengguna (UDF), Fungsi agregat, dan Fungsi jendela tidak didukung. Fungsi yang didukung adalah:

        • Fungsi string: CONCAT, CONCAT_WS, GET_JSON_OBJECT, INSTR, LENGTH, LENGTHB, REGEXP_EXTRACT, REGEXP_REPLACE, REVERSE, SUBSTR, TOLOWER, TOUPPER, TRIM, LTRIM, RTRIM, REPLACE.

        • Fungsi matematika: ABS, ROUND.

        • Fungsi tanggal dan waktu: DATEADD, TO_DATE, TO_CHAR.

        • Fungsi lain: SIZE, FIELD, COALESCE, IF, SPLIT.

    • Menentukan atribut PERMISSIVE atau RESTRICTIVE

      Untuk pengguna tertentu, beberapa Kebijakan mungkin berlaku. Kebijakan-kebijakan ini kemudian digabungkan untuk menentukan apakah pengguna akhirnya dapat mengakses baris data tertentu. Saat membuat Row Access Policy, Anda dapat menggunakan AS {PERMISSIVE | RESTRICTIVE} untuk menentukan atribut kebijakan sebagai PERMISSIVE atau RESTRICTIVE. Jika Anda tidak menentukan atribut, kebijakan tersebut secara default bersifat PERMISSIVE. Berikut contohnya:

      Jika beberapa kebijakan berlaku untuk pengguna:

      • Jika semua kebijakan bersifat PERMISSIVE, kebijakan tersebut digabungkan dengan hubungan OR. Pengguna dapat mengakses baris jika ekspresi filter_expr salah satu kebijakan bernilai true.

      • Jika semua kebijakan bersifat RESTRICTIVE, kebijakan tersebut digabungkan dengan hubungan AND. Pengguna hanya dapat mengakses baris jika semua kebijakan terpenuhi.

      • Jika beberapa kebijakan bersifat PERMISSIVE dan yang lain bersifat RESTRICTIVE, pengguna hanya dapat mengakses baris jika kedua kondisi berikut terpenuhi untuk baris tersebut:

        • Setidaknya satu kebijakan PERMISSIVE terpenuhi.

        • Semua kebijakan RESTRICTIVE terpenuhi.

      Catatan

      Setiap kali Anda menambahkan Row Access Policy baru ke tabel, Anda harus mengevaluasi efek gabungan dari semua kebijakan pada tabel tersebut. Misalnya, jika pengguna tunduk pada kebijakan RESTRICTIVE dan PERMISSIVE, mereka harus memenuhi kondisi semua kebijakan RESTRICTIVE dan setidaknya satu kebijakan PERMISSIVE.

  • Kasus penggunaan

    • Memberikan izin kepada pengguna tertentu

      Asumsikan sebuah tabel bernama table01 dan berisi kolom STRING bernama region. Row Access Policy ditetapkan untuk beberapa pengguna untuk membatasi akses mereka hanya ke catatan di mana nilai kolom region adalah china. Contoh perintahnya sebagai berikut:

      CREATE ROW ACCESS POLICY policy01
      ON table01
      TO USER (aliyun$odps_test01**@aliyun.com,aliyun$odps_test02**@aliyun.com)
      FILTER USING (region = "china");
    • Memberikan izin kepada role tertentu

      Asumsikan sistem memiliki dua role, role1 dan role2. Anda dapat memberikan otorisasi kepada kedua role ini untuk hanya mengakses catatan di mana bidang region bernilai china. Perintahnya sebagai berikut:

      CREATE ROW ACCESS POLICY policy02
      ON table01
      TO ROLE (role1, role2)
      FILTER USING (region = "china");
    • Memberikan izin kepada pengguna default

      Saat Anda menambahkan Row Access Policy pertama ke tabel, akses menjadi terbatas. Pengguna yang tidak cocok dengan kebijakan apa pun kehilangan akses ke data karena mereka tidak berada dalam daftar izin. Untuk mengontrol akses pengguna lainnya, Anda dapat mengonfigurasi kebijakan default. Pada titik ini, administrator dapat menggunakan perintah berikut untuk memodifikasi izin akses pengguna default.

      Secara default, menolak akses ke semua pengguna lain setara dengan menentukan bahwa pengguna default tidak memiliki izin akses.

      CREATE ROW ACCESS POLICY policy03 
      ON table01
      TO DEFAULT 
      FILTER USING (false);

      Jika Anda ingin membatasi pengguna Default hanya untuk mengakses catatan di mana bidang region bernilai other, perintahnya sebagai berikut:

      CREATE ROW ACCESS POLICY policy04 
      ON table01
      TO default 
      FILTER USING (region = "other");
      Penting

      Saat menambahkan Row Access Policy ke tabel, pertimbangkan perilaku akses pengguna selain yang dikendalikan. Jika pengguna lain sebelumnya mengakses tabel, Anda harus menetapkan aturan eksplisit untuk mereka guna menghindari kesalahan penolakan akses yang tidak terduga.

  • Logika otorisasi

    Bagan alir berikut menunjukkan proses otorisasi saat pengguna mengakses tabel dengan Row Access Policy.

DROP

  • Menghapus kebijakan tertentu dari tabel.

    DROP ROW ACCESS POLICY <policy_name> ON <table_name>;
  • Menghapus semua kebijakan dari tabel.

    DROP ALL ROW ACCESS POLICY ON <table_name>;

DESC

Menampilkan detail kebijakan tertentu pada tabel.

DESC ROW ACCESS POLICY <policy_name> ON <table_name>;

LIST

  • Menampilkan daftar semua kebijakan pada tabel.

    LIST ROW ACCESS POLICY ON <table_name>;
  • Menampilkan kebijakan yang dikonfigurasi untuk pengguna tertentu pada tabel.

    LIST ROW ACCESS POLICY ON <table_name> TO USER <user_name>;
  • Menampilkan kebijakan yang dikonfigurasi untuk role tertentu pada tabel.

    LIST ROW ACCESS POLICY ON <table_name> TO ROLE <role_name>;

Data sampel

Buat tabel bernama policy_test dan masukkan data. Perintah SQL-nya sebagai berikut:

-- Buat tabel.
CREATE TABLE policy_test(a bigint, b string);

-- Masukkan data ke tabel.
INSERT overwrite TABLE policy_test VALUES(1L, "1"), (2L, "2"), (3L, "3"), (4L, "4");

-- Periksa data yang dimasukkan.
SELECT * FROM policy_test;
-- Hasil berikut dikembalikan:
+------------+---+
| a          | b |
+------------+---+
| 1          | 1 |
| 2          | 2 |
| 3          | 3 |
| 4          | 4 |
+------------+---+

Contoh

Bagian ini memberikan contoh cara menggunakan izin tingkat baris untuk pengguna default. Sebelum memulai, Anda perlu menyiapkan data sampel.

  • Contoh 1: Berikan izin tingkat baris pada tabel policy_test untuk mengizinkan pengguna Default mengakses data di mana a=2L.

    1. Buat Row Access Policy bernama policy01.

      CREATE row access policy policy01 ON policy_test TO default filter using (a = 2L);
    2. Lihat detail policy01 pada tabel policy_test.

      DESC row access policy policy01 on policy_test;

      Hasil berikut dikembalikan:

      -- Properti Restrictive diatur ke nilai default false.
      Authorization Type: Row Access Policy
      Name: policy01
      Objects: acs:odps:*:projects/clone_table_2/tables/policy_test
      FilterExpr: (a = 2L)
      NormalizedFilterExpr: (policy_test.a = 2L)
      Restrictive: false
      Settings: 
      
      
      OK
    3. Lakukan kueri pada tabel policy_test untuk memverifikasi bahwa otorisasi berlaku.

      SELECT * FROM policy_test;

      Hasil berikut dikembalikan:

      -- Kebijakan berlaku, dan hanya subset catatan yang dikembalikan.
      +------------+---+
      | a          | b |
      +------------+---+
      | 2          | 2 |
      +------------+---+
    4. Jika ringkasan Logview berisi informasi berikut, filtering tingkat baris telah dipicu.

      image

  • Contoh 2: Tambahkan dua izin tingkat baris permissive ke tabel untuk mengizinkan pengguna Default mengakses data di tabel policy_test di mana a=2L atau a=3L.

    1. Buat Row Access Policy bernama policy02.

      CREATE row access policy policy02 ON policy_test TO default filter using (a = 3L);
    2. Tampilkan daftar semua kebijakan pada tabel policy_test.

      LIST row access policy ON policy_test;

      Hasil berikut dikembalikan:

      Authorization Type: Row Access Policy
      Name: policy01
      Objects: acs:odps:*:projects/clone_table_2/tables/policy_test
      FilterExpr: (a = 2L)
      NormalizedFilterExpr: (policy_test.a = 2L)
      Restrictive: false
      Settings: 
      Name: policy02
      Objects: acs:odps:*:projects/clone_table_2/tables/policy_test
      FilterExpr: (a = 3L)
      NormalizedFilterExpr: (policy_test.a = 3L)
      Restrictive: false
      Settings: 
      
      
      OK
    3. Lakukan kueri pada tabel policy_test untuk memverifikasi bahwa otorisasi berlaku.

      SELECT * FROM policy_test;

      Hasil berikut dikembalikan:

      -- Dua kebijakan PERMISSIVE, policy01 dan policy02, keduanya berlaku. Dua catatan dikembalikan.
      +------------+---+
      | a          | b |
      +------------+---+
      | 2          | 2 |
      | 3          | 3 |
      +------------+---+
  • Contoh 3: Menambahkan dua izin tingkat baris permissive dan satu izin tingkat baris restrictive ke tabel memungkinkan pengguna Default mengakses data di tabel policy_test yang memenuhi (a=2L || a=3L) && a<3L.

    1. Buat Row Access Policy bernama policy03 dan atur atributnya menjadi RESTRICTIVE.

      CREATE row access policy policy03 ON policy_test TO default filter using (a < 3L) as restrictive;
    2. Lihat detail policy03 pada tabel policy_test.

      DESC row access policy policy03 ON policy_test;

      Hasil berikut dikembalikan:

      -- Properti Restrictive diatur ke true.
      Authorization Type: Row Access Policy
      Name: policy03
      Objects: acs:odps:*:projects/clone_table_2/tables/policy_test
      FilterExpr: (a < 3L)
      NormalizedFilterExpr: (policy_test.a < 3L)
      Restrictive: true
      Settings: 
      
      
      OK
    3. Lakukan kueri pada tabel policy_test untuk memverifikasi bahwa otorisasi berlaku.

      select * from policy_test;

      Hasil berikut dikembalikan:

      -- Kebijakan policy01, policy02, dan policy03 semuanya berlaku.
      -- policy01 dan policy02 bersifat PERMISSIVE, sehingga hanya satu yang perlu dipenuhi.
      -- policy03 bersifat RESTRICTIVE dan harus dipenuhi.
      +------------+---+
      | a          | b |
      +------------+---+
      | 2          | 2 |
      +------------+---+
  • Contoh 4: Tambahkan satu kebijakan PERMISSIVE dan satu kebijakan RESTRICTIVE ke tabel. Pengguna default harus memenuhi kedua kondisi untuk mengakses data tabel.

    1. Hapus Row Access Policy bernama policy01.

      SET odps.sql.row.policy.enabled=true;
      DROP ROW ACCESS POLICY policy01 ON policy_test;
    2. Lihat izin tingkat baris pada tabel policy_test.

      SET odps.sql.row.policy.enabled=true;
      LIST ROW ACCESS POLICY ON policy_test;

      Hasil berikut dikembalikan:

      Authorization Type: Row Access Policy
      Name: policy02
      Objects: acs:odps:*:projects/clone_table_2/tables/policy_test
      FilterExpr: (a = 3L)
      NormalizedFilterExpr: (policy_test.a = 3L)
      Restrictive: false
      Settings: 
      Name: policy03
      Objects: acs:odps:*:projects/clone_table_2/tables/policy_test
      FilterExpr: (a < 3L)
      NormalizedFilterExpr: (policy_test.a < 3L)
      Restrictive: true
      Settings: 
      
      
      OK
    3. Lakukan kueri pada tabel policy_test untuk memverifikasi hasil otorisasi.

      -- Periksa data dalam tabel.
      SELECT * FROM policy_test;

      Hasil berikut dikembalikan:

      -- Hasilnya kosong karena kondisi a=3 dan a<3 tidak dapat keduanya benar.
      +------------+------------+
      | a          | b          | 
      +------------+------------+
      +------------+------------+

Lampiran

Pemeriksaan perilaku kompatibilitas

Saat MaxCompute mengevaluasi ekspresi filter, perilakunya dapat dipengaruhi oleh parameter flag. Jika pengguna menetapkan Row Access Policy di bawah satu perilaku kompatibilitas lalu menetapkan kebijakan lain di bawah perilaku yang berbeda, kebocoran data dapat terjadi akibat hasil yang tidak terduga. Oleh karena itu, saat kontrol akses tingkat baris diterapkan, sistem memeriksa perilaku kompatibilitas pada saat definisi. Jika pengaturannya tidak konsisten, kesalahan dilaporkan dan akses ditolak.

Contoh: Contoh ini menggunakan data sampel untuk menunjukkan bagaimana kebijakan diterapkan di bawah perilaku kompatibilitas yang berbeda.

  1. Perilaku fungsi SUBSTR saat parameter keduanya bernilai 0 dipengaruhi oleh mode kompatibilitas Hive. Untuk informasi lebih lanjut, lihat SUBSTR.

    • Dalam mode kompatibilitas Hive, posisi awal 0 untuk fungsi SUBSTR menghasilkan hasil yang sama dengan posisi awal 1.

      SET odps.sql.hive.compatible=true;
      SELECT substr('abc', 0);
      -- Dalam mode kompatibilitas Hive, posisi awal 0 diperlakukan sama seperti posisi awal 1.
      +-----+
      | _c0 |
      +-----+
      | abc |
      +-----+
    • Di luar mode kompatibilitas Hive, posisi awal 0 mengembalikan string kosong.

      SET odps.sql.hive.compatible=false;
      SELECT substr('abc', 0);
      -- Di luar mode kompatibilitas Hive, posisi awal 0 mengembalikan string kosong.
      +-----+
      | _c0 |
      +-----+
      |     |
      +-----+
  2. Saat Anda membuat Row Access Policy, sistem memeriksa operator dan fungsi yang digunakan dalam filter_expr. Jika perilakunya bergantung pada parameter Flag tertentu, parameter tersebut direkam dalam Settings. Anda dapat menggunakan perintah DESC untuk melihat parameter Flag terkait.

    -- Hapus semua kebijakan pada tabel.
    DROP ALL row access policy ON policy_test;
    
    -- Konfigurasi kebijakan dalam mode kompatibilitas Hive, menggunakan fungsi SUBSTR dalam filter_expr.
    SET odps.sql.hive.compatible=true;
    CREATE row access policy policy04 ON policy_test TO default filter using(substr(b, 0)='1');
    
    -- Lihat detail kebijakan yang dikonfigurasi pada tabel policy_test.
    DESC row access policy policy04 on policy_test;

    Hasil berikut dikembalikan: Bidang Settings menunjukkan nilai parameter odps.sql.hive.compatible.

    Authorization Type: Row Access Policy
    Name: policy04
    Objects: acs:odps:*:projects/sql_optimizer/tables/policy_test
    FilterExpr: substr(b, 0) = '1'
    NormalizedFilterExpr: ::substr(policy_test.b, 0) = '1'
    Restrictive: false
    Settings: odps.sql.hive.compatible=true
  3. Saat kebijakan diterapkan selanjutnya, sistem memeriksa apakah Settings lingkungan saat ini konsisten dengan Settings saat pembuatan kebijakan. Jika tidak konsisten, kesalahan dilaporkan.

    • Terapkan kebijakan dalam mode kompatibilitas Hive.

      SET odps.sql.hive.compatible=true;
      SELECT * FROM policy_test;

      Hasil berikut dikembalikan:

      +------------+---+
      | a          | b |
      +------------+---+
      | 1          | 1 |
      +------------+---+
    • Dalam mode non-kompatibel Hive, kueri gagal dieksekusi karena nilai parameter odps.sql.hive.compatible tidak konsisten dengan nilai yang ditentukan saat kebijakan dibuat.

      SET odps.sql.hive.compatible=false;
      SELECT * FROM policy_test;

      Hasil berikut dikembalikan:

      FAILED: ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: java.lang.IllegalArgumentException: Row access policy flag mismatch for: odps.sql.hive.compatible, flag value when grant this policy is true, while at runtime is false. please set odps.sql.hive.compatible = true or contact your project manager.

Perilaku unduhan MaxCompute Tunnel

Saat Anda mengunduh data dari tabel dengan Row Access Policy menggunakan MaxCompute Tunnel, aturan kontrol akses tingkat baris tetap harus diikuti. Namun, Tunnel tidak dapat mengeksekusi logika filtering sendiri. Sebagai gantinya, Tunnel memulai Tugas SQL untuk memfilter data lalu mengunduh hasilnya.

Oleh karena itu, saat Anda menggunakan perintah Tunnel atau SDK Tunnel untuk mengunduh data dari tabel MaxCompute dengan Row Access Policy, terdapat periode tunggu selama Tugas SQL dieksekusi.

Menonaktifkan Pembuatan Row Access Policy

Untuk mencegah pembuatan Row Access Policy baru dalam Proyek, administrator Proyek dapat menjalankan perintah berikut untuk memodifikasi properti Proyek:

Penting

Hanya administrator yang dapat menggunakan perintah setproject untuk memodifikasi parameter ini pada tingkat Project. Pengguna tidak dapat memodifikasi nilai parameter pada tingkat Session.

setproject odps.sql.create.row.policy.disable=true;

Nilai yang valid adalah:

  • false (default): Mengizinkan pembuatan Row Access Policy baru.

  • true: Melarang pembuatan Row Access Policy baru, tetapi memungkinkan modifikasi dan penghapusan kebijakan yang sudah ada.