全部产品
Search
文档中心

MaxCompute:Kontrol Akses Tingkat Baris

更新时间:Jul 06, 2025

MaxCompute mendukung kontrol akses tingkat baris untuk membantu mengelola izin pengguna atau peran dalam mengakses data tertentu di tabel MaxCompute. Anda dapat menentukan aturan pencocokan antara pengguna dan data yang diizinkan untuk diakses dalam tabel MaxCompute sehingga pengguna atau peran tertentu hanya dapat melihat data yang mereka miliki izin untuk mengaksesnya. Hal ini meningkatkan keamanan dan kepatuhan data.

Informasi Latar Belakang

Tabel MaxCompute berisi sejumlah besar data. Dalam skenario berbagi data, administrator data ingin pengguna tertentu hanya mengakses baris-baris yang mereka miliki izin untuk mengaksesnya. Untuk membatasi akses pengguna ke baris tertentu, administrator harus membuat tampilan atau tugas ekstraksi, transformasi, dan pemuatan (ETL) untuk menyaring data untuk setiap pengguna dan mentransfer data tersebut ke tabel lain sebelum memberikan otorisasi.

Fitur kontrol akses tingkat baris memungkinkan administrator untuk memberikan izin kepada pengguna untuk mengakses data tabel tertentu tanpa perlu memigrasi dan menyalin data atau membuat dan memelihara tampilan.

Fitur kontrol akses tingkat baris cocok untuk skenario berikut:

  • Kueri SQL

  • Pengunduhan data tabel menggunakan perintah Tunnel

  • Membaca data tabel menggunakan mesin eksternal, seperti Spark dan Flink

Catatan

Mesin, seperti Hologres, yang tidak mendukung fitur kontrol akses tingkat baris dari MaxCompute, tidak dapat mengakses data yang dilindungi. Namun, Anda masih dapat menyaring dan berbagi data dengan menggunakan tampilan atau mentransfer data ke tabel lain.

Tabel berikut menjelaskan pernyataan kontrol akses tingkat baris.

Pernyataan

Deskripsi

Platform operasi

CREATE/REPLACE

Membuat atau memodifikasi kebijakan akses tingkat baris untuk memberikan izin kepada objek yang ditentukan (pengguna atau peran).

DROP

Menghapus kebijakan dari tabel.

DESC

Memeriksa detail izin kebijakan pada tabel.

LIST

Menampilkan daftar kebijakan pada tabel.

Batasan

  • Fitur kontrol akses tingkat baris memiliki batasan berikut:

    • Hanya administrator (peran Admin dan pemilik tabel) yang dapat mengonfigurasi kebijakan akses tingkat baris.

    • Anda tidak dapat mengonfigurasi kebijakan akses tingkat baris untuk tabel transaksional, tampilan, dan tampilan material. Anda tidak dapat membuat tampilan material untuk tabel yang telah dikonfigurasi dengan kebijakan akses tingkat baris atau menambahkan kebijakan akses tingkat baris ke tabel dasar tampilan material. Namun, Anda tetap dapat membuat tampilan berdasarkan tabel yang telah dikonfigurasi dengan kebijakan akses tingkat baris. Hasil kueri tampilan ditentukan oleh kebijakan akses tingkat baris yang dikonfigurasi untuk tabel dasar dan aturan tampilan yang didefinisikan oleh pemilik tampilan.

    • Anda tidak dapat melakukan operasi evolusi skema pada tabel yang telah dikonfigurasi dengan kebijakan akses tingkat baris.

    • Anda tidak dapat menambahkan tabel yang telah dikonfigurasi dengan kebijakan akses tingkat baris sebagai sumber daya fungsi yang ditentukan pengguna (UDF). Anda juga tidak dapat mengonfigurasi kebijakan akses tingkat baris untuk tabel yang ditambahkan sebagai sumber daya UDF. Jika Anda melakukan operasi ini, tidak ada kesalahan langsung yang dilaporkan. Namun, ketika UDF terkait dijalankan, kesalahan akan dilaporkan.

    • Anda tidak dapat menambahkan aturan masking ke bidang dalam tabel yang telah dikonfigurasi dengan kebijakan akses tingkat baris.

    • Kontrol akses tingkat baris tidak mendukung pemangkasan partisi. Sebagai contoh, jika bidang ds adalah bidang partisi, Anda mungkin perlu memulai pemindaian tabel penuh untuk menyaring data meskipun kondisi filter serupa dengan ds='20220101' ditentukan dalam filter_expr. Untuk informasi lebih lanjut tentang filter_expr, lihat Batasan pada filter_expr.

  • Akses lintas proyek berbasis paket ke tabel yang telah dikonfigurasi dengan kebijakan akses tingkat baris memiliki batasan berikut:

    • Anda dapat melampirkan kebijakan akses tingkat baris ke pengguna yang tidak ditambahkan ke proyek saat ini. Pengguna tersebut dapat berupa akun Alibaba Cloud atau pengguna RAM dari penyewa saat ini.

    • Jika Anda menggunakan tabel yang telah dikonfigurasi dengan kebijakan akses tingkat baris di proyek lain, hanya kebijakan pengguna atau kebijakan default yang mungkin dipenuhi dan data disaring berdasarkan kebijakan tersebut.

    • Anda tidak dapat menambahkan kebijakan akses tingkat baris ke tabel yang memiliki kebijakan akses tingkat baris dalam paket.

