All Products
Search
Document Center

PolarDB:Sistem akun dan izin

Last Updated:Mar 29, 2026

PolarDB-X 1.0 menggunakan model akun dan izin yang sama dengan MySQL. Pernyataan yang didukung meliputi GRANT, REVOKE, SHOW GRANTS, CREATE USER, DROP USER, dan SET PASSWORD.

Model akun

Format akun

Akun terdiri dari username dan hostname, diformat sebagai username@'host'. Dua akun dengan username yang sama tetapi hostname berbeda merupakan akun terpisah dengan password dan izin yang independen. Sebagai contoh, lily@30.9.73.96 dan lily@30.9.73.100 adalah akun yang berbeda.

Akun bawaan

Setelah Anda membuat database di Konsol PolarDB-X 1.0, sistem secara otomatis membuat dua akun bawaan:

Jenis akunPola penamaanContoh (database easydb)
Akun administratorSama dengan nama databaseeasydb
Akun read-onlyNama database + _ROeasydb_RO

Akun bawaan tidak dapat dihapus, dan izinnya tidak dapat dimodifikasi.

Akun yang dibuat dengan CREATE USER hanya ada di PolarDB-X 1.0 dan tidak disinkronkan ke ApsaraDB RDS.

Izin akun

  • Akun administrator memiliki izin penuh pada database yang terikat dengannya. Satu akun administrator hanya terikat pada satu database dan tidak dapat memberikan izin pada database lain.

  • Hanya akun administrator yang dapat membuat akun lain dan memberikan izin.

  • Akun read-only hanya memiliki izin SELECT.

Persyaratan penamaan dan password

Nama akun:

  • 4–20 karakter, case-sensitive

  • Harus diawali dengan huruf

  • Hanya boleh berisi huruf dan angka

Password:

  • 6–20 karakter

  • Dapat berisi huruf, angka, dan karakter khusus berikut: @#$%^&+=

Pencocokan hostname

Hostname mendukung wildcard: _ mencocokkan tepat satu karakter, dan % mencocokkan nol atau lebih karakter. Masukkan hostname yang mengandung wildcard dalam tanda petik tunggal, misalnya lily@'30.9.%.%' atau david@'%'.

Ketika dua akun cocok dengan pengguna dan host yang sama saat login, akun yang hostname-nya memiliki awalan lebih panjang sebelum wildcard pertama akan diprioritaskan. Misalnya, jika david@'30.9.12_.xxx' dan david@'30.9.1%.234' keduanya ada dan david login dari 30.9.127.xxx, maka yang cocok adalah david@'30.9.12_.xxx'.

Penting

Setelah Virtual Private Cloud (VPC) diaktifkan, alamat IP host berubah. Atur hostname menjadi '%' untuk menghindari konfigurasi akun yang tidak valid.

Model izin

Tingkat izin yang didukung

PolarDB-X 1.0 mendukung izin tingkat database dan tingkat tabel. Izin global, izin tingkat kolom, dan izin tingkat subprogram tidak didukung.

Tabel berikut memetakan tingkat izin ke sintaksis klausa ON yang digunakan dalam pernyataan GRANT:

Tingkat izinON sintaksis klausaContoh
Tingkat databasedb_name.*ON easydb.*
Tingkat tabeldb_name.tbl_name atau tbl_nameON easydb.employees

Izin yang tersedia

Delapan izin dasar tingkat tabel didukung: CREATE, DROP, ALTER, INDEX, INSERT, DELETE, UPDATE, dan SELECT.

Tabel berikut memetakan operasi SQL ke izin yang diperlukan:

Operasi SQLIzin yang diperlukan
TRUNCATEDROP (tingkat tabel)
REPLACEINSERT + DELETE (tingkat tabel)
CREATE INDEX, DROP INDEXINDEX (tingkat tabel)
CREATE SEQUENCECREATE (tingkat database)
DROP SEQUENCEDROP (tingkat database)
ALTER SEQUENCEALTER (tingkat database)
INSERT ON DUPLICATE UPDATEINSERT + UPDATE (tingkat tabel)

Aturan izin

  • Izin terikat pada identifikasi akun lengkap (username@'host'), bukan hanya username.

  • Saat Anda memberikan izin pada suatu tabel, tabel tersebut harus sudah ada. Jika belum ada, sistem akan mengembalikan error.

  • Izin tingkat lebih tinggi akan menimpa izin tingkat lebih rendah. Menghapus izin tingkat lebih tinggi juga akan menghapus semua izin tingkat lebih rendah di bawahnya.

  • Izin USAGE tidak didukung.

Berikan izin pada beberapa database

Mulai dari PolarDB-X 1.0 V5.3.6, satu akun dapat memiliki izin pada beberapa database.

