

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Model hak istimewa berbasis peran untuk My RDS SQL
<a name="Appendix.MySQL.CommonDBATasks.privilege-model"></a>

Dimulai dengan RDS untuk SQL versi Saya 8.0.36, Anda tidak dapat memodifikasi tabel di `mysql` database secara langsung. Secara khusus, Anda tidak dapat membuat pengguna database dengan melakukan operasi bahasa manipulasi data (DML) pada `grant` tabel. Sebagai gantinya, Anda menggunakan pernyataan SQL manajemen akun Saya seperti`CREATE USER`,`GRANT`, dan `REVOKE` untuk memberikan hak istimewa berbasis peran kepada pengguna. Anda juga tidak dapat membuat jenis objek lain seperti prosedur tersimpan dalam basis data `mysql`. Anda masih dapat mengueri tabel `mysql`. Jika Anda menggunakan replikasi log biner, perubahan yang dilakukan langsung ke `mysql` tabel pada instans DB sumber tidak direplikasi ke cluster target.

Dalam beberapa kasus, aplikasi Anda mungkin menggunakan pintasan untuk membuat pengguna atau objek lain dengan melakukan penyisipan ke dalam tabel `mysql`. Jika demikian, ubah kode aplikasi Anda untuk menggunakan pernyataan yang sesuai seperti `CREATE USER`.

Untuk mengekspor metadata bagi pengguna database selama migrasi dari SQL database Saya eksternal, gunakan salah satu metode berikut:
+ Gunakan utilitas dump instance My SQL Shell dengan filter untuk mengecualikan pengguna, peran, dan hibah. Contoh berikut menunjukkan sintaks perintah untuk digunakan. Pastikan `outputUrl` itu kosong.

  ```
  mysqlsh user@host -- util.dumpInstance(outputUrl,{excludeSchemas:['mysql'],users: true})
  ```

  Untuk informasi selengkapnya, lihat [Instance Dump Utility, Schema Dump Utility, dan Table Dump Utility](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-dump-instance-schema.html) di Manual Referensi Saya. SQL
+ Gunakan utilitas `mysqlpump` klien. Contoh ini mencakup semua tabel kecuali untuk tabel dalam database `mysql` sistem. Ini juga mencakup `CREATE USER` dan `GRANT` pernyataan untuk mereproduksi semua SQL pengguna Saya dalam database yang dimigrasi.

  ```
  mysqlpump --exclude-databases=mysql --users
  ```

  Utilitas `mysqlpump` klien tidak lagi tersedia dengan My SQL 8.4. Sebaliknya, gunakan `mysqldump`.

Untuk menyederhanakan pengelolaan izin bagi banyak pengguna atau aplikasi, Anda dapat menggunakan pernyataan `CREATE ROLE` untuk membuat peran yang memiliki serangkaian izin. Kemudian, Anda dapat menggunakan pernyataan `GRANT` dan `SET ROLE` serta fungsi `current_role` untuk menetapkan peran ke pengguna atau aplikasi, mengganti peran saat ini, dan memeriksa peran mana yang berlaku. Untuk informasi selengkapnya tentang sistem izin berbasis peran di My SQL 8.0, lihat [Menggunakan Peran](https://dev.mysql.com/doc/refman/8.0/en/roles.html) di Manual Referensi SayaSQL.

**penting**  
Kami sangat menyarankan agar Anda tidak menggunakan pengguna master secara langsung di aplikasi Anda. Sebagai gantinya, ikuti praktik terbaik menggunakan pengguna basis data yang dibuat dengan hak akses paling rendah yang diperlukan untuk aplikasi Anda.

Dimulai dengan versi 8.0.36, RDS untuk My SQL termasuk peran khusus yang memiliki semua hak istimewa berikut. Peran ini bernama `rds_superuser_role`. Pengguna administratif utama untuk setiap instans DB sudah memiliki peran ini diberikan. Peran `rds_superuser_role` mencakup hak akses berikut untuk semua objek basis data:
+  `ALTER` 
+  `APPLICATION_PASSWORD_ADMIN` 
+  `ALTER ROUTINE` 
+  `CREATE` 
+  `CREATE ROLE` 
+  `CREATE ROUTINE` 
+  `CREATE TEMPORARY TABLES` 
+  `CREATE USER` 
+  `CREATE VIEW` 
+  `DELETE` 
+  `DROP` 
+  `DROP ROLE` 
+  `EVENT` 
+  `EXECUTE` 
+  `INDEX` 
+  `INSERT` 
+  `LOCK TABLES` 
+  `PROCESS` 
+  `REFERENCES` 
+  `RELOAD` 
+  `REPLICATION CLIENT` 
+  `REPLICATION SLAVE` 
+  `ROLE_ADMIN` 
+  `SET_USER_ID` 
+  `SELECT` 
+  `SHOW DATABASES` 
+  `SHOW VIEW` 
+  `TRIGGER` 
+  `UPDATE` 
+  `XA_RECOVER_ADMIN`

 Definisi peran juga mencakup `WITH GRANT OPTION` sehingga pengguna administratif dapat memberikan peran tersebut kepada pengguna lain. Secara khusus, administrator harus memberikan hak istimewa apa pun yang diperlukan untuk melakukan replikasi log biner dengan SQL klaster Saya sebagai target.

**Tip**  
 Untuk melihat detail lengkap izin, gunakan pernyataan berikut.  

```
SHOW GRANTS FOR rds_superuser_role@'%';
```

 Saat Anda memberikan akses dengan menggunakan peran RDS untuk SQL versi Saya 8.0.36 dan yang lebih tinggi, Anda juga mengaktifkan peran dengan menggunakan pernyataan `SET ROLE role_name` atau`SET ROLE ALL`. Contoh berikut menunjukkan caranya. Ganti nama peran yang sesuai untuk `CUSTOM_ROLE`.

```
# Grant role to user
mysql> GRANT CUSTOM_ROLE TO 'user'@'domain-or-ip-address'

# Check the current roles for your user. In this case, the CUSTOM_ROLE role has not been activated.
# Only the rds_superuser_role is currently in effect.
mysql> SELECT CURRENT_ROLE();
+--------------------------+
| CURRENT_ROLE()           |
+--------------------------+
| `rds_superuser_role`@`%` |
+--------------------------+
1 row in set (0.00 sec)

# Activate all roles associated with this user using SET ROLE.
# You can activate specific roles or all roles.
# In this case, the user only has 2 roles, so we specify ALL.
mysql> SET ROLE ALL;
Query OK, 0 rows affected (0.00 sec)

# Verify role is now active
mysql> SELECT CURRENT_ROLE();
+--------------------------------------------------+
| CURRENT_ROLE()                                   |
+--------------------------------------------------+
| `CUSTOM_ROLE`@`%`,`rds_superuser_role`@`%` |
+--------------------------------------------------+
```