全部产品
Search
文档中心

ApsaraDB for SelectDB:Mengelola izin dasar

更新时间:Jul 30, 2025

ApsaraDB for SelectDB menggunakan mekanisme pengelolaan izin MySQL untuk mengimplementasikan kontrol izin tingkat halus pada tingkat tabel, serta mendukung kontrol izin berdasarkan peran dan daftar putih. Topik ini menjelaskan cara menggunakan sistem pengelolaan izin SelectDB, termasuk detail sintaksis dan catatan penggunaannya.

Istilah

Istilah

Parameter

Deskripsi

identitas pengguna

user_identity

Dalam sistem pengelolaan izin, pengguna diidentifikasi oleh identitas pengguna. Identitas pengguna terdiri dari dua bagian: nama pengguna dan userhost. username menunjukkan nama pengguna, yang dapat berisi huruf. userhost menunjukkan alamat IP dari mana permintaan masuk pengguna dikirim. Identitas pengguna dapat ditampilkan dalam salah satu dari dua format berikut:

  • username@'userhost': Pengguna dengan nama yang ditentukan oleh username mengirim permintaan masuk dari alamat IP yang ditentukan oleh userhost.

  • username@['domain']: domain menunjukkan nama domain, yang dapat diselesaikan secara terbalik ke sekelompok alamat IP menggunakan DNS. Nilainya adalah sekelompok identitas pengguna dalam format username@'userhost'.

Dalam contoh ini, format username@'userhost' digunakan.

izin

privilege

Izin memungkinkan Anda melakukan operasi pada node, katalog data, database, atau tabel. Operasi yang berbeda memerlukan izin yang berbeda.

peran

role

Peran dapat dianggap sebagai sekelompok izin. Anda dapat menetapkan peran kepada pengguna baru. Kemudian, pengguna tersebut secara otomatis diberikan izin dari peran tersebut. Jika Anda mengubah izin dari peran, izin semua pengguna yang ditetapkan peran tersebut juga berubah.

Anda dapat membuat peran kustom.

properti pengguna

user_property

Properti pengguna langsung dilampirkan ke pengguna, bukan identitas pengguna. Misalnya, cmy@'192.%' dan cmy@['domain'] memiliki kelompok properti pengguna yang sama. Properti pengguna milik pengguna bernama cmy, bukan cmy@'192.%' atau cmy@['domain']. Properti pengguna termasuk jumlah maksimum koneksi pengguna dan konfigurasi kluster untuk impor data.

Operasi yang diizinkan oleh izin

Penting

Setelah membuat pengguna, gunakan akun istimewa untuk memberikan izin akses ke kluster, database, dan tabel.

  • Untuk informasi lebih lanjut tentang cara memberikan izin akses ke kluster, lihat Berikan Pengguna Izin Mengakses Kluster.

  • Untuk informasi lebih lanjut tentang cara memberikan izin akses ke database dan tabel, lihat tabel berikut.

Operasi

Kata kunci operasi

Sintaksis

Buat pengguna

CREATE USER

CREATE USER [IF EXISTS] user_identity [IDENTIFIED BY 'password']
[DEFAULT ROLE 'role_name']
[password_policy]

Hapus pengguna

DROP USER

 DROP USER 'user_identity'
 
 `user_identity`:
     user@'host'
     user@['domain']

Berikan izin kepada pengguna

GRANT

GRANT privilege_list ON priv_level TO user_identity [ROLE role_name]
 
GRANT privilege_list ON RESOURCE resource_name TO user_identity [ROLE role_name]

Cabut izin dari pengguna

REVOKE

REVOKE privilege_list ON db_name[.tbl_name] FROM user_identity [ROLE role_name]
 
REVOKE privilege_list ON RESOURCE resource_name FROM user_identity [ROLE role_name]

Buat peran

CREATE ROLE

 CREATE ROLE rol_name;

Hapus peran

DROP ROLE

 DROP ROLE rol_name;

Kueri izin yang diberikan kepada satu atau semua pengguna

SHOW (ALL) GRANTS

SHOW [ALL] GRANTS [FOR user_identity];

Kueri peran yang dibuat

SHOW ROLES

SHOW ROLES

Kueri properti pengguna

SHOW PROPERTY

SHOW PROPERTY [FOR user] [LIKE key]

