Topik ini mencantumkan perintah SQL umum yang digunakan untuk manajemen database dan akun di ApsaraDB RDS for MySQL.
ApsaraDB RDS for MySQL sepenuhnya kompatibel (100%) dengan MySQL open source. Untuk informasi lebih lengkap mengenai perintah SQL, fungsi, parameter, dan batasan, lihat Panduan Referensi Resmi MySQL.
Manajemen Database
Kategori | Sintaksis SQL | Contoh |
Buat database | -- Buat database.
CREATE DATABASE <nama_database>;
-- Buat database dan tentukan set karakter dan aturan pengurutan.
CREATE DATABASE <nama_database>
DEFAULT CHARACTER SET <charset>
COLLATE <aturan_pengurutan>;
| -- Buat database app_db.
CREATE DATABASE app_db;
-- Buat database app_db dan tentukan set karakter. Kami sarankan Anda menggunakan utf8mb4 karena mendukung lebih banyak karakter.
CREATE DATABASE app_db
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- Buat database dan tentukan set karakter Cina untuk skenario tertentu.
CREATE DATABASE cn_db
DEFAULT CHARACTER SET gbk
COLLATE gbk_chinese_ci;
|
Hapus database | DROP DATABASE <nama_database>;
| DROP DATABASE app_db;
|
Manajemen Akun
Kategori | Sintaksis SQL | Contoh |
Buat akun | CREATE USER 'username'@'host' IDENTIFIED BY 'password';
| -- Buat akun yang dapat digunakan untuk masuk dari alamat IP apa pun. Tanda persen (%) menunjukkan bahwa koneksi dari alamat IP apa pun diizinkan.
-- Metode ini sesuai dengan cara akun dibuat di Konsol ApsaraDB RDS. Anda kemudian dapat menghapus akun di Konsol ApsaraDB RDS.
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';
-- Buat akun yang hanya dapat digunakan untuk masuk dari blok CIDR tertentu.
-- Jika Anda menentukan alamat IP atau blok CIDR saat membuat akun, kesalahan akan dilaporkan saat Anda mencoba menghapus akun nanti di Konsol ApsaraDB RDS. Anda harus menghapus akun dengan menjalankan perintah SQL.
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!';
|
Hapus akun | DROP USER 'username'@'host';
Penting Jangan gunakan perintah DELETE FROM mysql.user WHERE User = '<username>' AND Host = '<host>'; untuk menghapus akun. Metode ini dapat meninggalkan izin residu atau menyebabkan ketidaksesuaian metadata. | -- Hapus akun app_user yang hanya dapat digunakan untuk masuk dari blok CIDR 192.168.1.x.
DROP USER 'app_user'@'192.168.1.%';
|
Berikan izin | GRANT SELECT ON db01.* TO 'username'@'host';
GRANT <izin> ON <level> TO 'username'@'host';
-- <izin>: Izin, seperti SELECT, INSERT, UPDATE, DELETE, atau ALL PRIVILEGES.
-- <level>: Tingkat izin, seperti db_name.* (tingkat database), db_name.table_name (tingkat tabel), atau *.* (tingkat global).
Catatan Anda tidak dapat menjalankan perintah GRANT ALL PRIVILEGES ON *.* untuk memberikan kontrol penuh atas semua database. | -- Berikan izin SELECT pada semua tabel di database app_db.
GRANT SELECT ON app_db.* TO 'app_user'@'%';
-- Berikan izin SELECT, INSERT, UPDATE, dan DELETE pada tabel users di database app_db.
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.users TO 'app_user'@'%';
-- (Gunakan dengan hati-hati) Berikan semua izin pada database app_db. Hanya klien dari blok CIDR 192.168.1.x yang dapat terhubung.
GRANT ALL PRIVILEGES ON app_db.* TO 'admin_user'@'192.168.1.%';
|
Kueri izin akun | -- Semua akun yang dibuat di semua instans dan host tempat login diizinkan.
SELECT user, host FROM mysql.user;
-- Lihat izin akun.
SHOW GRANTS FOR 'username'@'host';
Catatan Untuk versi sebelumnya, jika kesalahan dilaporkan saat Anda meminta mysql.user, mintalah tampilan mysql.user_view sebagai gantinya. | -- Lihat semua izin database yang dimiliki akun app_user saat digunakan untuk masuk dari host di blok CIDR 192.168.1.%.
SHOW GRANTS FOR 'app_user'@'192.168.1.%';
|
Cabut izin akun (akun masih ada) | Cabut semua izin: Cabut semua izin operasi dan kemampuan otorisasi dari akun pada semua database. REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'username'@'host';
Cabut izin tertentu: Cabut izin UPDATE dari akun pada semua tabel di semua database. Anda dapat mengubah jenis izin sesuai kebutuhan. REVOKE UPDATE ON *.* FROM 'username'@'host';
Catatan Mencabut izin tidak menghapus akun. Untuk menghapus akun secara permanen, gunakan perintah DROP USER. | -- Cabut semua izin operasi dan kemampuan otorisasi dari akun app_user pada semua database saat akun digunakan untuk masuk dari 192.168.1.%.
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'app_user'@'192.168.1.%';
-- Cabut izin untuk memodifikasi data di tabel users database shop_db dari akun app_user saat akun digunakan untuk masuk dari 10.10.0.%.
REVOKE UPDATE ON shop_db.users FROM 'app_user'@'10.10.0.%';
|
FAQ
Mengapa saya menerima kesalahan saat menghapus akun di Konsol ApsaraDB RDS?
Deskripsi Masalah
Saat Anda menghapus pengguna di halaman Account Management Konsol ApsaraDB RDS for MySQL, pesan kesalahan berikut ditampilkan:Gagal menghapus akun. Periksa permintaan atau parameter input. Thread lain di instans mungkin sedang menunggu kunci atau nilai host dari akun database saat ini tidak diatur ke % (memungkinkan login dari semua host).
Solusi
Secara default, daftar putih host untuk akun pengguna yang dibuat di Konsol ApsaraDB RDS for MySQL diatur ke %, yang memungkinkan akses dari host mana pun. Jika akun dibuat secara manual menggunakan perintah SQL dan dikonfigurasi untuk memungkinkan login hanya dari alamat IP atau segmen jaringan tertentu, seperti 'username'@'10.10.10.1' atau 'username'@'10.%.%.%', akun tersebut tidak dapat dihapus dari Konsol RDS.
Jalankan pernyataan SQL berikut untuk memeriksa apakah host untuk akun dikonfigurasi dengan nilai selain %. Jika nilai host bukan %, Anda tidak dapat menghapus akun di Konsol RDS. Anda harus menggunakan perintah DROP USER untuk menghapus akun.
-- Periksa apakah host untuk akun yang akan dihapus dikonfigurasi dengan nilai selain % (misalnya, 192.168.1.1 atau 192.168.1.%).
SELECT user,host FROM mysql.user WHERE user='username_to_delete';
-- Jika nilai host bukan %, Anda harus menghapus akun menggunakan perintah DROP USER.
DROP USER 'username_to_delete'@'target_host_IP_or_network_segment';