Peringatan

  • Eksekusi operator atau fungsi yang digunakan dalam filter_expr mungkin dipengaruhi oleh parameter bendera. Sistem memeriksa apakah pengaturan parameter yang digunakan selama kueri konsisten dengan pengaturan parameter yang dikonfigurasi selama pembuatan kebijakan. Jika tidak konsisten, pesan kesalahan berikut muncul:

    FAILED: ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: java.lang.IllegalArgumentException: Row access policy flag mismatch for: xxx
  • Sebelum Anda menjalankan perintah terkait kontrol akses tingkat baris, seperti CREATE, DROP, DESC, atau LIST, Anda harus mengonfigurasi parameter Grand Unified Configuration (GUC) berikut di tingkat sesi untuk mengaktifkan fitur kontrol akses tingkat baris.

    Catatan

    Fitur kontrol akses tingkat baris akan diaktifkan secara default di tingkat sesi di masa mendatang. Perhatikan pengumuman atau instruksi dokumentasi.

    SET odps.sql.row.policy.enabled=true;
  • Saat Anda mengeksekusi pernyataan SQL untuk mengkueri data dalam tabel yang telah diaktifkan kontrol akses tingkat baris, jumlah data masukan yang dikenakan biaya dalam metode penagihan bayar sesuai pemakaian tidak berkurang karena penyaringan data karena kontrol akses tingkat baris tidak mendukung pemangkasan partisi. Pengguna yang dilampirkan kebijakan akses tingkat baris mungkin memperoleh hasil yang disaring meskipun pengguna menentukan kueri tabel penuh dalam ekspresi SQL. Jumlah data yang dipindai dalam tabel sumber mungkin lebih besar daripada jumlah data yang diperkirakan pengguna berdasarkan hasil. Anda perlu mengurangi jumlah data yang akan dipindai untuk mengendalikan biaya.

  • Metode membuat beberapa tampilan atau tabel dengan aturan penyaringan spesifik pengguna yang berbeda dan membagikannya dapat mencapai kontrol akses tingkat baris, memungkinkan komputasi dilakukan pada data yang disaring, membuat operasi lebih nyaman dan intuitif. Untuk detail lebih lanjut, lihat Melakukan kontrol akses tingkat baris. Dibandingkan dengan metode membuat objek bersama untuk setiap pengguna, kontrol akses tingkat baris membuat rencana eksekusi kueri berdasarkan tabel asli menjadi lebih kompleks. Namun, ini menghilangkan kebutuhan untuk membuat objek bersama secara individual untuk setiap pengguna dan menghindari penyimpanan redundan objek bersama. Ini juga lebih cocok untuk mendefinisikan aturan untuk sejumlah besar pengguna, memungkinkan Anda menggunakannya secara fleksibel sesuai kebutuhan.

Sintaks