Konfigurasi properti pengguna

SET PROPERTY

SET PROPERTY [FOR 'user'] 'key' = 'value' [, 'key' = 'value']

Deskripsi Parameter

Parameter

Deskripsi

[password_policy]

Kebijakan yang terkait dengan otentikasi masuk berbasis kata sandi. Kebijakan kata sandi berikut didukung:

  • PASSWORD_HISTORY: menentukan apakah pengguna diizinkan menggunakan kata sandi historis sebagai kata sandi baru saat pengguna mengatur ulang kata sandi.

    Nilai valid: [n|DEFAULT]. Nilai default adalah 0, yang menunjukkan bahwa riwayat kata sandi tidak diaktifkan dan pengguna dapat menggunakan kata sandi historis sebagai kata sandi baru. Contohnya, PASSWORD_HISTORY 10 menunjukkan bahwa 10 kata sandi historis sebelumnya tidak dapat digunakan sebagai kata sandi baru.

  • PASSWORD_EXPIRE: waktu kedaluwarsa kata sandi saat ini.

    Nilai valid: [DEFAULT|NEVER|INTERVAL n DAY/HOUR/SECOND]. Nilai default adalah NEVER, yang menunjukkan bahwa kata sandi tidak pernah kedaluwarsa.

  • FAILED_LOGIN_ATTEMPTS: jumlah maksimum percobaan masuk gagal yang diizinkan sebelum akun dikunci.

    Nilai valid: [n|DEFAULT]. Nilai default parameter ini menunjukkan bahwa sistem tidak membatasi jumlah maksimum percobaan masuk gagal.

  • PASSWORD_LOCK_TIME: periode selama akun dikunci.

    Nilai valid: [n DAY/HOUR/SECOND|UNBOUNDED].

Contoh operasi

  • Contoh 1: Buat pengguna bernama test_user. Kata sandi pengguna adalah 123456, dan pengguna dapat mengirim permintaan masuk dari Blok CIDR 172.10.0.0/16.

    CREATE USER test_user@'172.10.%' IDENTIFIED BY '123456';
  • Contoh 2: Hapus pengguna dengan identitas pengguna test_user@'172.10.%'.

    DROP USER 'test_user'@'172.10.%'
  • Contoh 3: Berikan pengguna dengan identitas pengguna test_user@'172.10.%' izin baca, modifikasi, dan impor pada tabel test_db.test_table.

    GRANT SELECT_PRIV,ALTER_PRIV,LOAD_PRIV ON test_db.test_table TO 'test_user'@'172.10.%';
  • Contoh 4: Cabut izin baca pada database test_db dari pengguna bernama test_user.

    REVOKE SELECT_PRIV ON test_db.* FROM 'test_user'@'172.10.%';
  • Contoh 5: Buat peran bernama test_role.

    CREATE ROLE test_role;
  • Contoh 6: Hapus peran bernama test_role.

    DROP ROLE test_role;
  • Contoh 7: Berikan peran bernama test_role izin impor pada semua tabel di database test_db.

    GRANT LOAD_PRIV ON test_db.* TO ROLE 'test_role';
  • Contoh 8: Ubah peran yang ditetapkan kepada pengguna dengan identitas pengguna test_user@'172.10.%' menjadi test_role.

    GRANT "test_role" TO test_user@'172.10.%';
  • Contoh 9: Kueri izin pengguna dengan identitas pengguna test_user@'%'.

    SHOW GRANTS FOR test_user@'%';
  • Contoh 10: Kueri properti pengguna bernama test_user.

    # Kueri semua properti pengguna.
    SHOW PROPERTY FOR 'test_user';
    
    # Gunakan ekspresi LIKE untuk kueri properti tertentu dari pengguna.
    SHOW PROPERTY FOR 'test_user' LIKE '%max_user_connections%';
  • Contoh 11: Konfigurasikan properti pengguna bernama test_user.

    SET PROPERTY FOR 'test_user' 'max_user_connections' = '1000';

Praktik terbaik

