PolarDB-X mendukung kontrol akses berbasis peran (RBAC) yang kompatibel dengan MySQL 8.0. Topik ini mencakup sintaksis setiap operasi manajemen peran dan menyediakan contoh yang dapat dijalankan.
Untuk spesifikasi lengkap mengenai peran MySQL 8.0, lihat Role-Based Access Control.
Operasi sekilas
| Operasi | Pernyataan |
|---|---|
| Buat peran | CREATE ROLE |
| Hapus peran | DROP ROLE |
| Berikan hak istimewa kepada peran | GRANT ... ON ... TO role |
| Tetapkan peran ke pengguna | GRANT role TO user |
| Tetapkan peran default untuk pengguna | SET DEFAULT ROLE |
| Aktifkan peran untuk sesi saat ini | SET ROLE |
| Lihat izin untuk peran atau pengguna | SHOW GRANTS |
| Cabut hak istimewa dari peran | REVOKE ... ON ... FROM role |
| Hapus penetapan peran dari pengguna | REVOKE role FROM user |
Buat peran
CREATE ROLE role [, role]...Nama peran terdiri dari dua bagian: Name dan Host.
Name: Wajib diisi dan tidak boleh kosong.
Host: Harus berupa alamat IP. Dapat berisi garis bawah (
_) dan tanda persen (%), tetapi keduanya tidak dianggap sebagai karakter wildcard. Jika dibiarkan kosong,%digunakan sebagai nilai host. Kueri%menggunakan pencocokan eksak—tidak diperluas sebagai wildcard.
Contoh:
mysql> CREATE ROLE 'role_ro'@'%', 'role_write';Hapus peran
DROP ROLE role [, role] ...Contoh:
mysql> DROP ROLE 'role_ro'@'%';Berikan hak istimewa kepada peran
Gunakan sintaksis berikut untuk memberikan hak istimewa database (seperti SELECT atau ALL PRIVILEGES) langsung ke peran. Bentuk ini mencakup klausa ON untuk menentukan tingkat hak istimewa.
GRANT priv_type [, priv_type] ... ON priv_level TO role [, role]... [WITH GRANT OPTION]Contoh:
mysql> GRANT ALL PRIVILEGES ON db1.* TO 'role_write';Tetapkan peran ke pengguna
Gunakan sintaksis berikut untuk menetapkan peran ke pengguna.
GRANT role [, role] ...
TO user_or_role [, user_or_role] ...
[WITH ADMIN OPTION]Persyaratan:
Akun yang menjalankan harus memiliki hak istimewa
CREATE_USER.Akun yang menjalankan harus memiliki izin admin pada peran yang ditetapkan.
Menambahkan
WITH ADMIN OPTIONmemberikan izin admin kepada penerima atas peran yang ditetapkan.
Contoh:
mysql> GRANT 'role_write' TO 'user1'@'127.0.0.1';Menetapkan peran tidak secara otomatis mengaktifkannya. Sesi pengguna tidak akan mendapatkan hak istimewa peran tersebut hingga peran diaktifkan. Gunakan SET DEFAULT ROLE dan SET ROLE untuk mengaktifkannya (lihat bagian di bawah).
Tetapkan peran default untuk pengguna
SET DEFAULT ROLE menentukan peran mana yang secara otomatis aktif saat pengguna terhubung.
SET DEFAULT ROLE
{NONE | ALL | role [, role ] ...}
TO user [, user ] ...Persyaratan:
Peran yang ditentukan harus sudah ditetapkan ke pengguna melalui
GRANT.Pengguna harus telah ditetapkan peran tersebut, atau pengguna harus memiliki hak istimewa
CREATE_USER.
Contoh:
mysql> SET DEFAULT ROLE 'role_write' TO 'user1'@'127.0.0.1';Aktifkan peran untuk sesi saat ini
SET ROLE mengubah peran mana yang aktif dalam koneksi saat ini. Perubahan tidak berlaku setelah sesi berakhir.
SET ROLE {
DEFAULT
| NONE
| ALL
| ALL EXCEPT role [, role ] ...
| role [, role ] ...
}SET ROLE DEFAULTmengaktifkan peran yang dikonfigurasi olehSET DEFAULT ROLE. Peran yang diaktifkan hanya berlaku untuk koneksi saat ini.
Contoh:
mysql> SET ROLE 'role_write';Untuk memverifikasi peran mana yang sedang aktif, jalankan SELECT CURRENT_ROLE():
mysql> SELECT CURRENT_ROLE();
+------------------+
| CURRENT_ROLE() |
+------------------+
| 'role_write'@'%' |
+------------------+Lihat izin
SHOW GRANTS menampilkan hak istimewa dan penetapan peran untuk pengguna atau peran. Tambahkan klausa USING untuk memperluas hak istimewa peran secara inline dalam output.
SHOW GRANTS
[FOR user_or_role
[USING role [, role] ...]]Contoh — lihat izin untuk peran:
mysql> SHOW GRANTS FOR 'role_write'@'%';
+---------------------------------------------------+
| GRANTS FOR 'ROLE_WRITE'@'%' |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO 'role_write'@'%' |
| GRANT ALL PRIVILEGES ON db1.* TO 'role_write'@'%' |
+---------------------------------------------------+Contoh — lihat izin untuk pengguna, dengan hak istimewa peran diperluas:
mysql> SHOW GRANTS FOR 'user1'@'127.0.0.1' USING 'role_write';
+------------------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1' |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1' |
| GRANT ALL PRIVILEGES ON db1.* TO 'user1'@'127.0.0.1' |
| GRANT 'role_write'@'%' TO 'user1'@'127.0.0.1' |
+------------------------------------------------------+
-- Jalankan sebagai user1
mysql> SELECT CURRENT_ROLE();
+------------------+
| CURRENT_ROLE() |
+------------------+
| 'role_write'@'%' |
+------------------+Cabut hak istimewa dari peran
Gunakan sintaksis berikut untuk mencabut hak istimewa tertentu dari peran.
REVOKE priv_type [, priv_type] ... ON priv_level FROM role [, role]...Contoh:
mysql> REVOKE ALL PRIVILEGES ON db1.* FROM 'role_write';
mysql> SHOW GRANTS FOR 'role_write'@'%';
+----------------------------------------+
| GRANTS FOR 'ROLE_WRITE'@'%' |
+----------------------------------------+
| GRANT USAGE ON *.* TO 'role_write'@'%' |
+----------------------------------------+Hapus penetapan peran dari pengguna
Gunakan sintaksis berikut untuk membatalkan penetapan peran dari pengguna.
REVOKE role [, role ] ... FROM user_or_role [, user_or_role ] ...Contoh:
mysql> SHOW GRANTS FOR 'user1'@'127.0.0.1';
+-----------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1' |
+-----------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1' |
| GRANT SELECT ON db1.* TO 'user1'@'127.0.0.1' |
| GRANT 'role_write'@'%' TO 'user1'@'127.0.0.1' |
+-----------------------------------------------+
mysql> REVOKE 'role_write' FROM 'user1'@'127.0.0.1';
mysql> SHOW GRANTS FOR 'user1'@'127.0.0.1';
+----------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1' |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1' |
| GRANT SELECT ON db1.* TO 'user1'@'127.0.0.1' |
+----------------------------------------------+