Anda dapat mengeksekusi pernyataan CREATE/REPLACE, DROP, DESC, dan LIST untuk membuat (atau memodifikasi), menghapus, atau melihat kebijakan akses tingkat baris.

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 kebijakan akses tingkat baris untuk memberikan izin kepada objek yang ditentukan (pengguna atau peran).

  • Parameter

    Parameter

    Deskripsi

    policy_name

    Nama kebijakan akses tingkat baris. Anda dapat menentukan nama kustom.

    table_name

    Nama tabel yang akan diakses.

    authorized_objects

    Objek yang diberikan izin. Nilai valid:

    • USER <user_list>: nama pengguna yang diberikan izin. Pisahkan beberapa nama pengguna dengan koma (,).

    • ROLE <role_list>: nama peran yang diberikan izin. Pisahkan beberapa nama peran dengan koma (,).

    • DEFAULT: kebijakan default ketika kebijakan pengguna atau peran tidak terpenuhi.

    filter_expr

    Ekspresi filter. Untuk informasi lebih lanjut, lihat Batasan pada filter_expr.

    clause

    Atribut kebijakan akses tingkat baris. Nilai valid: PERMISSIVE dan RESTRICTIVE. Untuk informasi lebih lanjut, lihat Tentukan atribut PERMISSIVE atau RESTRICTIVE.

    • Batasan pada filter_expr

      filter_expr memiliki batasan berikut dalam versi ini:

      • Nilai filter_expr harus berupa ekspresi skalar dan bertipe data BOOLEAN.

      • filter_expr tidak dapat berisi subkueri atau pernyataan seperti SELECT, CREATE, dan UPDATE.

      • filter_expr hanya dapat merujuk konstanta atau bidang dalam tabel yang diotorisasi. filter_expr tidak dapat merujuk bidang dalam tabel lain.

      • filter_expr dapat berisi operator bawaan MaxCompute, termasuk operator relasional, operator aritmatika, operator bitwise, dan operator logika. Untuk informasi lebih lanjut, lihat Operator.

      • filter_expr hanya dapat berisi fungsi skalar bawaan tertentu. Parameter ini tidak dapat memanggil UDF, fungsi agregat, atau fungsi jendela. filter_expr mendukung fungsi berikut:

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

        • Fungsi matematika: ABS dan ROUND.

        • Fungsi waktu: DATEADD, TO_DATE, dan TO_CHAR.

        • Fungsi lainnya: SIZE, FIELD, COALESCE, IF, dan SPLIT.

    • Deskripsi atribut PERMISSIVE dan RESTRICTIVE

      Beberapa kebijakan mungkin berlaku pada pengguna tertentu. Sistem menggabungkan beberapa kebijakan untuk menentukan apakah pengguna dapat mengakses baris data. Saat Anda membuat kebijakan akses tingkat baris, Anda dapat menggunakan AS {PERMISSIVE | RESTRICTIVE} untuk menentukan atribut PERMISSIVE atau RESTRICTIVE untuk kebijakan tersebut. Jika Anda tidak menentukan atribut, nilai defaultnya adalah PERMISSIVE. Contoh:

      Beberapa kebijakan berlaku pada pengguna.

      • Jika atribut kebijakan adalah PERMISSIVE, hubungan antara kebijakan adalah OR. Dalam hal ini, pengguna dapat mengakses baris data jika nilai filter_expr dalam salah satu kebijakan adalah true.

      • Jika atribut kebijakan adalah RESTRICTIVE, hubungan antara kebijakan adalah AND. Dalam hal ini, pengguna hanya dapat mengakses baris data jika semua kebijakan terpenuhi.

      • Jika atribut kebijakan tertentu adalah PERMISSIVE dan atribut kebijakan lainnya adalah RESTRICTIVE, pengguna hanya dapat mengakses baris data jika kedua kondisi berikut terpenuhi:

        • Setidaknya satu dari kebijakan yang atributnya adalah PERMISSIVE terpenuhi.

        • Semua kebijakan yang atributnya adalah RESTRICTIVE terpenuhi.

      Catatan

      Setiap kali Anda menambahkan kebijakan akses tingkat baris ke tabel, Anda harus mengevaluasi efek keseluruhan dari kombinasi semua kebijakan akses tingkat baris pada tabel. Sebagai contoh, jika kebijakan RESTRICTIVE dan kebijakan PERMISSIVE dikonfigurasikan untuk pengguna pada saat yang sama, kebijakan PERMISSIVE juga harus dipenuhi.

  • Skenario

    • Berikan izin kepada pengguna tertentu.

      Dalam contoh ini, tabel bernama table01 berisi bidang yang bertipe data STRING dan nama kolomnya adalah region. Konfigurasikan kebijakan akses tingkat baris untuk pengguna tertentu untuk mengizinkan pengguna mengakses hanya catatan di mana nilai dalam bidang region adalah china. Contoh pernyataan:

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

      Dalam contoh ini, dua peran bernama role1 dan role2 ada dalam sistem. Berikan izin kepada kedua peran sehingga mereka hanya dapat mengakses catatan yang nilainya dalam bidang region adalah china. Contoh pernyataan:

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

      Sebagai contoh, sekitar 100 pengguna potensial mungkin mengakses tabel tertentu. Administrator secara terpisah memberikan izin kepada salah satu pengguna dengan menggunakan perintah otorisasi. Pengendalian akses juga diperlukan untuk pengguna lainnya. Jika Anda memberikan izin kepada pengguna atau peran tertentu pada tabel, kontrol akses tingkat baris diaktifkan untuk tabel tersebut. Pengguna lain tidak dapat mengakses data dalam tabel karena mereka tidak memiliki izin akses pada tabel. Dalam hal ini, administrator dapat mengeksekusi pernyataan berikut untuk memodifikasi izin akses pengguna default.

      Secara default, pengguna lain tidak diizinkan mengakses tabel. Ini sama dengan efek 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 untuk mengakses hanya catatan di mana nilai bidang region adalah other, eksekusi pernyataan berikut:

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

      Saat Anda menambahkan kebijakan akses tingkat baris ke tabel untuk pengguna tertentu, Anda harus mempertimbangkan perilaku akses pengguna lainnya. Jika tabel telah diakses oleh pengguna lain, Anda juga harus mengonfigurasi kebijakan untuk mengizinkan akses dari pengguna tersebut untuk menghindari kesalahan larangan akses yang tidak terduga.

  • Logika otentikasi

    Gambar berikut menunjukkan proses otentikasi saat pengguna mengakses tabel yang telah dikonfigurasi dengan kebijakan akses tingkat baris.

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