Sistem pengelolaan izin umumnya digunakan dalam skenario berikut:

  • Skenario 1

    Pengguna kluster diklasifikasikan menjadi administrator, insinyur R&D, dan pengguna biasa. Administrator memiliki izin penuh pada kluster dan bertanggung jawab atas manajemen kluster, seperti membangun kluster dan mengelola node. Insinyur R&D bertanggung jawab atas pemodelan layanan, seperti membuat database dan tabel, serta mengimpor dan memodifikasi data. Pengguna biasa mengakses data di database dan tabel yang berbeda.

    Dalam skenario ini, Anda dapat memberikan izin ADMIN_PRIV atau GRANT_PRIV kepada administrator. Insinyur R&D dapat diberikan izin CREATE, DROP, ALTER, LOAD, dan SELECT pada satu atau beberapa database dan tabel. Pengguna biasa dapat diberikan izin SELECT pada satu atau beberapa database dan tabel. Anda juga dapat membuat peran berbeda untuk memberikan izin kepada banyak pengguna secara lebih efisien.

  • Skenario 2

    Sebuah kluster menyediakan layanan berbeda. Setiap layanan mungkin menggunakan satu atau lebih rekaman data. Anda perlu mengelola izin pengguna setiap layanan. Dalam skenario ini, administrator dapat membuat pengguna yang memiliki izin GRANT_PRIV di tingkat database untuk setiap database. Pengguna ini hanya dapat memberikan izin pada database yang ditentukan kepada pengguna.

  • Skenario 3

    SelectDB tidak mendukung blacklist, tetapi hanya whitelist. Namun, Anda dapat menggunakan metode tertentu untuk mensimulasikan blacklist. Misalnya, buat pengguna dengan identitas pengguna test_user1@'192.%'. Pengguna dapat mengirim permintaan masuk dari alamat IP 192.*. Jika Anda ingin menolak permintaan masuk dari Blok CIDR 192.168.0.0/16, buat pengguna lain dengan identitas pengguna test_user2@'192.168.%' dan konfigurasikan kata sandi baru untuk pengguna tersebut. Prioritas 192.168.% lebih tinggi daripada 192.%. Oleh karena itu, pengguna tidak dapat lagi menggunakan kata sandi asli untuk masuk ke instans SelectDB dari Blok CIDR 192.168.0.0/16.

Catatan penggunaan izin

  • Ketika instans SelectDB diinisialisasi, peran dan pengguna berikut secara otomatis dibuat:

    • operator: Peran ini memiliki izin NODE_PRIV dan ADMIN_PRIV pada SelectDB dan memungkinkan Anda masuk ke instans SelectDB dari node mana pun. Peran ini hanya diberikan kepada pengguna instans bawaan dengan identitas pengguna root@'%'.

    • admin: Peran ini adalah peran manajemen dan memiliki izin ADMIN_PRIV. Peran ini memiliki semua izin kecuali izin untuk mengubah node, dan memungkinkan Anda masuk ke instans SelectDB dari node. Saat instans SelectDB diinisialisasi, sistem secara otomatis membuat pengguna dengan identitas pengguna admin@'%' dan menetapkan peran admin kepada pengguna tersebut. Anda dapat membuat beberapa pengguna dan menetapkan peran admin kepada mereka.

  • Anda tidak dapat mencabut atau mengubah izin peran atau pengguna yang dibuat secara otomatis.

  • Jika Anda lupa kata sandi pengguna yang ditetapkan peran admin dan tidak dapat masuk ke instans SelectDB, Anda dapat menyetel ulang kata sandi pengguna di konsol SelectDB. Untuk informasi lebih lanjut, lihat Setel Ulang Kata Sandi Pengguna Admin untuk Instans.

  • Izin ADMIN_PRIV hanya dapat diberikan atau dicabut di tingkat global.

  • Izin GRANT_PRIV di tingkat global setara dengan izin ADMIN_PRIV karena yang pertama memiliki izin untuk memberikan semua izin. Berhati-hatilah saat menggunakan izin GRANT_PRIV di tingkat global.

  • Anda dapat menjalankan pernyataan SELECT current_user(); untuk menanyakan current_user dan pernyataan SELECT user(); untuk menanyakan user. current_user menunjukkan identitas pengguna yang digunakan oleh pengguna saat ini untuk melewati otentikasi identitas, dan menunjukkan identitas pengguna sebenarnya dari pengguna. Semua izin diberikan kepada identitas pengguna yang digunakan oleh pengguna saat ini untuk melewati otentikasi identitas dan pengguna memiliki izin dari identitas pengguna tersebut.

    Sebagai contoh, Anda membuat pengguna dengan identitas pengguna user1@'192.%' dan pengguna bernama user1 masuk ke instans SelectDB dari Blok CIDR 192.168.0.0/16. Dalam hal ini, identitas pengguna yang digunakan oleh pengguna saat ini adalah user1@'192.%' dan identitas pengguna sebenarnya dari pengguna adalah user1@'192.168.%'.

