Anda tidak dapat mengakses resource lintas proyek (termasuk lintas akun) secara langsung jika bukan anggota proyek pemilik. Untuk mengatasi hal ini, MaxCompute menyediakan mekanisme kontrol akses berbasis package, yang memungkinkan Anda menggabungkan resource dan izin ke dalam sebuah package agar dapat dipasang oleh proyek lain untuk akses lintas proyek. Topik ini menjelaskan cara menggunakan kontrol akses berbasis package beserta contoh penerapannya.
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 Proyek A dengan proyek lain milik akun tersebut atau proyek dalam Akun Alibaba Cloud lainnya. Anda dapat membagikan resource tersebut ke proyek lain dengan salah satu metode berikut:
-
Tambahkan pengguna dari proyek lain ke Proyek 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 package.
Mekanisme kontrol akses berbasis package digunakan untuk berbagi data dan resource lintas proyek. Pemilik Proyek A mengemas resource yang dibutuhkan proyek lain beserta izin operasi atas resource tersebut, lalu memberikan otorisasi kepada pemilik proyek lain untuk memasang package tersebut. Setelah package dipasang, pemilik proyek lain dapat menentukan apakah akan memberikan otorisasi kepada pengguna di proyek mereka untuk mengakses resource dalam package tersebut. Gambar berikut menunjukkan cara penerapan mekanisme kontrol akses berbasis package.

