Sistem akun dan izin PolarDB-X kompatibel dengan MySQL dan mendukung pernyataan seperti GRANT, REVOKE, SHOW GRANTS, CREATE USER, DROP USER, dan SET PASSWORD.
Akun
Account Permissions
Akun diidentifikasi oleh kombinasi username dan hostname dalam format username@'host'. Akun dengan username yang sama tetapi hostname berbeda merupakan akun yang berbeda. Misalnya, lily@30.9.73.96 dan lily@30.9.73.100 adalah dua akun terpisah dan dapat memiliki password serta izin yang berbeda.
Setelah Anda membuat database di Konsol PolarDB-X, sistem secara otomatis membuat dua akun sistem untuk database tersebut: akun administrator dan akun read-only. Anda tidak dapat menghapus akun bawaan ini atau mengubah izinnya.
- Nama akun administrator sama dengan nama database. Misalnya, jika database bernama
easydb, maka akun administrator juga bernamaeasydb. - Nama akun read-only adalah nama database yang diakhiri dengan
_RO. Misalnya, jika database bernamaeasydb, maka akun read-only bernamaeasydb_RO.
Misalnya, jika Anda memiliki dua database, dreamdb dan andordb, database dreamdb memiliki akun administrator bernama dreamdb dan akun read-only bernama dreamdb_RO. Database andordb memiliki akun administrator bernama andordb dan akun read-only bernama andordb_RO.
CREATE USER di PolarDB-X hanya ada di dalam PolarDB-X. Akun tersebut tidak terkait dengan ApsaraDB RDS dan tidak disinkronkan ke instans backend ApsaraDB RDS.Account rules
- Akun administrator memiliki semua izin.
- Hanya akun administrator yang dapat membuat akun lain dan memberikan izin.
- Akun administrator terikat pada database tertentu dan tidak memiliki izin untuk database lain. Saat melakukan koneksi, akun hanya dapat mengakses database yang terkait dengannya. Akun tersebut tidak dapat memberikan izin untuk database lain. Misalnya, akun administrator
easydbhanya dapat terhubung ke databaseeasydbdan hanya dapat memberikan izin pada databaseeasydbatau tabel-tabelnya kepada akun lain. - Akun read-only hanya memiliki izin SELECT.
Konvensi penamaan
- Username bersifat case-sensitive.
- Terdiri dari 4 hingga 20 karakter.
- Harus dimulai dengan huruf.
- Dapat berisi huruf kapital, huruf kecil, dan angka.
Aturan kata sandi
- Terdiri dari 6 hingga 20 karakter.
- Dapat berisi huruf kapital, huruf kecil, angka, dan karakter khusus berikut: @#$%^&+=.
Aturan pencocokan host
- Host harus berupa alamat IP. Anda dapat menggunakan wildcard
_dan%. Wildcard_mencocokkan satu karakter, sedangkan wildcard%mencocokkan nol atau lebih karakter. Host yang mengandung wildcard harus diapit tanda petik tunggal ('), misalnyalily@'30.9.%.%'ataudavid@'%'. - Jika upaya login cocok dengan dua akun, akun dengan awalan alamat IP yang paling panjang akan diprioritaskan. Awalan tersebut adalah bagian dari alamat IP sebelum wildcard apa pun. Misalnya, jika sistem memiliki dua akun,
david@'30.9.12_.xxx'dandavid@'30.9.1%.234', upaya login oleh penggunadaviddari host30.9.127.xxxakan menggunakan akundavid@'30.9.12_.xxx'. - Ketika VPC diaktifkan, alamat IP host berubah.Penting Untuk mencegah konfigurasi akun dan izin menjadi tidak valid, atur HOST ke '%' agar cocok dengan alamat IP apa pun.
Izin
Tingkat izin
- tingkat database (Didukung)
- tingkat tabel (Didukung)
- tingkat global (Belum didukung)
- tingkat kolom (Belum didukung)
- tingkat subprogram (Belum didukung)
Izin yang didukung
PolarDB-X mendukung delapan izin dasar tingkat tabel: CREATE, DROP, ALTER, INDEX, INSERT, DELETE, UPDATE, dan SELECT.
- Pernyataan TRUNCATE memerlukan izin DROP pada tabel.
- Pernyataan REPLACE memerlukan izin INSERT dan DELETE pada tabel.
- Pernyataan CREATE INDEX dan DROP INDEX memerlukan izin INDEX pada tabel.
- Pernyataan CREATE SEQUENCE memerlukan izin
CREATEpada tingkat database. - Pernyataan DROP SEQUENCE memerlukan izin
DROPpada tingkat database. - Pernyataan ALTER SEQUENCE memerlukan izin
ALTERpada tingkat database. - Pernyataan INSERT ON DUPLICATE UPDATE memerlukan izin INSERT dan UPDATE pada tabel.
Aturan izin
- Izin terikat pada akun (
username@'host'), bukan hanya username. - Saat Anda memberikan izin, sistem memverifikasi bahwa tabel yang ditentukan ada. Jika tidak ada, sistem akan mengembalikan error.
- Tingkat izin bersifat hierarkis, dari yang tertinggi ke terendah: tingkat global (belum didukung), tingkat database, tingkat tabel, dan tingkat kolom.
- Pemberian izin tingkat lebih tinggi mengesampingkan izin tingkat lebih rendah. Pencabutan izin tingkat lebih tinggi juga mencabut izin tingkat lebih rendah yang terkait.
- Izin USAGE tidak didukung.
Pemberian izin multi-database
- Di halaman Manajemen Akun di Konsol Alibaba Cloud PolarDB-X, buat akun dan berikan izin. Ini adalah metode yang direkomendasikan.
- Sebagai alternatif, gunakan pernyataan SQL
CREATE USERdanGRANT.Catatan Jika Anda menggunakan pernyataan SQL, perhatikan hal berikut:- Hanya akun administrator yang dapat membuat pengguna dan memberikan izin.
- Administrator hanya dapat memberikan izin pada database yang dikelolanya. Misalnya, jika administrator database A membuat akun
new_user@'%', dan Anda ingin akun ini mengakses database A dan B, administrator A harus memberikan izin untuk A, dan administrator B harus memberikan izin untuk B.
Menggunakan akun multi-database
new_user@'%' memiliki izin SELECT dan INSERT pada database A dan database B. Batasan berikut berlaku:- Untuk mengkueri tabel di database B saat terhubung ke database A, Anda harus terlebih dahulu mengganti database dengan menjalankan
USE B; SELECT * FROM table_in_B;. Kueri lintas database sepertiSELECT * FROM B.table_in_B;tidak didukung. - Untuk memasukkan data ke tabel di database B saat terhubung ke database A, Anda harus menjalankan
USE B; INSERT INTO table_in_B VALUES('value');. Penyisipan lintas database sepertiINSERT INTO B.table_in_B VALUES('value');tidak didukung. - Prinsip yang sama berlaku untuk pernyataan SQL lainnya.
Pernyataan
Membuat akun (CREATE USER)- Sintaks
CREATE USER user_specification [, user_specification] ... user_specification: user [ auth_option ] auth_option: IDENTIFIED BY 'auth#string' - Contoh
- Buat akun bernama
lilydengan password123456. Akun ini hanya dapat terhubung dari host 30.9.73.96.CREATE USER lily@30.9.73.96 IDENTIFIED BY '123456'; - Buat akun bernama
davidyang dapat terhubung dari host mana pun. Akun ini tidak memiliki password.CREATE USER david@'%';
- Buat akun bernama
- Sintaks
DROP USER user [, user] ... - Contoh
Hapus akun
lily@30.9.73.96:DROP USER lily@30.9.73.96;
- Sintaks
SET PASSWORD FOR user = password_option password_option: { PASSWORD('auth_string') } - ContohUbah password untuk akun
lily@30.9.73.96menjadi123456.SET PASSWORD FOR lily@30.9.73.96 = PASSWORD('123456')
Memberikan izin kepada akun (GRANT)
- Sintaks
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 [ auth_option ] auth_option: { IDENTIFIED BY 'auth#string' }Catatan Jika akun dalam pernyataanGRANTtidak ada, pernyataan tersebut gagal kecuali Anda menyertakan klausaIDENTIFIED BY. Jika klausaIDENTIFIED BYdisediakan, sistem akan membuat akun dan memberikan izin yang ditentukan. - Contoh
- Untuk database
easydb, buat akun bernamadavidyang dapat terhubung dari host mana pun dan memiliki semua izin pada database tersebut.# Metode 1: Buat akun, lalu berikan izin. CREATE USER david@'%' IDENTIFIED BY 'your#password'; GRANT ALL PRIVILEGES ON easydb.* to david@'%'; # Metode 2: Buat akun dan berikan izin dalam satu pernyataan. GRANT ALL PRIVILEGES ON easydb.* to david@'%' IDENTIFIED BY 'your#password'; - Untuk database
easydb, buat akun bernamahansonyang dapat terhubung dari host mana pun dan memiliki semua izin pada tabeleasydb.employees.GRANT ALL PRIVILEGES ON easydb.employees to hanson@'%' IDENTIFIED BY 'your#password'; - Untuk database
easydb, buat akun bernamahansonyang hanya dapat terhubung dari host 192.168.3.10 dan memiliki izin INSERT dan SELECT pada tabeleasydb.emp.GRANT INSERT,SELECT ON easydb.emp to hanson@'192.168.3.10' IDENTIFIED BY 'your#password'; - Untuk database
easydb, buat akun read-only bernamaactroyang dapat terhubung dari host mana pun.GRANT SELECT ON easydb.* to actro@'%' IDENTIFIED BY 'your#password';
- Untuk database
- Sintaks
- Mencabut izin tertentu dari akun pada tingkat izin yang ditentukan oleh
priv_level.REVOKE priv_type [, priv_type] ... ON priv_level - Mencabut semua izin tingkat database dan tingkat tabel dari pengguna.
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
- Mencabut izin tertentu dari akun pada tingkat izin yang ditentukan oleh
- Contoh
- Cabut izin CREATE, DROP, dan INDEX pada tabel
easydb.empdari akunhanson@'%'.REVOKE CREATE,DROP,INDEX ON easydb.emp FROM hanson@'%'; - Cabut semua izin dari akun
lily@30.9.73.96.REVOKE ALL PRIVILEGES,GRANT OPTION FROM lily@30.9.73.96;Catatan Untuk memastikan kompatibilitas dengan MySQL, Anda harus menyertakan klausaGRANT OPTION.
- Cabut izin CREATE, DROP, dan INDEX pada tabel
- Sintaks
SHOW GRANTS[ FOR user@host]; - Contoh
SHOW GRANTS FOR user1@host;
SHOW GRANTS hanya menampilkan izin untuk pengguna saat ini. Untuk melihat informasi tentang semua akun dan izin, gunakan Konsol Alibaba Cloud PolarDB-X.