Metode untuk mengelola akun dan izin dalam Distributed Relational Database Service (PolarDB-X) serupa dengan MySQL. DRDS mendukung pernyataan seperti GRANT, REVOKE, SHOW GRANTS, CREATE USER, DROP USER, dan SET PASSWORD.
Akun
Account description
Nama akun terdiri dari nama pengguna dan nama host, dengan format username@'host'. Jika dua akun memiliki nama pengguna yang sama tetapi nama host berbeda, mereka dianggap sebagai akun yang berbeda. Contohnya, lily@30.9.73.96 dan lily@30.9.73.100 adalah dua akun yang berbeda dengan kata sandi dan izin yang mungkin berbeda.
Setelah database dibuat di konsol PolarDB-X, sistem secara otomatis membuat dua akun sistem untuk database tersebut: akun administrator dan akun hanya-baca. Ini adalah akun bawaan yang tidak dapat dihapus atau dimodifikasi izinnya.
Nama akun administrator sama dengan nama database. Contohnya, jika nama database adalah
easydb, maka nama akun administratornya jugaeasydb.Nama akun hanya-baca adalah nama database dengan akhiran
_RO. Contohnya, jika nama database adalaheasydb, maka nama akun hanya-bacanya adalaheasydb_RO.
Sebagai contoh, dua database dibuat: dreamdb dan andordb. Database dreamdb memiliki akun administrator bernama dreamdb dan akun hanya-baca bernama dreamdb_RO. Database andordb memiliki akun administrator bernama andordb dan akun hanya-baca bernama andordb_RO.
Akun yang dibuat dengan menjalankan pernyataan CREATE USER di PolarDB-X hanya ada di PolarDB-X. Akun ini tidak dapat digunakan di ApsaraDB RDS, sehingga tidak disinkronkan ke ApsaraDB RDS.
Account permissions
Akun administrator memiliki izin penuh.
Hanya akun administrator yang dapat digunakan untuk membuat akun lain dan memberikan izin kepada akun yang dibuat.
Akun administrator terikat pada database tertentu dan tidak memiliki izin pada database lain. Akun administrator hanya dapat digunakan untuk mengakses database yang terikat padanya. Anda tidak dapat menggunakan akun administrator untuk memberikan izin pada database lain kepada akun lain. Contohnya, akun administrator easydb hanya dapat digunakan untuk terhubung ke database easydb dan memberikan izin hanya pada database easydb atau tabel dalam database easydb kepada akun lain.
Akun hanya-baca hanya memiliki izin SELECT.
Naming conventions
Nama akun bersifat case-sensitive.
Nama akun harus terdiri dari 4 hingga 20 karakter.
Nama akun harus dimulai dengan huruf.
Nama akun dapat berisi huruf dan angka.
Password complexity requirements
Kata sandi harus terdiri dari 6 hingga 20 karakter.
Kata sandi dapat berisi huruf, angka, dan karakter khusus berikut: @#$%^&+=
Hostname matching rules
Nama host harus merupakan nilai yang mewakili satu atau lebih alamat IP. Nama host dapat berisi garis bawah (
_) dan wildcard (%). Garis bawah (_) mewakili satu karakter, sedangkan wildcard (%) mewakili nol atau lebih karakter. Nama host yang berisi wildcard harus diletakkan dalam tanda kutip tunggal ('), seperti lily@'30.9.%.%' dan david@'%'.Jika dua akun di DRDS cocok dengan pengguna logon di host, akun dengan nama host yang memiliki awalan lebih panjang akan menjadi akun logon. Awalan nama host adalah segmen IP yang mendahului wildcard dalam alamat IP host. Contohnya, jika akun
david@'30.9.12_.xxx'dan akundavid@'30.9.1%.234'ada di DRDS dan nama pengguna david digunakan untuk masuk ke host30.9.127.xxx, akun logon adalahdavid@'30.9.12_.xxx'.Setelah Virtual Private Cloud (VPC) diaktifkan, alamat IP host berubah.
PentingUntuk mencegah konfigurasi akun dan izin yang tidak valid, kami menyarankan Anda menetapkan nama host menjadi '%' untuk mencocokkan semua alamat IP.
Izin
Support for permissions of different levels
Izin tingkat database didukung.
Izin tingkat tabel didukung.
Izin global tidak didukung.
Izin tingkat kolom tidak didukung.
Izin tingkat subprogram tidak didukung.
Permission description
Delapan izin dasar tabel didukung: CREATE, DROP, ALTER, INDEX, INSERT, DELETE, UPDATE, dan SELECT.
Untuk menjalankan pernyataan TRUNCATE pada tabel, Anda harus memiliki izin DROP pada tabel tersebut.
Untuk menjalankan pernyataan REPLACE pada tabel, Anda harus memiliki izin INSERT dan DELETE pada tabel tersebut.
Untuk menjalankan pernyataan CREATE INDEX dan DROP INDEX, Anda harus memiliki izin INDEX pada tabel tersebut.
Untuk menjalankan pernyataan CREATE SEQUENCE, Anda harus memiliki izin CREATE tingkat database.
Untuk menjalankan pernyataan DROP SEQUENCE, Anda harus memiliki izin DROP tingkat database.
Untuk menjalankan pernyataan ALTER SEQUENCE, Anda harus memiliki izin ALTER tingkat database.
Untuk menjalankan pernyataan INSERT ON DUPLICATE UPDATE pada tabel, Anda harus memiliki izin INSERT dan UPDATE pada tabel tersebut.
Permission rules
Izin terikat pada akun (username@'host') bukan pada nama pengguna (username).
Saat memberikan izin pada tabel kepada akun, sistem memeriksa apakah tabel tersebut ada. Jika tabel tidak ada, kesalahan akan dilaporkan.
Berikut adalah daftar izin akun database berdasarkan level dalam urutan menurun: izin global, izin tingkat database, izin tingkat tabel, dan izin tingkat kolom. Izin global tidak didukung.
Izin tingkat yang lebih tinggi yang diberikan akan menimpa izin tingkat yang lebih rendah. Jika Anda menghapus izin tingkat yang lebih tinggi, izin tingkat yang lebih rendah juga akan dihapus.
Izin USAGE tidak didukung.
Grant permissions on multiple databases to an account
Untuk PolarDB-X V5.3.6 atau yang lebih baru, metode berikut dapat digunakan untuk memberikan izin pada beberapa database kepada satu akun:
Di konsol Alibaba Cloud PolarDB-X, buka halaman manajemen akun, buat akun, dan berikan izin yang diperlukan kepada akun tersebut. Kami menyarankan Anda menggunakan metode ini.
Jalankan pernyataan CREATE USER untuk membuat akun, kemudian jalankan pernyataan GRANT untuk memberikan izin yang diperlukan kepada akun tersebut.
CatatanJika Anda ingin menjalankan pernyataan SQL, perhatikan batasan berikut:
Hanya akun administrator yang dapat digunakan untuk membuat pengguna dan memberikan izin kepada mereka.
Akun administrator hanya dapat memberikan izin pada database yang terikat pada akun tersebut kepada akun lain. Contohnya, Anda membuat akun bernama new_user@'%' menggunakan akun administrator Database A dan ingin memberikan izin pada Database A dan Database B kepada new_user. Untuk memenuhi permintaan ini, Anda harus menggunakan akun administrator Database A untuk memberikan izin pada Database A kepada new_user dan menggunakan akun administrator Database B untuk memberikan izin pada Database B kepada new_user.
Use an account granted permissions on multiple databases
DRDS V5.3.6 atau yang lebih baru memungkinkan Anda memberikan izin pada beberapa database kepada satu akun. Contohnya, jika akun bernama new_user@’%’ memiliki izin SELECT dan INSERT pada Database A dan Database B, perhatikan batasan berikut saat menggunakan akun ini:
Jika Anda masuk ke Database A menggunakan akun tersebut dan ingin menanyakan data di Database B, jalankan pernyataan
use B; SELECT * FROM table_in_B;bukan pernyataanSELECT * FROM B.table_in_B;. Hal ini karena kueri lintas-database tidak didukung.Jika Anda masuk ke Database A menggunakan akun tersebut dan ingin menulis data ke Database B, jalankan pernyataan
use B; INSERT INTO table_in_B VALUES('value');, bukan pernyataanINSERT INTO B.table_in_B VALUES('value');. Hal ini karena penyisipan data lintas-database tidak didukung.Batasan yang sama juga berlaku untuk pernyataan SQL lainnya.
Pernyataan terkait
CREATE USER used to create an account
Sintaksis
CREATE USER user_specification [, user_specification] ... user_specification: user [ auth_option ] auth_option: IDENTIFIED BY 'auth#string'Contoh
Buat akun bernama lily@30.9.73.96. Kata sandi akun adalah 123456. lily adalah nama pengguna. Akun ini hanya dapat digunakan untuk masuk ke database Anda dari host dengan alamat IP 30.9.73.96.
CREATE USER lily@30.9.73.96 IDENTIFIED BY '123456';Buat akun bernama david@'%'. Akun ini tidak memiliki kata sandi. david adalah nama pengguna. Akun ini dapat digunakan untuk masuk ke database Anda dari semua host.
CREATE USER david@'%';
DROP USER used to delete an account
Sintaksis
DROP USER user [, user] ...Contoh
Hapus akun lily@30.9.73.96.
DROP USER lily@30.9.73.96;
SET PASSWORD used to change the password of an account
Sintaksis
SET PASSWORD FOR user = password_option password_option: { PASSWORD('auth_string') }Contoh
Ubah kata sandi akun lily@30.9.73.96 menjadi 123456.
SET PASSWORD FOR lily@30.9.73.96 = PASSWORD('123456')
GRANT used to grant permissions to an account
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 [ auth_option ] auth_option: { IDENTIFIED BY 'auth#string' }CatatanJika akun yang ditentukan dalam pernyataan GRANT tidak ada dan klausa IDENTIFIED BY tidak digunakan, pesan kesalahan akan dikembalikan. Pesan kesalahan menunjukkan bahwa akun tidak ada. Jika akun yang ditentukan dalam pernyataan GRANT tidak ada tetapi klausa IDENTIFIED BY digunakan, akun yang ditentukan akan dibuat, dan izin diberikan.
Contoh
Buat akun bernama david@'%' untuk database easydb. david adalah nama pengguna. Akun ini dapat digunakan untuk masuk ke database easydb dari semua host dan memiliki izin penuh pada database easydb.
#Metode 1: Jalankan pernyataan untuk membuat akun, dan kemudian jalankan pernyataan lain untuk memberikan izin kepada akun. CREATE USER david@'%' IDENTIFIED BY 'your#password'; GRANT ALL PRIVILEGES ON easydb.* to david@'%'; #Metode 2: Jalankan hanya satu pernyataan untuk membuat akun dan memberikan izin kepada akun. GRANT ALL PRIVILEGES ON easydb.* to david@'%' IDENTIFIED BY 'your#password';Buat akun bernama hanson@'%' untuk database easydb. hanson adalah nama pengguna. Akun ini dapat digunakan untuk masuk ke database easydb dari semua host dan memiliki izin penuh pada tabel easydb.employees.
GRANT ALL PRIVILEGES ON easydb.employees to hanson@'%' IDENTIFIED BY 'your#password';Buat akun bernama hanson@192.168.3.10 untuk database easydb. hanson adalah nama pengguna. Akun ini hanya dapat digunakan untuk masuk ke database easydb dari 192.168.3.10 dan memiliki izin INSERT dan SELECT pada tabel easydb.emp.
GRANT INSERT,SELECT ON easydb.emp to hanson@'192.168.3.10' IDENTIFIED BY 'your#password';Buat akun hanya-baca bernama actro@'%' untuk database easydb. actro adalah nama pengguna. Akun ini dapat digunakan untuk masuk ke database easydb dari semua host.
GRANT SELECT ON easydb.* to actro@'%' IDENTIFIED BY 'your#password';
REVOKE used to revoke permissions
Sintaksis
Hapus izin pada tingkat tertentu dari akun. Tingkat izin ditentukan oleh priv_level.
REVOKE priv_type [, priv_type] ... ON priv_levelHapus izin pada tingkat database dan tingkat tabel dari akun.
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
Contoh
Hapus izin CREATE, DROP, dan INDEX pada tabel easydb.emp dari akun hanson@'%'.
REVOKE CREATE,DROP,INDEX ON easydb.emp FROM hanson@'%';Hapus semua izin dari akun lily@30.9.73.96.
REVOKE ALL PRIVILEGES,GRANT OPTION FROM lily@30.9.73.96;CatatanGRANT OPTION harus ditambahkan ke pernyataan sebelumnya untuk memastikan kompatibilitas dengan MySQL.
SHOW GRANTS used to query granted permissions
Sintaksis
SHOW GRANTS[ FOR user@host];Contoh
SHOW GRANTS FOR user1@host;
Di DRDS V5.3.6 dan yang lebih baru, pernyataan SHOW GRANTS dapat dijalankan untuk menanyakan izin hanya pada akun saat ini. Anda dapat masuk ke konsol PolarDB-X untuk melihat informasi tentang semua akun dan izin.