Model hak istimewa berbasis peran untuk My RDS SQL - Layanan Basis Data Relasional Amazon

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

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 sepertiCREATE 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 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

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 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 atauSET 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`@`%` | +--------------------------------------------------+