PolarDB-X 1.0 menggunakan model akun dan izin yang sama dengan MySQL. Pernyataan yang didukung meliputi GRANT, REVOKE, SHOW GRANTS, CREATE USER, DROP USER, dan SET PASSWORD.
Model akun
Format akun
Akun terdiri dari username dan hostname, diformat sebagai username@'host'. Dua akun dengan username yang sama tetapi hostname berbeda merupakan akun terpisah dengan password dan izin yang independen. Sebagai contoh, lily@30.9.73.96 dan lily@30.9.73.100 adalah akun yang berbeda.
Akun bawaan
Setelah Anda membuat database di Konsol PolarDB-X 1.0, sistem secara otomatis membuat dua akun bawaan:
| Jenis akun | Pola penamaan | Contoh (database easydb) |
|---|---|---|
| Akun administrator | Sama dengan nama database | easydb |
| Akun read-only | Nama database + _RO | easydb_RO |
Akun bawaan tidak dapat dihapus, dan izinnya tidak dapat dimodifikasi.
Akun yang dibuat dengan CREATE USER hanya ada di PolarDB-X 1.0 dan tidak disinkronkan ke ApsaraDB RDS.Izin akun
Akun administrator memiliki izin penuh pada database yang terikat dengannya. Satu akun administrator hanya terikat pada satu database dan tidak dapat memberikan izin pada database lain.
Hanya akun administrator yang dapat membuat akun lain dan memberikan izin.
Akun read-only hanya memiliki izin SELECT.
Persyaratan penamaan dan password
Nama akun:
4–20 karakter, case-sensitive
Harus diawali dengan huruf
Hanya boleh berisi huruf dan angka
Password:
6–20 karakter
Dapat berisi huruf, angka, dan karakter khusus berikut:
@#$%^&+=
Pencocokan hostname
Hostname mendukung wildcard: _ mencocokkan tepat satu karakter, dan % mencocokkan nol atau lebih karakter. Masukkan hostname yang mengandung wildcard dalam tanda petik tunggal, misalnya lily@'30.9.%.%' atau david@'%'.
Ketika dua akun cocok dengan pengguna dan host yang sama saat login, akun yang hostname-nya memiliki awalan lebih panjang sebelum wildcard pertama akan diprioritaskan. Misalnya, jika david@'30.9.12_.xxx' dan david@'30.9.1%.234' keduanya ada dan david login dari 30.9.127.xxx, maka yang cocok adalah david@'30.9.12_.xxx'.
Setelah Virtual Private Cloud (VPC) diaktifkan, alamat IP host berubah. Atur hostname menjadi '%' untuk menghindari konfigurasi akun yang tidak valid.
Model izin
Tingkat izin yang didukung
PolarDB-X 1.0 mendukung izin tingkat database dan tingkat tabel. Izin global, izin tingkat kolom, dan izin tingkat subprogram tidak didukung.
Tabel berikut memetakan tingkat izin ke sintaksis klausa ON yang digunakan dalam pernyataan GRANT:
| Tingkat izin | ON sintaksis klausa | Contoh |
|---|---|---|
| Tingkat database | db_name.* | ON easydb.* |
| Tingkat tabel | db_name.tbl_name atau tbl_name | ON easydb.employees |
Izin yang tersedia
Delapan izin dasar tingkat tabel didukung: CREATE, DROP, ALTER, INDEX, INSERT, DELETE, UPDATE, dan SELECT.
Tabel berikut memetakan operasi SQL ke izin yang diperlukan:
| Operasi SQL | Izin yang diperlukan |
|---|---|
| TRUNCATE | DROP (tingkat tabel) |
| REPLACE | INSERT + DELETE (tingkat tabel) |
| CREATE INDEX, DROP INDEX | INDEX (tingkat tabel) |
| CREATE SEQUENCE | CREATE (tingkat database) |
| DROP SEQUENCE | DROP (tingkat database) |
| ALTER SEQUENCE | ALTER (tingkat database) |
| INSERT ON DUPLICATE UPDATE | INSERT + UPDATE (tingkat tabel) |
Aturan izin
Izin terikat pada identifikasi akun lengkap (
username@'host'), bukan hanya username.Saat Anda memberikan izin pada suatu tabel, tabel tersebut harus sudah ada. Jika belum ada, sistem akan mengembalikan error.
Izin tingkat lebih tinggi akan menimpa izin tingkat lebih rendah. Menghapus izin tingkat lebih tinggi juga akan menghapus semua izin tingkat lebih rendah di bawahnya.
Izin USAGE tidak didukung.
Berikan izin pada beberapa database
Mulai dari PolarDB-X 1.0 V5.3.6, satu akun dapat memiliki izin pada beberapa database.
Opsi 1 (disarankan): Gunakan halaman manajemen akun di Konsol PolarDB-X 1.0 untuk membuat akun dan menetapkan izin.
Opsi 2: Gunakan pernyataan SQL. Perhatikan batasan berikut:
Hanya akun administrator yang dapat membuat pengguna dan memberikan izin.
Akun administrator hanya dapat memberikan izin pada database yang terikat dengannya. Untuk memberikan izin
new_user@'%'pada Database A dan Database B, gunakan akun administrator Database A untuk memberikan izin Database A, lalu gunakan akun administrator Database B untuk memberikan izin Database B.
Batasan saat menggunakan akun multi-database: Kueri lintas database dan penyisipan data lintas database tidak didukung. Saat login ke Database A, gunakan USE untuk beralih database sebelum mengakses Database B:
-- Kueri data di Database B
USE B;
SELECT * FROM table_in_B;
-- Sisipkan data ke Database B
USE B;
INSERT INTO table_in_B VALUES('value');Referensi pernyataan SQL
Buat akun
Sintaksis:
CREATE USER user_specification [, user_specification] ...
user_specification: user [ auth_option ]
auth_option: IDENTIFIED BY 'auth_string'Contoh:
Buat lily@30.9.73.96 dengan password 123456. Akun ini hanya dapat terhubung dari 30.9.73.96:
CREATE USER lily@30.9.73.96 IDENTIFIED BY '123456';Buat david@'%' tanpa password. Akun ini dapat terhubung dari host mana pun:
CREATE USER david@'%';Hapus akun
Sintaksis:
DROP USER user [, user] ...Contoh:
DROP USER lily@30.9.73.96;Ubah password akun
Sintaksis:
SET PASSWORD FOR user = PASSWORD('auth_string')Contoh:
SET PASSWORD FOR lily@30.9.73.96 = PASSWORD('123456');Berikan izin
Sintaksis:
GRANT
priv_type [, priv_type] ...
ON priv_level
TO user_specification [, user_specification] ...
[WITH GRANT OPTION]
priv_level:
db_name.*
| db_name.tbl_name
| tbl_name
user_specification:
user [ IDENTIFIED BY 'auth_string' ]Jika akun dalam pernyataanGRANTtidak ada dan tidak menyertakan klausaIDENTIFIED BY, sistem akan mengembalikan error. JikaIDENTIFIED BYdisertakan, akun akan dibuat dan izin diberikan dalam satu pernyataan.
Contoh:
Buat david@'%' dan berikan izin penuh pada easydb:
-- Dua langkah: buat akun, lalu berikan izin
CREATE USER david@'%' IDENTIFIED BY 'your#password';
GRANT ALL PRIVILEGES ON easydb.* TO david@'%';
-- Satu langkah: buat akun dan berikan izin sekaligus
GRANT ALL PRIVILEGES ON easydb.* TO david@'%' IDENTIFIED BY 'your#password';Berikan izin penuh pada tabel easydb.employees kepada hanson@'%':
GRANT ALL PRIVILEGES ON easydb.employees TO hanson@'%'
IDENTIFIED BY 'your#password';Berikan izin INSERT dan SELECT pada easydb.emp hanya kepada hanson@192.168.3.10:
GRANT INSERT, SELECT ON easydb.emp TO hanson@'192.168.3.10'
IDENTIFIED BY 'your#password';Buat akun read-only actro@'%' untuk easydb:
GRANT SELECT ON easydb.* TO actro@'%' IDENTIFIED BY 'your#password';Cabut izin
Sintaksis:
Cabut izin tertentu pada tingkat tertentu:
REVOKE
priv_type [, priv_type] ...
ON priv_level
FROM user [, user] ...Cabut semua izin tingkat database dan tingkat tabel dari suatu akun:
REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user [, user] ...GRANT OPTION harus disertakan dalam bentuk kedua untuk kompatibilitas MySQL.Contoh:
Cabut izin CREATE, DROP, dan INDEX pada easydb.emp dari hanson@'%':
REVOKE CREATE, DROP, INDEX ON easydb.emp FROM hanson@'%';Cabut semua izin dari lily@30.9.73.96:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM lily@30.9.73.96;Lihat izin yang diberikan
Sintaksis:
SHOW GRANTS [FOR user@host];Contoh:
SHOW GRANTS FOR actro@'%';Pada PolarDB-X 1.0 V5.3.6 dan versi setelahnya, SHOW GRANTS hanya menampilkan izin untuk akun saat ini. Untuk melihat izin semua akun, kunjungi halaman manajemen akun di Konsol PolarDB-X 1.0.