Opsi 1 (disarankan): Gunakan halaman manajemen akun di Konsol PolarDB-X 1.0 untuk membuat akun dan menetapkan izin.

Opsi 2: Gunakan pernyataan SQL. Perhatikan batasan berikut:

  • Hanya akun administrator yang dapat membuat pengguna dan memberikan izin.

  • Akun administrator hanya dapat memberikan izin pada database yang terikat dengannya. Untuk memberikan izin new_user@'%' pada Database A dan Database B, gunakan akun administrator Database A untuk memberikan izin Database A, lalu gunakan akun administrator Database B untuk memberikan izin Database B.

Batasan saat menggunakan akun multi-database: Kueri lintas database dan penyisipan data lintas database tidak didukung. Saat login ke Database A, gunakan USE untuk beralih database sebelum mengakses Database B:

-- Kueri data di Database B
USE B;
SELECT * FROM table_in_B;

-- Sisipkan data ke Database B
USE B;
INSERT INTO table_in_B VALUES('value');

Referensi pernyataan SQL

Buat akun

Sintaksis:

CREATE USER user_specification [, user_specification] ...
user_specification: user [ auth_option ]
auth_option: IDENTIFIED BY 'auth_string'

Contoh:

Buat lily@30.9.73.96 dengan password 123456. Akun ini hanya dapat terhubung dari 30.9.73.96:

CREATE USER lily@30.9.73.96 IDENTIFIED BY '123456';

Buat david@'%' tanpa password. Akun ini dapat terhubung dari host mana pun:

CREATE USER david@'%';

Hapus akun

Sintaksis:

DROP USER user [, user] ...

Contoh:

DROP USER lily@30.9.73.96;

Ubah password akun

Sintaksis:

SET PASSWORD FOR user = PASSWORD('auth_string')

Contoh:

SET PASSWORD FOR lily@30.9.73.96 = PASSWORD('123456');

Berikan izin

Sintaksis:

GRANT
    priv_type [, priv_type] ...
    ON priv_level
    TO user_specification [, user_specification] ...
    [WITH GRANT OPTION]

priv_level:
      db_name.*
    | db_name.tbl_name
    | tbl_name

user_specification:
    user [ IDENTIFIED BY 'auth_string' ]
Jika akun dalam pernyataan GRANT tidak ada dan tidak menyertakan klausa IDENTIFIED BY, sistem akan mengembalikan error. Jika IDENTIFIED BY disertakan, akun akan dibuat dan izin diberikan dalam satu pernyataan.

Contoh:

Buat david@'%' dan berikan izin penuh pada easydb:

-- Dua langkah: buat akun, lalu berikan izin
CREATE USER david@'%' IDENTIFIED BY 'your#password';
GRANT ALL PRIVILEGES ON easydb.* TO david@'%';

-- Satu langkah: buat akun dan berikan izin sekaligus
GRANT ALL PRIVILEGES ON easydb.* TO david@'%' IDENTIFIED BY 'your#password';

Berikan izin penuh pada tabel easydb.employees kepada hanson@'%':

GRANT ALL PRIVILEGES ON easydb.employees TO hanson@'%'
IDENTIFIED BY 'your#password';

Berikan izin INSERT dan SELECT pada easydb.emp hanya kepada hanson@192.168.3.10:

GRANT INSERT, SELECT ON easydb.emp TO hanson@'192.168.3.10'
IDENTIFIED BY 'your#password';

Buat akun read-only actro@'%' untuk easydb:

GRANT SELECT ON easydb.* TO actro@'%' IDENTIFIED BY 'your#password';

Cabut izin

Sintaksis:

Cabut izin tertentu pada tingkat tertentu:

REVOKE
    priv_type [, priv_type] ...
    ON priv_level
    FROM user [, user] ...

Cabut semua izin tingkat database dan tingkat tabel dari suatu akun:

REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user [, user] ...
GRANT OPTION harus disertakan dalam bentuk kedua untuk kompatibilitas MySQL.

Contoh:

Cabut izin CREATE, DROP, dan INDEX pada easydb.emp dari hanson@'%':

REVOKE CREATE, DROP, INDEX ON easydb.emp FROM hanson@'%';

Cabut semua izin dari lily@30.9.73.96:

REVOKE ALL PRIVILEGES, GRANT OPTION FROM lily@30.9.73.96;

Lihat izin yang diberikan

Sintaksis:

SHOW GRANTS [FOR user@host];

Contoh:

SHOW GRANTS FOR actro@'%';
Pada PolarDB-X 1.0 V5.3.6 dan versi setelahnya, SHOW GRANTS hanya menampilkan izin untuk akun saat ini. Untuk melihat izin semua akun, kunjungi halaman manajemen akun di Konsol PolarDB-X 1.0.