Detail sintaksis izin

Jenis izin

Izin

Deskripsi

GRANT_PRIV

Izin untuk mengubah izin.

Izin ini memungkinkan Anda memberikan izin kepada dan mencabut izin dari pengguna dan peran, serta membuat, menghapus, dan memodifikasi pengguna dan peran.

SELECT_PRIV

Izin read-only pada database dan tabel.

LOAD_PRIV

Izin tulis pada database dan tabel, termasuk izin LOAD, INSERT, dan DELETE.

ALTER_PRIV

Izin ubah pada database dan tabel, termasuk izin untuk mengganti nama database dan tabel, izin untuk membuat, menghapus, dan memodifikasi kolom, serta izin untuk membuat dan menghapus partisi.

CREATE_PRIV

Izin untuk membuat database, tabel, dan tampilan.

DROP_PRIV

Izin untuk menghapus database, tabel, dan tampilan.

USAGE_PRIV

Izin untuk menggunakan sumber daya.

Tingkat izin

Tingkat izin berlaku untuk data dan sumber daya.

Data diklasifikasikan menjadi tingkat berikut: Global, Katalog, Database, dan Tabel. Tabel berikut menjelaskan tingkat izin.

Tingkat izin

Deskripsi

GLOBAL LEVEL

Izin global

Izin *.*.* yang diberikan menggunakan pernyataan GRANT. Izin yang diberikan berlaku untuk semua tabel di semua database.

CATALOG LEVEL

Izin tingkat katalog

Izin ctl.*.* yang diberikan menggunakan pernyataan GRANT. Izin yang diberikan berlaku untuk semua database dan tabel di katalog yang ditentukan.

DATABASE LEVEL

Izin tingkat database

Izin ctl.db.* yang diberikan menggunakan pernyataan GRANT. Izin yang diberikan berlaku untuk semua tabel di database yang ditentukan.

TABLE LEVEL

Izin tingkat tabel

Izin ctl.db.tbl yang diberikan menggunakan pernyataan GRANT. Izin yang diberikan berlaku untuk tabel tertentu di database yang ditentukan.

Izin ADMIN_PRIV dan GRANT_PRIV

Baik izin ADMIN_PRIV maupun GRANT_PRIV memungkinkan Anda memberikan izin. Bagian ini menjelaskan catatan penggunaan izin ADMIN_PRIV dan GRANT_PRIV.

  • CREATE USER

    • Pengguna yang memiliki izin ADMIN_PRIV atau izin GRANT_PRIV di tingkat global dan database dapat membuat pengguna.

  • DROP USER

    • Pengguna yang memiliki izin ADMIN_PRIV atau izin GRANT_PRIV di tingkat global dapat menghapus pengguna.

  • CREATE/DROP ROLE

    • Pengguna yang memiliki izin ADMIN_PRIV atau izin GRANT_PRIV di tingkat global dapat membuat peran.

  • GRANT/REVOKE

    • Pengguna yang memiliki izin ADMIN_PRIV atau izin GRANT_PRIV di tingkat global dapat memberikan izin kepada dan mencabut izin dari pengguna.

    • Pengguna yang memiliki izin GRANT_PRIV di tingkat katalog dapat memberikan izin pada katalog yang ditentukan kepada atau mencabut izin dari pengguna.

    • Pengguna yang memiliki izin GRANT_PRIV di tingkat database dapat memberikan izin pada database yang ditentukan kepada atau mencabut izin dari pengguna.

    • Pengguna yang memiliki izin GRANT_PRIV di tingkat tabel dapat memberikan izin pada tabel tertentu di database yang ditentukan kepada atau mencabut izin dari pengguna.

  • SET PASSWORD

    • Pengguna yang memiliki izin ADMIN_PRIV atau izin GRANT_PRIV di tingkat global dapat menetapkan kata sandi untuk semua pengguna.

    • Pengguna biasa dapat menetapkan kata sandi yang sesuai dengan identitas pengguna mereka sendiri. Anda dapat menjalankan pernyataan SELECT CURRENT_USER(); untuk menanyakan identitas pengguna Anda.

    • Pengguna yang memiliki izin GRANT_PRIV yang tidak berada di tingkat global tidak dapat menetapkan kata sandi untuk pengguna yang ada. Pengguna seperti itu hanya dapatmenetapkan kata sandi saat mereka membuat pengguna.

