全部产品
Search
文档中心

PolarDB:Mengelola akun dan izin

更新时间:Jul 02, 2025

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 juga easydb.

  • Nama akun hanya-baca adalah nama database dengan akhiran _RO. Contohnya, jika nama database adalah easydb, maka nama akun hanya-bacanya adalah easydb_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.

Catatan

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 akun david@'30.9.1%.234' ada di DRDS dan nama pengguna david digunakan untuk masuk ke host 30.9.127.xxx, akun logon adalah david@'30.9.12_.xxx'.

  • Setelah Virtual Private Cloud (VPC) diaktifkan, alamat IP host berubah.

    Penting

    Untuk 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.

    Catatan

    Jika Anda ingin menjalankan pernyataan SQL, perhatikan batasan berikut:

    1. Hanya akun administrator yang dapat digunakan untuk membuat pengguna dan memberikan izin kepada mereka.

    2. 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 pernyataan SELECT * 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 pernyataan INSERT 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'
    }
                
    Catatan

    Jika 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_level         
    • Hapus 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;       
      Catatan

      GRANT 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;       
Catatan

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.