Memeriksa detail izin kebijakan pada tabel.

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

LIST

  • Menampilkan semua kebijakan pada tabel.

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

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

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

Kode sampel

Buat tabel bernama policy_test dan masukkan data ke dalam tabel. Contoh pernyataan:

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

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

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

Contoh

Contoh berikut menunjukkan cara memberikan izin akses tingkat baris kepada pengguna default. Sebelum otorisasi, Anda harus menyiapkan data sampel.

  • Contoh 1: Tambahkan kebijakan akses tingkat baris ke tabel policy_test untuk mengizinkan pengguna default mengakses data di baris a=2L dalam tabel.

    1. Buat kebijakan akses tingkat baris policy01.

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

      DESC row access policy policy01 on policy_test;

      Hasil yang dikembalikan:

      -- Hasil berikut dikembalikan. Nilai Restrictive adalah false, yang merupakan nilai default.
      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. Kueri data dalam tabel policy_test untuk memeriksa apakah otorisasi berlaku.

      SELECT * FROM policy_test;

      Hasil yang dikembalikan:

      -- Hasil berikut dikembalikan. Kebijakan berlaku dan hanya catatan tertentu yangdikembalikan.
      +------------+---+
      | a          | b |
      +------------+---+
      | 2          | 2 |
      +------------+---+
  • Contoh 2: Tambahkan dua kebijakan akses tingkat baris yang atributnya adalah PERMISSIVE ke tabel untuk mengizinkan pengguna default mengakses data di baris a=2L dan a=3L dalam tabel policy_test.

    1. Buatkebijakan akses tingkat baris policy02.

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

      LIST row access policy ON policy_test;

      Hasil yang dikembalikan:

      -- 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. Kueri data dalam tabel policy_test untuk memeriksa apakah otorisasi berlaku.

      SELECT * FROM policy_test;

      Hasil yang dikembalikan:

      -- Dua kebijakan, policy01 dan policy02, berlaku pada saat yang sama. Atribut kedua kebijakan adalah PERMISSIVE. Oleh karena itu, dua catatan dikembalikan.
      +------------+---+
      | a          | b |
      +------------+---+
      | 2          | 2 |
      | 3          | 3 |
      +------------+---+
  • Contoh 3: Tambahkan dua kebijakan akses tingkat baris yang atributnya adalah PERMISSIVE dan satu kebijakan akses tingkat baris yang atributnya adalah RESTRICTIVE ke tabel untuk mengizinkan pengguna default mengakses data yang memenuhi kondisi (a=2L||a=3L)&&a<3L dalam tabel policy_test.

    1. Buat kebijakan akses tingkat baris policy03 dan atur atribut kebijakan menjadi RESTRICTIVE.

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

      DESC row access policy policy03 ON policy_test;

      Hasil yang dikembalikan:

      -- Hasil berikut dikembalikan. Nilai Restrictive adalah 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. Kueri data dalam tabel policy_test untuk memeriksa apakah otorisasi berlaku.

      select * from policy_test;

      Hasil yang dikembalikan:

      -- Hasil berikut dikembalikan. Dalam contoh ini, policy01, policy02, dan policy03 berlaku pada saat yang sama. 
      -- Atribut policy01 dan policy02 adalah PERMISSIVE. Oleh karena itu, pengguna default dapat mengakses tabel jika salah satu dari dua kebijakan terpenuhi. 
      -- Atribut policy03 adalah RESTRICTIVE. Oleh karena itu, pengguna default hanya dapat mengakses tabel jika kebijakan ini terpenuhi. 
      +------------+---+
      | a          | b |
      +------------+---+
      | 2          | 2 |
      +------------+---+
  • Contoh 4: Tambahkan kebijakan akses tingkat baris yang atributnya adalah PERMISSIVE dan kebijakan akses tingkat baris yang atributnya adalah RESTRICTIVE untuk tabel. Pengguna default hanya dapat mengakses data tabel ketika kedua kebijakan terpenuhi.

    1. Hapus kebijakan akses tingkat baris policy01.

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

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

      Hasil yang 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. Kueri data dalam tabel policy_test untuk memverifikasi hasil otorisasi.

      -- Periksa data yang dimasukkan.
      SELECT * FROM policy_test;

      Hasil yang dikembalikan:

      -- Hasil yang dikembalikan kosong karena policy02 dan policy03 berlaku pada saat yang sama. 
      +------------+------------+
      | a          | b          | 
      +------------+------------+
      +------------+------------+