Properti pengguna

Tabel berikut menjelaskan properti yang terkait dengan pengguna.

Properti

Deskripsi

cpu_resource_limit

Sumber daya CPU maksimum yang tersedia untuk kueri. Untuk informasi lebih lanjut, lihat variabel sesi cpu_resource_limit. Nilai -1 menunjukkan bahwa sumber daya CPU yang tersedia untuk kueri tidak dibatasi.

default_load_cluster

Kluster default tempat data diimpor.

exec_mem_limit

Ukuran maksimum memori yang tersedia untuk kueri. Untuk informasi lebih lanjut, lihat variabel sesi exec_mem_limit. Nilai -1 menunjukkan bahwa ukuran memori yang tersedia untukkueri tidak dibatasi.

insert_timeout

Periode waktu habis untuk operasi INSERT.

max_query_instances

Jumlah maksimum instans yang dapat digunakan pengguna untuk kueri pada satu waktu.

max_user_connections

Jumlah maksimum koneksi pengguna.

query_timeout

Periode waktu habis untuk kueri pengguna.

resource_tags

Tag sumber daya.

sql_block_rules

Aturan untuk memblokir kueri SQL. Jika pengguna mengirim kueri yang sesuai dengan aturan yang ditentukan, kueri tersebut akan ditolak.

Catatan

Jika properti pengguna seperti query_timeout juga ditentukan sebagai variabel, sistem mengambil nilai properti pengguna berdasarkan prioritas berikut: variabel sesi > properti pengguna > variabel global > nilai default. Jika tidak ada variabel sesi yang ditentukan untuk properti pengguna, sistem memeriksa apakah properti pengguna ditentukan secara langsung. Jika tidak, sistem memeriksa apakah variabel global ditentukan untuk properti pengguna. Jika tidak, sistem menggunakan nilai default untuk properti pengguna.

Tanya Jawab Umum

Pertanyaan: Apa yang harus saya lakukan jika nama domain bertentangan dengan alamat IP atau terjadi konflik alamat IP saat saya membuat pengguna dan memberikan izin kepada pengguna?

Jalankan pernyataan DROP USER untuk menghapus pengguna dan buat pengguna lain.

  • Skenario di mana nama domain bertentangan dengan alamat IP:

    1. Setelah Anda menghapus pengguna, buat pengguna baru dan berikan izin kepada pengguna tersebut. Contoh kode:

      CREATE USER test_user@['domain'];
      GRANT SELECT_PRIV ON.TO test_user@['domain'];

      Sebagai contoh, nama domain diselesaikan oleh DNS menjadi dua alamat IP: IP1 dan IP2.

    2. Berikan izin kepada pengguna dengan identitas pengguna test_user@['IP1']. Contoh kode:

      GRANT ALTER_PRIV ON.TO test_user@'IP1';

      Izin pengguna dengan identitas pengguna test_user@'IP1' diubah dari SELECT_PRIV menjadi ALTER_PRIV. Pengguna dapat mengirim permintaan masuk dari IP1. Jika Anda mengubah izin pengguna dengan identitas pengguna test_user@['domain'], izin pengguna dengan identitas pengguna test_user@'IP1' tidak berubah.

  • Skenario di mana terjadi konflik alamat IP:

    Buat pengguna baru. Contoh kode:

    CREATE USER test_user@'%' IDENTIFIED BY "12345";
    CREATE USER test_user@'192.%' IDENTIFIED BY "abcde";

    Prioritas '192.%' lebih tinggi daripada '%'. Jika pengguna bernama test_user menggunakan kata sandi '12345' untuk masuk ke instans SelectDB dari mesin dengan Blok CIDR 192.168.0.0/16, permintaan masuk akan ditolak.