Gambar di atas menunjukkan bahwa mekanisme kontrol akses berbasis package melibatkan dua entitas: pembuat package dan pengguna package. Tabel berikut menjelaskan informasi mengenai entitas tersebut dan operasi yang dapat dilakukan oleh masing-masing entitas.
|
Entitas |
Deskripsi |
Operasi yang dapat dijalankan |
Peran entitas |
Platform operasi |
|
Pembuat package |
Proyek tempat pembuat package berada menyediakan resource untuk dibagikan. Pembuat package mengemas resource proyek yang perlu dibagikan beserta izin operasi atas resource tersebut, lalu memberikan otorisasi kepada pengguna package untuk memasang package 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 package |
Proyek tempat pengguna package berada mengakses resource dalam package. Setelah pengguna package memasang package yang dibuat oleh pembuat package, pengguna package dapat langsung mengakses resource dalam package 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 package |
||||
Batasan
Sebelum menggunakan mekanisme kontrol akses berbasis package, perhatikan batasan berikut:
-
Maksimal 1.000 resource dapat ditambahkan ke dalam satu package.
-
Satu package dapat dipasang pada maksimal 100.000 proyek MaxCompute.
-
Maksimal 100 package dalam satu proyek MaxCompute dapat dipasang pada proyek MaxCompute lain.
-
Maksimal 100.000 package dapat dibuat dalam satu proyek MaxCompute.
-
Maksimal 100.000 package dapat dipasang dalam satu proyek MaxCompute.
Buat package
Pembuat package membuat package dalam proyek MaxCompute.
-
Sintaksis
create package <package_name>; -
Parameter
Parameter
Wajib
Deskripsi
package_name
Ya
Nama package, 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;pada MaxCompute client untuk melihat semua package 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 dalam proyek test_project_a. Buat package. Contoh perintah:
-- Beralih ke proyek test_project_a. use test_project_a; -- Buat package. create package datashare;
Tambahkan resource ke package
Pembuat package menambahkan resource yang dibutuhkan pengguna package ke package yang telah dibuat.
-
Sintaksis
add <object_type> <object_name> to package <package_name> [with privileges <privileges>]; -
Batasan
Anda tidak dapat menambahkan proyek ke dalam package.
-
Perhatian
Ketika Anda menambahkan resource ke package, resource tersebut tidak dikemas sebagai Snapshot. Jika data resource diperbarui setelah ditambahkan ke package, pengguna package akan mengakses data resource terbaru.
-
Parameter
Parameter
Wajib
Deskripsi
object_type
Ya
Jenis objek yang ingin Anda tambahkan ke package. Anda hanya dapat menentukan satu jenis objek dalam satu waktu.
Untuk informasi lebih lanjut mengenai jenis objek, lihat Izin.
object_name
Ya
Nama objek yang ingin Anda hapus dari package. Anda dapat memperoleh nama objek dengan salah satu metode berikut:
-
Nama tabel atau view: Jalankan perintah
show tables;pada MaxCompute client. -
Nama file resource: Jalankan perintah
list resources;pada MaxCompute client. -
Nama fungsi: Jalankan perintah
list functions;pada MaxCompute client. -
Nama instans: Jalankan perintah
show instances;pada MaxCompute client.
Catatan-
Anda dapat menggunakan wildcard asterisk (*) saat menambahkan resource. Misalnya,
add table * to package package_name;menambahkan semua tabel ke package. -
Saat menambahkan resource ke package, jangan gunakan format Nama Proyek.Nama Resource untuk nama resource. Misalnya, jika Anda ingin menambahkan tabel bernama table di Proyek A ke package, jangan gunakan A.table sebagai nama resource. Gunakan table sebagai nama resource.
package_name
Ya
Nama package.
Anda dapat menjalankan perintah
show packages;pada MaxCompute client untuk melihat semua package yang telah dibuat.privileges
Tidak
Izin operasi atas resource dalam package. Jika Anda tidak menentukan parameter ini, izin Read, Describe, dan Select atas resource tersebut akan ditambahkan ke package secara default. Resource dan izin operasi atas resource tersebut tidak dapat dipisahkan dan tidak dapat diperbarui setelah ditambahkan ke package. Jika Anda ingin memperbarui resource atau izin operasi atas resource tersebut dalam package, Anda harus menghapus resource tersebut dari package, lalu menambahkan kembali resource dan izin operasi yang telah diperbarui ke package.
Untuk informasi lebih lanjut mengenai izin operasi, lihat Izin.
-
-
Contoh
Tambahkan file resource udtf.jar dan tabel sale_detail serta bank_data dari proyek test_project_a ke package yang telah Anda buat. Contoh perintah:
-- Tambahkan resource ke package. add resource udtf.jar to package datashare; add table sale_detail to package datashare;
Hapus resource dari package
Pembuat package menghapus resource dari package yang telah dibuat.
-
Sintaksis
remove <object_type> <object_name> from package <package_name>; -
Parameter
Parameter
Wajib
Deskripsi
object_type
Ya
Jenis objek yang ingin Anda hapus dari package. Anda hanya dapat menghapus satu objek dalam satu waktu.
Untuk informasi lebih lanjut mengenai jenis objek, lihat Izin.
object_name
Ya
Nama objek yang ingin Anda hapus dari package. Anda dapat memperoleh nama objek dengan salah satu metode berikut:
-
Nama tabel atau view: Jalankan perintah
show tables;pada MaxCompute client. -
Nama file resource: Jalankan perintah
list resources;pada MaxCompute client. -
Nama fungsi: Jalankan perintah
list functions;pada MaxCompute client. -
Nama instans: Jalankan perintah
show instances;pada MaxCompute client.
package_name
Ya
Nama package.
Anda dapat menjalankan perintah
show packages;pada MaxCompute client untuk melihat semua package yang telah dibuat. -
-
Contoh
Hapus tabel sale_detail dari package datashare. Contoh perintah:
-- Hapus resource dari package. remove Table sale_detail from package datashare;
Berikan otorisasi kepada proyek untuk menggunakan package
Pembuat package dalam suatu proyek memberikan otorisasi kepada proyek lain untuk menggunakan package yang telah dibuat.
-
Sintaksis
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 package.
Anda dapat masuk ke MaxCompute console, pilih wilayah di pojok kiri atas, lalu temukan nama proyek pada tab Projects.
package_name
Ya
Nama package.
Anda dapat menjalankan perintah
show packages;pada MaxCompute client untuk melihat semua package yang telah dibuat.number
Tidak
Parameter ini digunakan untuk menambahkan kebijakan kontrol akses berbasis label. Parameter ini menentukan tingkat sensitivitas data yang dapat diakses pengguna package. Proyek MaxCompute yang diberi otorisasi hanya dapat mengakses data package 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 mengenai kontrol akses berbasis label, lihat Kontrol akses berbasis label.
-
Contoh
Berikan otorisasi kepada test_project_b untuk memasang package datashare yang dibuat dalam proyek test_project_a. Contoh perintah:
-- Izinkan proyek test_project_b memasang package. allow project test_project_b to install package datashare;
Cabut izin akses ke package dari proyek
Pembuat package mencabut izin akses ke package dari suatu proyek.
-
Sintaksis
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 package.
Anda dapat masuk ke MaxCompute console, pilih wilayah di pojok kiri atas, lalu temukan nama proyek pada tab Projects.
package_name
Ya
Nama package.
Anda dapat menjalankan perintah
show packages;pada MaxCompute client untuk melihat semua package yang telah dibuat. -
Contoh
Cabut izin untuk memasang package datashare dari proyek test_project_a terhadap proyek test_project_b. Contoh perintah:
-- Cabut otorisasi package. disallow project test_project_b to install package datashare;
Hapus package
Pembuat package menghapus package.
-
Sintaksis
delete|drop package <package_name>; -
Perhatian
Jika Anda menghapus package, informasi mengenai izin yang diberikan melalui package tersebut akan dihapus.
-
Parameter
Parameter
Wajib
Deskripsi
package_name
Ya
Nama package yang ingin Anda hapus.
Anda dapat menjalankan perintah
show packages;pada MaxCompute client untuk melihat semua package yang telah dibuat. -
Contoh
Hapus package datashare yang dibuat dalam proyek test_project_a. Contoh perintah:
-- Hapus package. drop package datashare;
Lihat package
Pembuat package melihat package yang telah dibuat atau dipasang dalam proyek MaxCompute.
-
Sintaksis
show packages; -
Contoh
Lihat informasi mengenai package yang telah dibuat atau dipasang dalam proyek test_project_a. Contoh perintah:
-- Lihat daftar package. show packages;Hasil yang dikembalikan berisi informasi berikut:
-
PackageName: nama package yang telah dibuat atau dipasang.
-
CreateTime: waktu pembuatan package.
-
SourceProject: nama proyek MaxCompute tempat package berada.
-
InstallTime: waktu pemasangan package.
-
Status: status package.
+-------------+--------------------------+ | 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 package
Pembuat package melihat detail package yang dibuat dalam proyek MaxCompute.
-
Sintaksis
describe package <package_name>; -
Parameter
Parameter
Wajib
Deskripsi
package_name
Ya
Nama package.
Anda dapat menjalankan perintah
show packages;pada MaxCompute client untuk melihat semua package yang telah dibuat. -
Contoh
Lihat resource dan izin yang termasuk dalam package datashare di proyek test_project_a. Contoh perintah:
-- Lihat detail package datashare. describe package datashare;Hasil yang dikembalikan berisi informasi berikut:
-
CreateTime: waktu pembuatan package.
-
PackageName: nama package.
-
SourceProject: nama proyek MaxCompute tempat package berada.
-
ObjectType: jenis objek dalam package.
-
ObjectName: nama objek dalam package.
-
ObjectPrivileges: izin atas objek dalam package.
-
ProjectName: proyek yang diberi otorisasi untuk memasang package.
-
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 | +-----------------+-----------+ -
Pasang package
Pengguna package memasang package dalam proyek MaxCompute.
-
Sintaksis
install package <project_name>.<package_name>; -
Perhatian
Package diekspansi selama pemasangan. Setelah pemasangan, Anda dapat menjalankan perintah
show packages;untuk melihat package yang telah dipasang, dan perintahdescribe package <package_name>;untuk melihat resource dan izinnya. -
Parameter
Parameter
Required
Description
project_name
Yes
Nama Proyek MaxCompute tempat paket tersebut berada.
Anda dapat masuk ke Konsol MaxCompute, pilih wilayah di pojok kiri atas, lalu temukan nama proyek pada tab Projects.
package_name
Yes
Nama paket.
Anda dapat menjalankan perintah
show packages;pada client MaxCompute untuk melihat semua paket yang telah dibuat. -
Contoh
Pasang package datashare dari proyek test_project_a dalam 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; -- Pasang package. install package test_project_a.datashare;
Lihat detail package yang telah dipasang
Pengguna package melihat detail package yang telah dipasang dalam proyek MaxCompute.
-
Sintaksis
describe package <project_name>.<package_name>; -
Parameter
Parameter
Wajib
Deskripsi
project_name
Ya
Nama proyek MaxCompute tempat package berada.
Anda dapat masuk ke MaxCompute console, pilih wilayah di pojok kiri atas, lalu temukan nama proyek pada tab Projects.
package_name
Ya
Nama package.
Anda dapat menjalankan perintah
show packages;pada MaxCompute client untuk melihat semua package yang telah dibuat. -
Contoh
Lihat resource dan izin dalam package datashare yang telah dipasang di proyek test_project_b. Contoh perintah:
-- Lihat detail package. describe package test_project_a.datashare;Hasil yang dikembalikan berisi informasi berikut:
-
CreateTime: waktu pembuatan package.
-
PackageName: nama package.
-
SourceProject: nama proyek MaxCompute tempat package berada.
-
ObjectType: jenis objek dalam package.
-
ObjectName: nama objek dalam package.
-
ObjectPrivileges: izin atas objek dalam package.
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 package
Pengguna package memberikan otorisasi kepada pengguna atau role untuk mengakses package dalam proyek MaxCompute tempat package tersebut dipasang.
Package yang telah dipasang merupakan jenis objek independen dalam MaxCompute. Jika Anda ingin mengakses resource dalam package, Anda harus memiliki izin Read atas package 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 mengenai kontrol akses berbasis ACL, lihat Kontrol akses berbasis ACL.
-
Sintaksis
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 package di proyek tempat package tersebut dipasang. Untuk informasi lebih lanjut mengenai cara mengelola izin atas package secara detail halus, lihat Kontrol akses untuk package.
-
Parameter
Parameter
Wajib
Deskripsi
actions
Ya
Izin operasi atas resource dalam package. Tetapkan nilainya ke Read.
project_name
Ya
Nama proyek MaxCompute tempat package berada.
Anda dapat masuk ke MaxCompute console, pilih wilayah di pojok kiri atas, lalu temukan nama proyek pada tab Projects.
package_name
Ya
Nama package.
Anda dapat menjalankan perintah
show packages;pada MaxCompute client untuk melihat semua package 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;pada MaxCompute client untuk mendapatkan nama akun pengguna atau role. -
Contoh
Dalam contoh ini, Bella adalah Pengguna RAM dari Akun Alibaba Cloud Amy@aliyun.com. Berikan otorisasi kepada Bella untuk mengakses package datashare. Contoh perintah:
-- Berikan izin kepada Bella untuk mengakses package. grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella;
Cabut izin akses ke package dari pengguna atau role
Pengguna package mencabut izin akses ke package dari pengguna atau role dalam proyek MaxCompute tempat package tersebut dipasang.
-
Sintaksis
revoke <actions> on package <project_name>.<package_name> from {USER|ROLE} <name>; -
Parameter
Parameter
Wajib
Deskripsi
actions
Ya
Izin operasi atas resource dalam package. Tetapkan nilainya ke Read.
project_name
Ya
Nama proyek MaxCompute tempat package berada.
Anda dapat masuk ke MaxCompute console, pilih wilayah di pojok kiri atas, lalu temukan nama proyek pada tab Projects.
package_name
Ya
Nama package.
Anda dapat menjalankan perintah
show packages;pada MaxCompute client untuk melihat semua package yang telah dibuat.name
Ya
Nama akun pengguna atau role dari mana Anda ingin mencabut izin akses ke package. Anda hanya dapat menentukan satu akun pengguna atau role dalam satu operasi pencabutan.
Anda dapat menjalankan perintah
list users;ataulist roles;pada MaxCompute client untuk menemukan nama akun pengguna atau role. -
Contoh
Cabut izin akses ke package dari Bella. Contoh perintah:
-- Cabut akses ke package dari pengguna RAM$Amy@aliyun.com:Bella. revoke Read on package test_project_a.datashare from user RAM$Amy@aliyun.com:Bella;
Uninstall package
Pengguna package menguninstall package yang telah dipasang dalam proyek MaxCompute.
-
Sintaksis
uninstall package <project_name>.<package_name>; -
Parameter
Parameter
Wajib
Deskripsi
project_name
Ya
Nama proyek MaxCompute tempat package berada.
Anda dapat masuk ke MaxCompute console, pilih wilayah di pojok kiri atas, lalu temukan nama proyek pada tab Projects.
package_name
Ya
Nama package.
Anda dapat menjalankan perintah
show packages;pada MaxCompute client untuk melihat semua package yang telah dibuat. -
Contoh
Uninstall package datashare yang telah dipasang di proyek test_project_b. Contoh perintah:
-- Menguninstall paket. 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 pada MaxCompute client:
-
Buka proyek test_project_a dan buat package menggunakan Akun Alibaba Cloud Bob@aliyun.com.
-- Beralih ke proyek test_project_a. use test_project_a; -- Buat package. create package datashare; -
Gunakan Akun Alibaba Cloud Bob@aliyun.com untuk menambahkan resource ke package yang telah dibuat.
-- Tambahkan resource ke package. 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 memasang package.
-- Izinkan proyek test_project_b memasang package. allow project test_project_b to install package datashare; -
Buka proyek test_project_b dan pasang package menggunakan Akun Alibaba Cloud Amy@aliyun.com.
-- Beralih ke proyek test_project_b. use test_project_b; -- Pasang package. install package test_project_a.datashare; -- Lihat daftar resource dalam package. 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 package.
-- Berikan izin kepada Bella untuk mengakses package. grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella; -
Bella melakukan kueri terhadap tabel sale_detail.
SELECT * FROM test_project_a.sale_detail;
Referensi
-
Setelah membuat dan memasang Package, Anda dapat melakukan operasi 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 migrasi dalam satu Akun Alibaba Cloud atau lintas beberapa akun).
-
Anda dapat menggunakan DataWorks untuk migrasi data MaxCompute lintas proyek. Untuk informasi lebih lanjut, lihat Sumber data MaxCompute.