Lampiran

Pemeriksaan perilaku kompatibel

Saat MaxCompute melakukan perhitungan berdasarkan ekspresi filter, hasilnya mungkin dipengaruhi oleh parameter bendera. Jika pengguna mendefinisikan kebijakan akses tingkat baris di bawah perilaku kompatibel tertentu dan mendefinisikan kebijakan akses tingkat baris lainnya di bawah perilaku kompatibel lainnya, kebocoran data mungkin terjadi jika hasilnya tidak sesuai dengan harapan. Oleh karena itu, saat MaxCompute melakukan kontrol akses tingkat baris, sistem memeriksa perilaku kompatibel yang dilakukan saat kebijakan akses tingkat baris didefinisikan. Jika perilaku kompatibel tidak konsisten, kesalahan dilaporkan dan akses dilarang.

Contoh: Contoh ini menunjukkan penerapan kebijakan di bawah perilaku kompatibel yang berbeda berdasarkan data sampel.

  1. Perilaku ketika parameter kedua fungsi SUBSTR disetel ke 0 dipengaruhi dalam edisi tipe data yang kompatibel dengan Hive. Untuk informasi lebih lanjut, lihat SUBSTR.

    • Jika edisi tipe data yang kompatibel dengan Hive diaktifkan, hasil yang diperoleh ketika posisi awal fungsi SUBSTR adalah 0 sama dengan hasil yang diperoleh ketika posisi awal fungsi SUBSTR adalah 1.

      SET odps.sql.hive.compatible=true;
      SELECT substr('abc', 0);
      -- Jika edisi tipe data yang kompatibel dengan Hive diaktifkan, hasil yang diperoleh ketika posisi awal fungsi SUBSTR adalah 0 sama dengan hasil yang diperoleh ketika posisi awal fungsi SUBSTR adalah 1. 
      +-----+
      | _c0 |
      +-----+
      | abc |
      +-----+
    • Jika edisi tipe data yang kompatibel dengan Hive dinonaktifkan, nilai yang dikembalikan adalah string kosong ketika posisi awal fungsi SUBSTR adalah 0.

      SET odps.sql.hive.compatible=false;
      SELECT substr('abc', 0);
      -- Jika edisi tipe data yang kompatibel dengan Hive dinonaktifkan, nilai yang dikembalikan adalah string kosong ketika posisi awal fungsi SUBSTR adalah 0.
      +-----+
      | _c0 |
      +-----+
      |     |
      +-----+
  2. Saat Anda membuat kebijakan akses tingkat baris, sistem memeriksa operator dan fungsi yang digunakan dalam filter_expr. Jika perilaku operator dan fungsi bergantung pada parameter bendera tertentu, sistem mencatat parameter bendera tersebut dalam Settings. Anda dapat mengeksekusi pernyataan DESC untuk melihat parameter bendera.

    -- Hapus semua kebijakan yang dikonfigurasikan untuk tabel.
    DROP ALL row access policy ON policy_test;
    
    -- Konfigurasikan kebijakan dalam edisi tipe data yang kompatibel dengan Hive. Fungsi SUBSTR digunakan 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 pada tabel policy_test.
    DESC row access policy policy04 on policy_test;

    Hasil berikut dikembalikan. Nilai parameter odps.sql.hive.compatible dicatat dalam Settings.

    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, sistem menentukan apakah Settings lingkungan saat ini konsisten dengan Settings yang dikonfigurasikan saat kebijakan dibuat. Jika tidak konsisten, kesalahan dilaporkan.

    • Dalam edisi tipe data yang kompatibel dengan Hive, kebijakan diterapkan.

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

      Hasil yang dikembalikan:

      +------------+---+
      | a          | b |
      +------------+---+
      | 1          | 1 |
      +------------+---+
    • Dalam edisi selain edisi tipe data yang kompatibel dengan Hive, kueri gagal karena nilai parameter odps.sql.hive.compatible berbeda dari nilai yang ditentukan saat kebijakan dibuat.

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

      Hasil yang 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 Tunnel

