Topik ini menjelaskan sintaks untuk mengelola role dan izin serta menyertakan contoh terkait.
PolarDB-X kompatibel dengan role-based access control bawaan MySQL 8.0. Untuk informasi selengkapnya, lihat dokumentasi MySQL tentang role-based access control.
Buat role
Sintaks:
CREATE ROLE role [, role]...
Sebuah role, seperti user, terdiri atas nama dan host.
- Nama tidak boleh kosong.
- Host harus memenuhi aturan berikut:
- Host dapat berupa alamat IP atau hostname. Karakter tanda persen (%) dan garis bawah (_) berfungsi sebagai wildcard.
- Jika host tidak ditentukan, nilai default-nya adalah '%', yang berfungsi sebagai wildcard yang cocok dengan semua host.
Contoh:
CREATE ROLE 'role_ro'@'%', 'role_write';
Hapus role
Sintaks:
DROP ROLE role [, role] ...
Contoh:
DROP ROLE 'role_ro'@'%';
Berikan role
Berikan izin kepada roleSintaks:
GRANT priv_type [, priv_type] ... ON priv_level TO role [, role]... [WITH GRANT OPTION]
Contoh:
GRANT ALL PRIVILEGES ON db1.* TO 'role_write';Berikan role kepada user
Sintaks:
GRANT role [, role] ...
TO user_or_role [, user_or_role] ...
[WITH ADMIN OPTION]
Catatan:
- Untuk menjalankan perintah ini, Anda harus memenuhi salah satu kondisi berikut:
- User saat ini memiliki izin CREATE_USER.
- User saat ini telah diberikan role tersebut dengan opsi ADMIN OPTION.
- Jika Anda menyertakan klausa WITH ADMIN OPTION, penerima dapat memberikan role tersebut kepada user lain.
- Pemberian role kepada user tidak secara otomatis mengaktifkan izinnya. Anda harus menggunakan
SET DEFAULT ROLEatauSET ROLEuntuk mengaktifkan role tersebut.
Contoh:
GRANT 'role_write' TO 'user1'@'127.0.0.1';Tetapkan role default
Sintaks:
SET DEFAULT ROLE
{NONE | ALL | role [, role ] ...}
TO user [, user ] ...
Untuk menjalankan perintah ini, Anda harus memenuhi salah satu kondisi berikut:
- Role yang ditentukan harus sudah diberikan kepada user target.
- Anda adalah user target tersebut, atau Anda memiliki izin CREATE_USER.
Contoh:
SET DEFAULT ROLE 'role_write' TO 'user1'@'127.0.0.1';Tetapkan role sesi
Sintaks:
SET ROLE {
DEFAULT
| NONE
| ALL
| ALL EXCEPT role [, role ] ...
| role [, role ] ...
}
Catatan
- Jika Anda menjalankan pernyataan
SET ROLE DEFAULT, role aktif adalah role yang ditentukan dalam pernyataanSET DEFAULT ROLE. - Role yang diaktifkan dengan sintaks ini hanya berlaku untuk sesi saat ini.
Contoh:
SET ROLE 'role_write';
Melihat izin peran
Sintaks:
SHOW GRANTS
[FOR user_or_role
[USING role [, role] ...]]
Contoh:
SHOW GRANTS FOR 'role_write'@'%';
+---------------------------------------------------+
| GRANTS FOR 'ROLE_WRITE'@'%' |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO 'role_write'@'%' |
| GRANT ALL PRIVILEGES ON db1.* TO 'role_write'@'%' |
+---------------------------------------------------+
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 dalam sesi sebagai user1
SELECT CURRENT_ROLE();
+------------------+
| CURRENT_ROLE() |
+------------------+
| 'role_write'@'%' |
+------------------+
Cabut role
Cabut izin dari roleSintaks:
REVOKE priv_type [, priv_type] ... ON priv_level FROM role [, role]...
Contoh:
REVOKE ALL PRIVILEGES ON db1.* FROM 'role_write';
SHOW GRANTS FOR 'role_write'@'%';
+----------------------------------------+
| GRANTS FOR 'ROLE_WRITE'@'%' |
+----------------------------------------+
| GRANT USAGE ON *.* TO 'role_write'@'%' |
+----------------------------------------+Cabut role dari user
Sintaks:
REVOKE role [, role ] ... FROM user_or_role [, user_or_role ] ...
Contoh:
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' |
+-----------------------------------------------+
REVOKE 'role_write' FROM 'user1'@'127.0.0.1';
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' |
+----------------------------------------------+