Anda tidak dapat mengakses resource di proyek lain secara langsung, bahkan dalam skenario lintas akun, kecuali Anda merupakan anggota proyek target. Untuk mengaktifkan akses tersebut, MaxCompute menyediakan otorisasi berbasis paket. Anda dapat mengemas resource beserta izinnya ke dalam sebuah paket, yang kemudian dapat diinstal oleh proyek lain untuk mendapatkan akses lintas proyek. Topik ini menjelaskan mekanisme otorisasi berbasis paket dan memberikan contoh penggunaannya.
Informasi latar belakang
Dalam topik ini, sebuah Akun Alibaba Cloud memiliki beberapa proyek MaxCompute dan perlu membagikan tabel tertentu, file resource, serta user-defined function (UDF) di Project A dengan proyek lain milik akun tersebut atau proyek dalam Akun Alibaba Cloud lain. Anda dapat membagikan resource tersebut ke proyek lain dengan salah satu metode berikut:
Tambahkan pengguna dari proyek lain ke Project A dan berikan masing-masing pengguna izin untuk mengakses resource tersebut. Metode ini kompleks dan tidak disarankan untuk skenario akses resource lintas proyek. Gunakan metode ini hanya jika diperlukan kontrol akses detail halus terhadap anggota tim proyek Anda. Untuk informasi lebih lanjut tentang sintaksis perintah otorisasi, lihat Kontrol akses berbasis ACL.
Gunakan mekanisme kontrol akses berbasis paket.
Mekanisme kontrol akses berbasis paket digunakan untuk berbagi data dan resource lintas proyek. Pemilik Project A mengemas resource yang dibutuhkan proyek lain beserta izin operasi atas resource tersebut, lalu memberikan otorisasi kepada pemilik proyek lain untuk menginstal paket tersebut. Setelah paket diinstal, pemilik proyek lain dapat menentukan apakah akan memberikan otorisasi kepada pengguna di proyek mereka untuk mengakses resource dalam paket tersebut. Gambar berikut menunjukkan cara penerapan mekanisme kontrol akses berbasis paket.