Untuk tabel yang telah dikonfigurasi dengan kebijakan akses tingkat baris, Anda harus mematuhi kebijakan akses tingkat baris saat menggunakan perintah Tunnel untuk mengunduh data tabel. Namun, MaxCompute Tunnel tidak memiliki kemampuan komputasi untuk menjalankan logika penyaringan kontrol akses tingkat baris. Sistem memulai tugas SQL untuk menyaring data berdasarkan aturan dan kemudian mengunduh hasil komputasi tugas tersebut.

Oleh karena itu, saat Anda menggunakan perintah Tunnel atau SDK Tunnel untuk mengunduh data dari tabel MaxCompute yang telah dikonfigurasi dengan kebijakan akses tingkat baris, diperlukan waktu untuk menunggu tugas SQL berjalan.

Pelarangan pembuatan kebijakan akses tingkat baris

Jika administrator proyek ingin melarang pembuatan kebijakan akses tingkat baris baru dalam proyek, administrator proyek dapat menjalankan perintah berikut untuk memodifikasi properti proyek:

Penting

Hanya administrator yang dapat mengubah nilai parameter odps.sql.create.row.policy.disable di tingkat proyek dengan menggunakan perintah setproject. Pengguna tidak dapat mengubah nilai parameter ini di tingkat sesi.

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

Nilai valid:

  • false: Anda diizinkan untuk membuat kebijakan akses tingkat baris. Ini adalah nilai default.

  • true: Anda tidak diizinkan untuk membuat kebijakan akses tingkat baris. Anda diizinkan untuk memodifikasi atau menghapus kebijakan yang ada.