Gambar di atas menunjukkan bahwa mekanisme kontrol akses berbasis paket melibatkan dua entitas: pembuat paket dan pengguna paket. Tabel berikut menjelaskan informasi mengenai entitas tersebut serta operasi yang dapat dilakukan oleh masing-masing entitas.
Entitas | Deskripsi | Operasi yang dapat dijalankan | Peran entitas | Platform operasi |
Pembuat paket | Proyek tempat pembuat paket berada menyediakan resource untuk dibagikan. Pembuat paket mengemas resource proyek yang perlu dibagikan beserta izin operasi atas resource tersebut, lalu memberikan otorisasi kepada pengguna paket untuk menginstal paket dan mengakses resource di dalamnya. | Pemilik proyek tempat resource berada atau pengguna yang diberi peran tingkat proyek Super_Administrator pada proyek tempat resource berada | ||
Pengguna paket | Proyek tempat pengguna paket berada mengakses resource dalam paket. Setelah pengguna paket menginstal paket yang dibuat oleh pembuat paket, pengguna paket dapat langsung mengakses resource dalam paket tersebut. | Pemilik proyek yang menggunakan resource atau pengguna yang diberi peran tingkat proyek Super_Administrator atau Admin pada proyek yang menggunakan resource | ||
Berikan otorisasi kepada pengguna atau role untuk mengakses paket | ||||
Batasan
Sebelum menggunakan mekanisme kontrol akses berbasis paket, perhatikan batasan berikut:
Maksimal 1.000 resource dapat ditambahkan ke dalam satu paket.
Satu paket dapat diinstal untuk maksimal 100.000 proyek MaxCompute.
Maksimal 100 paket dalam satu proyek MaxCompute dapat diinstal untuk proyek MaxCompute lain.
Maksimal 100.000 paket dapat dibuat untuk satu proyek MaxCompute.
Maksimal 100.000 paket dapat diinstal untuk satu proyek MaxCompute.
Buat paket
Pembuat paket membuat paket dalam proyek MaxCompute.
Sintaks
create package <package_name>;Parameter
Parameter
Wajib
Deskripsi
package_name
Ya
Nama paket, yang bersifat unik dalam satu proyek. Nama harus terdiri dari 1 hingga 128 karakter, dan dapat berisi huruf, angka, serta garis bawah (_).
Anda dapat menjalankan perintah
show packages;di MaxCompute client untuk melihat paket yang telah dibuat.Contoh
Dalam contoh ini, Akun Alibaba Cloud Bob@aliyun.com adalah pemilik proyek test_project_a dan perlu memberikan otorisasi kepada proyek lain untuk mengakses resource tertentu di proyek test_project_a. Buat paket. Contoh perintah:
-- Beralih ke proyek test_project_a. use test_project_a; -- Buat paket bernama datashare. create package datashare;
Tambahkan resource ke paket
Pembuat paket menambahkan resource yang dibutuhkan pengguna paket ke dalam paket yang telah dibuat.
Sintaks
add <object_type> <object_name> to package <package_name> [with privileges <privileges>];Batasan
Anda tidak dapat menambahkan proyek ke dalam paket.
Perhatian
Saat menambahkan resource ke paket, resource tersebut tidak dikemas sebagai Snapshot. Jika data resource diperbarui setelah ditambahkan ke paket, pengguna paket akan mengakses data resource terbaru.
Parameter
Parameter
Wajib
Deskripsi
object_type
Ya
Jenis objek yang ingin Anda tambahkan ke paket. Anda hanya dapat menentukan satu jenis objek dalam satu waktu.
Untuk informasi lebih lanjut tentang jenis objek, lihat Permissions.
object_name
Ya
Nama objek yang ingin Anda hapus dari paket. Anda dapat memperoleh nama objek dengan salah satu metode berikut:
Nama tabel: Jalankan perintah
show tables;di MaxCompute client untuk memperoleh nama tabel atau view.Nama file resource: Jalankan perintah
list resources;di MaxCompute client untuk memperoleh nama resource.Nama fungsi: Jalankan perintah
list functions;di MaxCompute client untuk memperoleh nama fungsi.Nama instans: Jalankan perintah
show instances;di MaxCompute client untuk memperoleh nama instans.
CatatanSaat menambahkan resource, Anda dapat menggunakan wildcard (*). Misalnya,
add table * to package package_name;menambahkan semua tabel ke paket.Saat menambahkan resource ke paket, jangan gunakan format Nama Proyek.Nama Resource untuk nama resource. Misalnya, jika Anda ingin menambahkan tabel bernama table di Project A ke paket, jangan gunakan A.table sebagai nama resource. Anda harus menggunakan table sebagai nama resource.
package_name
Ya
Nama paket.
Anda dapat menjalankan perintah
show packages;di MaxCompute client untuk melihat paket yang telah dibuat.privileges
Tidak
Izin operasi atas resource dalam paket. Jika Anda tidak menentukan parameter ini, izin Read, Describe, dan Select atas resource tersebut akan ditambahkan ke paket secara default. Resource dan izin operasi atas resource tersebut tidak dapat dipisahkan dan tidak dapat diperbarui setelah ditambahkan ke paket. Jika Anda ingin memperbarui resource atau izin operasi atas resource tersebut dalam paket, Anda harus menghapus resource tersebut dari paket, lalu menambahkan kembali resource dan izin operasi yang telah diperbarui ke dalam paket.
Untuk informasi lebih lanjut tentang izin operasi, lihat Permissions.
Contoh
Tambahkan file resource udtf.jar dan tabel sale_detail serta bank_data dari proyek test_project_a ke paket yang telah Anda buat. Contoh perintah:
-- Tambahkan resource ke paket. add resource udtf.jar to package datashare; add table sale_detail to package datashare;
Hapus resource dari paket
Pembuat paket menghapus resource dari paket yang telah dibuat.
Sintaks
remove <object_type> <object_name> from package <package_name>;Parameter
Parameter
Wajib
Deskripsi
object_type
Ya
Jenis objek yang ingin Anda hapus dari paket. Anda hanya dapat menghapus satu objek dalam satu waktu.
Untuk informasi lebih lanjut tentang jenis objek, lihat Permissions.
object_name
Ya
Nama objek yang ingin Anda hapus dari paket. Anda dapat memperoleh nama objek dengan salah satu metode berikut:
Nama tabel: Jalankan perintah
show tables;di MaxCompute client untuk memperoleh nama tabel atau view.Nama file resource: Jalankan perintah
list resources;di MaxCompute client untuk memperoleh nama resource.Nama fungsi: Jalankan perintah
list functions;di MaxCompute client untuk memperoleh nama fungsi.Nama instans: Jalankan perintah
show instances;di MaxCompute client untuk memperoleh nama instans.
package_name
Ya
Nama paket.
Anda dapat menjalankan perintah
show packages;di MaxCompute client untuk melihat paket yang telah dibuat.Contoh
Hapus tabel sale_detail dari paket datashare. Contoh perintah:
-- Hapus resource dari paket. remove table sale_detail from package datashare;
Berikan otorisasi kepada proyek untuk menggunakan paket
Pembuat paket dalam suatu proyek memberikan otorisasi kepada proyek lain untuk menggunakan paket yang telah dibuat.
Sintaks
allow project <project_name> to install package <package_name> [using label <number>];Parameter
Parameter
Wajib
Deskripsi
project_name
Ya
Nama proyek MaxCompute yang ingin Anda beri otorisasi untuk menggunakan paket.
Untuk melihat nama proyek MaxCompute, login ke MaxCompute console. Di bilah navigasi atas, pilih wilayah. Lalu, lihat nama proyek MaxCompute di tab Project management.
package_name
Ya
Nama paket.
Anda dapat menjalankan perintah
show packages;di MaxCompute client untuk melihat paket yang telah dibuat.number
Tidak
Parameter ini digunakan untuk menambahkan kebijakan kontrol akses berbasis label. Parameter ini menentukan tingkat sensitivitas data yang dapat diakses oleh pengguna paket. Proyek MaxCompute yang diberi otorisasi hanya dapat mengakses data paket yang tingkat sensitivitasnya lebih rendah dari atau sama dengan tingkat yang ditentukan oleh number. Jika Anda tidak menentukan parameter ini, tingkat sensitivitasnya secara default adalah 0.
Untuk informasi lebih lanjut tentang kontrol akses berbasis label, lihat Label-based access control.
Contoh
Berikan otorisasi kepada test_project_b untuk menginstal paket datashare yang dibuat di proyek test_project_a. Contoh perintah:
-- Berikan otorisasi kepada proyek test_project_b untuk menginstal paket. allow project test_project_b to install package datashare;
Cabut izin akses ke paket dari proyek
Pembuat paket mencabut izin akses ke paket dari suatu proyek.
Sintaks
disallow project <project_name> to install package <package_name>;Parameter
Parameter
Wajib
Deskripsi
project_name
Ya
Nama proyek MaxCompute dari mana Anda ingin mencabut izin akses ke paket.
Untuk melihat nama proyek MaxCompute, login ke MaxCompute console. Di bilah navigasi atas, pilih wilayah. Lalu, lihat nama proyek MaxCompute di tab Project management.
package_name
Ya
Nama paket.
Anda dapat menjalankan perintah
show packages;di MaxCompute client untuk melihat paket yang telah dibuat.Contoh
Cabut izin untuk menginstal paket datashare dari proyek test_project_a terhadap proyek test_project_b. Contoh perintah:
-- Cabut izin untuk menginstal paket. disallow project test_project_b to install package datashare;
Hapus paket
Pembuat paket menghapus paket.
Sintaks
delete|drop package <package_name>;Perhatian
Jika Anda menghapus paket, informasi tentang izin yang diberikan melalui paket tersebut akan dihapus.
Parameter
Parameter
Wajib
Deskripsi
package_name
Ya
Nama paket yang ingin Anda hapus.
Anda dapat menjalankan perintah
show packages;di MaxCompute client untuk melihat paket yang telah dibuat.Contoh
Hapus paket datashare yang dibuat di proyek test_project_a. Contoh perintah:
-- Hapus paket. drop package datashare;
Lihat paket
Pembuat paket melihat paket yang telah dibuat atau diinstal dalam proyek MaxCompute.
Sintaks
show packages;Contoh
Lihat informasi tentang paket yang telah dibuat atau diinstal di proyek test_project_a. Contoh perintah:
-- Daftar paket. show packages;Hasil yang dikembalikan berisi informasi berikut:
PackageName: nama paket yang dibuat atau diinstal.
CreateTime: waktu saat paket dibuat.
SourceProject: nama proyek MaxCompute tempat paket berasal.
InstallTime: waktu saat paket diinstal.
Status: status paket.
+-------------+--------------------------+ | PackageName | CreateTime | +-------------+--------------------------+ | datashare | 2021-12-28T18:10:39+0800 | +-------------+--------------------------+ +-------------+--------------------+--------------------------+--------+ | PackageName | SourceProject | InstallTime | Status | +-------------+--------------------+--------------------------+--------+ | systables | information_schema | 2020-11-24T14:11:23+0800 | OK | +-------------+--------------------+--------------------------+--------+
Lihat detail paket
Pembuat paket melihat detail paket yang dibuat dalam proyek MaxCompute.
Sintaks
describe package <package_name>;Parameter
Parameter
Wajib
Deskripsi
package_name
Ya
Nama paket.
Anda dapat menjalankan perintah
show packages;di MaxCompute client untuk melihat paket yang telah dibuat.Contoh
Lihat resource dan izin yang termasuk dalam paket datashare di proyek test_project_a. Contoh perintah:
-- Lihat detail paket. describe package datashare;Hasil yang dikembalikan berisi informasi berikut:
CreateTime: waktu saat paket dibuat.
PackageName: nama paket.
SourceProject: nama proyek MaxCompute tempat paket berasal.
ObjectType: jenis objek dalam paket.
ObjectName: nama objek dalam paket.
ObjectPrivileges: izin atas objek dalam paket.
ProjectName: proyek yang diberi otorisasi untuk menginstal paket.
UserLabel: label pengguna.
CreateTime: 2021-12-28T18:10:39+0800 PackageName: datashare SourceProject: test_project_a Object List +--------------+------------------------------------------+------------------+ | ObjectType | ObjectName | ObjectPrivileges | +--------------+------------------------------------------+------------------+ | RESOURCE | udtf.jar | Read | +--------------+------------------------------------------+------------------+ | TABLE | sale_detail | Describe,Select | +--------------+------------------------------------------+------------------+ Allowed Project List +-----------------+-----------+ | ProjectName | UserLabel | +-----------------+-----------+ | test_project_b | 0 | +-----------------+-----------+
Instal paket
Pengguna paket menginstal paket dalam proyek MaxCompute.
Sintaks
install package <project_name>.<package_name>;Perhatian
Paket diekspansi selama instalasi. Setelah diinstal, Anda dapat menjalankan perintah
show packages;untuk menampilkan daftar paket yang diinstal. Untuk melihat resource dan izin dalam paket, jalankan perintahdescribe package <package_name>;.Parameter
Parameter
Wajib
Deskripsi
project_name
Ya
Nama proyek MaxCompute tempat paket berasal.
Untuk melihat nama proyek MaxCompute, login ke MaxCompute console. Di bilah navigasi atas, pilih wilayah. Lalu, lihat nama proyek MaxCompute di tab Project management.
package_name
Ya
Nama paket.
Anda dapat menjalankan perintah
show packages;di MaxCompute client untuk melihat paket yang telah dibuat.Contoh
Instal paket datashare dari proyek test_project_a di proyek test_project_b. Dalam contoh ini, Akun Alibaba Cloud Amy@aliyun.com adalah pemilik proyek test_project_b. Contoh perintah:
-- Beralih ke proyek test_project_b. use test_project_b; -- Instal paket. install package test_project_a.datashare;
Lihat detail paket yang diinstal
Pengguna paket melihat detail paket yang diinstal dalam proyek MaxCompute.
Sintaks
describe package <project_name>.<package_name>;Parameter
Parameter
Wajib
Deskripsi
project_name
Ya
Nama proyek MaxCompute tempat paket berasal.
Untuk melihat nama proyek MaxCompute, login ke MaxCompute console. Di bilah navigasi atas, pilih wilayah. Lalu, lihat nama proyek MaxCompute di tab Project management.
package_name
Ya
Nama paket.
Anda dapat menjalankan perintah
show packages;di MaxCompute client untuk melihat paket yang telah dibuat.Contoh
Lihat resource dan izin dalam paket datashare yang diinstal di proyek test_project_b. Contoh perintah:
-- Lihat detail paket. describe package test_project_a.datashare;Hasil yang dikembalikan berisi informasi berikut:
CreateTime: waktu saat paket dibuat.
PackageName: nama paket.
SourceProject: nama proyek MaxCompute tempat paket berasal.
ObjectType: jenis objek dalam paket.
ObjectName: nama objek dalam paket.
ObjectPrivileges: izin atas objek dalam paket.
CreateTime: 2021-12-28T18:10:39+0800 PackageName: datashare SourceProject: test_project_a Object List +--------------+------------------------------------------+------------------+ | ObjectType | ObjectName | ObjectPrivileges | +--------------+------------------------------------------+------------------+ | RESOURCE | udtf.jar | Read | +--------------+------------------------------------------+------------------+ | TABLE | sale_detail | Describe,Select | +--------------+------------------------------------------+------------------+
Berikan otorisasi kepada pengguna atau role untuk mengakses paket
Pengguna paket memberikan otorisasi kepada pengguna atau role untuk mengakses paket dalam proyek MaxCompute tempat paket diinstal.
Paket yang diinstal merupakan jenis objek independen dalam MaxCompute. Jika Anda ingin mengakses resource dalam paket, Anda harus memiliki izin Read atas paket tersebut. Jika Anda tidak memiliki izin Read, pemilik proyek dan pengguna yang diberi peran Super_Administrator atau Admin dapat memberikan izin Read kepada Anda menggunakan daftar kontrol akses (ACL). Untuk informasi lebih lanjut tentang kontrol akses berbasis ACL, lihat Kontrol akses berbasis ACL.
Sintaks
grant <actions> on package <project_name>.<package_name> to {USER|ROLE} <name>;Perhatian
Setelah izin Read diberikan kepada pengguna atau role, pengguna atau role tersebut hanya dapat mengakses resource dalam paket di proyek tempat paket diinstal. Untuk informasi lebih lanjut tentang cara mengelola izin atas paket secara detail halus, lihat Access control for packages.
Parameter
Parameter
Wajib
Deskripsi
actions
Ya
Izin operasi atas resource dalam paket. Tetapkan nilainya ke Read.
project_name
Ya
Nama proyek MaxCompute tempat paket berasal.
Untuk melihat nama proyek MaxCompute, masuk ke Konsol MaxCompute. Pada bilah navigasi atas, pilih wilayah yang diinginkan, lalu lihat nama proyek MaxCompute di tab Project management.
package_name
Ya
Nama paket.
Anda dapat menjalankan perintah
show packages;di MaxCompute client untuk melihat paket yang telah dibuat.name
Ya
Nama akun pengguna atau role yang ingin Anda beri izin akses. Anda hanya dapat menentukan satu akun pengguna atau role dalam satu operasi otorisasi.
Anda dapat menjalankan perintah
list users;ataulist roles;di MaxCompute client untuk mencari nama pengguna atau role.Contoh
Dalam contoh ini, Bella adalah Pengguna RAM dari Akun Alibaba Cloud Amy@aliyun.com. Berikan otorisasi kepada Bella untuk mengakses paket datashare. Contoh perintah:
-- Berikan akses Bella ke paket. grant Read on package test_project_a.datashare to user RAM$Am*******n.com:Bella;
Cabut izin akses ke paket dari pengguna atau role
Pengguna paket mencabut izin akses ke paket dari pengguna atau role dalam proyek MaxCompute tempat paket diinstal.
Sintaks
revoke <actions> on package <project_name>.<package_name> from {USER|ROLE} <name>;Parameter
Parameter
Required
Description
actions
Yes
Izin operasi pada sumber daya dalam package. Tetapkan nilainya ke Read.
project_name
Yes
Nama proyek MaxCompute tempat package tersebut berada.
Untuk melihat nama proyek MaxCompute, login ke MaxCompute console. Pada bilah navigasi atas, pilih wilayah. Lalu, lihat nama proyek MaxCompute di tab Project management.
package_name
Yes
Nama package.
Anda dapat menjalankan perintah
show packages;di MaxCompute client untuk melihat package yang telah dibuat.name
Yes
Nama akun pengguna atau role yang izin aksesnya terhadap package ingin Anda cabut. Anda hanya dapat menentukan satu akun pengguna atau role dalam satu operasi pencabutan.
Anda dapat menjalankan perintah
list users;ataulist roles;di MaxCompute client untuk mencari nama akun pengguna atau role.Contoh
Cabut izin akses ke paket dari Bella. Contoh perintah:
-- Cabut izin Bella untuk mengakses paket. revoke Read on package test_project_a.datashare from user RAM$Am*******n.com:Bella;
Uninstal paket
Pengguna paket meng-uninstal paket yang diinstal dalam proyek MaxCompute.
Sintaks
uninstall package <project_name>.<package_name>;Parameter
Parameter
Wajib
Deskripsi
project_name
Ya
Nama proyek MaxCompute tempat paket berasal.
Untuk melihat nama proyek MaxCompute, login ke MaxCompute console. Di bilah navigasi atas, pilih wilayah. Lalu, lihat nama proyek MaxCompute di tab Project management.
package_name
Ya
Nama paket.
Anda dapat menjalankan perintah
show packages;di MaxCompute client untuk melihat paket yang telah dibuat.Contoh
Uninstal paket datashare yang diinstal di proyek test_project_b. Contoh perintah:
-- Uninstal paket datashare. uninstall package test_project_a.datashare;
Contoh penggunaan
Dalam contoh ini, Akun Alibaba Cloud Bob@aliyun.com adalah pemilik proyek test_project_a. Akun Alibaba Cloud Amy@aliyun.com adalah pemilik proyek test_project_b. Untuk keperluan bisnis, Anda ingin membagikan file resource udtf.jar dan tabel sale_detail di proyek test_project_a dengan test_project_b. Anda juga ingin agar Pengguna RAM Amy@aliyun.com:Bella di proyek test_project_b dapat mengakses resource tersebut. Lakukan langkah-langkah berikut di MaxCompute client:
Buka proyek test_project_a dan buat paket menggunakan Akun Alibaba Cloud Bob@aliyun.com.
-- Beralih ke proyek test_project_a. use test_project_a; -- Buat paket bernama datashare. create package datashare;Gunakan Akun Alibaba Cloud Bob@aliyun.com untuk menambahkan resource ke paket yang telah dibuat.
-- Tambahkan resource ke paket. add resource udtf.jar to package datashare; add table sale_detail to package datashare;Gunakan Akun Alibaba Cloud Bob@aliyun.com untuk memberikan otorisasi kepada proyek test_project_b agar dapat menginstal paket.
-- Berikan otorisasi kepada proyek test_project_b untuk menginstal paket. allow project test_project_b to install package datashare;Buka proyek test_project_b dan instal paket menggunakan Akun Alibaba Cloud Amy@aliyun.com.
-- Beralih ke proyek test_project_b. use test_project_b; -- Instal paket. install package test_project_a.datashare; -- Lihat daftar resource dalam paket. describe package test_project_a.datashare; -- Hasil berikut dikembalikan. CreateTime: 2021-12-28T18:10:39+0800 PackageName: datashare SourceProject: test_project_a Object List +--------------+------------------------------------------+------------------+ | ObjectType | ObjectName | ObjectPrivileges | +--------------+------------------------------------------+------------------+ | RESOURCE | udtf.jar | Read | +--------------+------------------------------------------+------------------+ | TABLE | sale_detail | Describe,Select | +--------------+------------------------------------------+------------------+Gunakan Akun Alibaba Cloud Amy@aliyun.com untuk memberikan otorisasi kepada Bella agar dapat mengakses paket.
-- Berikan izin Bella untuk mengakses paket. grant Read on package test_project_a.datashare to user RAM$Am*******n.com:Bella;Bella membaca data dari tabel sale_detail.
SELECT * FROM test_project_a.sale_detail;
Referensi
Setelah membuat dan menginstal paket, rujuk topik berikut:
Migrasi data lintas proyek MaxCompute dalam wilayah yang sama menggunakan CLONE TABLE.
Migrasi data lintas proyek MaxCompute di wilayah berbeda menggunakan akses data lintas proyek (untuk skenario akun sama maupun lintas akun).
Anda dapat menggunakan DataWorks untuk migrasi data MaxCompute lintas proyek. Untuk informasi lebih lanjut, lihat MaxCompute data sources.