Memberikan hak istimewa pada objek database, keanggotaan role, atau izin tingkat sistem.
Sintaksis
Hak istimewa objek (tabel, view, sequence, atau program):
GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES }
[,...] | ALL [ PRIVILEGES ] }
ON tablename
TO { username | groupname | PUBLIC } [, ...]
[ WITH GRANT OPTION ]
GRANT { { INSERT | UPDATE | REFERENCES } (column [, ...]) }
[, ...]
ON tablename
TO { username | groupname | PUBLIC } [, ...]
[ WITH GRANT OPTION ]
GRANT { SELECT | ALL [ PRIVILEGES ] }
ON sequencename
TO { username | groupname | PUBLIC } [, ...]
[ WITH GRANT OPTION ]
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTION progname
( [ [ argmode ] [ argname ] argtype ] [, ...] )
TO { username | groupname | PUBLIC } [, ...]
[ WITH GRANT OPTION ]
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON PROCEDURE progname
[ ( [ [ argmode ] [ argname ] argtype ] [, ...] ) ]
TO { username | groupname | PUBLIC } [, ...]
[ WITH GRANT OPTION ]
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON PACKAGE packagename
TO { username | groupname | PUBLIC } [, ...]
[ WITH GRANT OPTION ]Keanggotaan peran:
GRANT role [, ...]
TO { username | groupname | PUBLIC } [, ...]
[ WITH ADMIN OPTION ]Hak istimewa sistem:
GRANT { CONNECT | RESOURCE | DBA } [, ...]
TO { username | groupname } [, ...]
[ WITH ADMIN OPTION ]
GRANT CREATE [ PUBLIC ] DATABASE LINK
TO { username | groupname }
GRANT DROP PUBLIC DATABASE LINK
TO { username | groupname }
GRANT EXEMPT ACCESS POLICY
TO { username | groupname }Parameter
| Parameter | Deskripsi |
|---|---|
SELECT | Mengizinkan membaca baris dari tabel, view, atau sequence. |
INSERT | Mengizinkan menyisipkan baris ke dalam tabel. |
UPDATE | Mengizinkan memperbarui baris dalam tabel. |
DELETE | Mengizinkan menghapus baris dari tabel. |
REFERENCES | Mengizinkan membuat kendala kunci asing yang mereferensi tabel atau kolom tertentu. |
EXECUTE | Mengizinkan memanggil fungsi, prosedur, atau package. |
ALL [PRIVILEGES] | Memberikan semua hak istimewa yang berlaku untuk tipe objek tersebut. PRIVILEGES bersifat opsional. |
tablename | Tabel atau view tempat hak istimewa diberikan. |
sequencename | Sequence tempat hak istimewa diberikan. |
progname | Nama fungsi atau prosedur. |
packagename | Nama package. |
username | Pengguna yang menerima hak istimewa. |
groupname | Kelompok yang menerima hak istimewa. |
PUBLIC | Memberikan hak istimewa kepada semua pengguna. |
WITH GRANT OPTION | Mengizinkan penerima untuk memberikan hak istimewa yang sama kepada pihak lain. Tidak dapat diberikan kepada PUBLIC. |
WITH ADMIN OPTION | Mengizinkan penerima untuk memberikan role tersebut kepada pengguna lain. |
CONNECT | Role bawaan yang kompatibel dengan Oracle yang mengizinkan pengguna terhubung ke database. |
RESOURCE | Role bawaan yang kompatibel dengan Oracle yang mengizinkan pengguna membuat objek database. |
DBA | Role bawaan yang kompatibel dengan Oracle dengan hak administratif penuh. |
Deskripsi
GRANT memiliki tiga varian:
Hak istimewa objek: Memberikan hak istimewa tertentu (
SELECT,INSERT,UPDATE,DELETE,REFERENCES, atauEXECUTE) pada tabel, view, sequence, fungsi, prosedur, atau package kepada pengguna, kelompok, atau semua pengguna (PUBLIC).Keanggotaan Peran: Tambahkan pengguna atau kelompok sebagai anggota suatu peran agar mereka mewarisi hak istimewa yang dimiliki peran tersebut.
Hak istimewa sistem: Memberikan role sistem yang kompatibel dengan Oracle (
CONNECT,RESOURCE,DBA) atau izin tingkat sistem tertentu, seperti membuat atau menghapus database link dan mengecualikan kebijakan akses.
Pengguna, kelompok, dan role
Di PolarDB for PostgreSQL (kompatibel dengan Oracle), pengguna dan kelompok disatukan menjadi satu tipe entitas yang disebut role:
Pengguna adalah role dengan atribut
LOGIN. Role ini dapat membuat sesi dan terhubung ke aplikasi.Kelompok adalah role tanpa atribut
LOGIN. Role ini tidak dapat membuat sesi atau terhubung ke aplikasi.
Sebuah role dapat menjadi anggota satu atau beberapa role lain, dan pengguna dapat menjadi anggota baik pengguna maupun kelompok, membentuk hierarki multi-level umum. Karena nama pengguna dan nama kelompok berbagi namespace yang sama, GRANT tidak membedakan keduanya—sintaksisnya identik untuk keduanya.
Catatan penggunaan
ALL PRIVILEGESdengan opsi grant yang tidak mencukupi: Jika Anda hanya memiliki sebagian opsi grant pada suatu objek,GRANT ALL PRIVILEGEShanya memberikan hak istimewa yang Anda miliki opsi grant-nya dan mengeluarkan peringatan untuk sisanya. Perintah ini tidak gagal sepenuhnya.Hak istimewa tingkat kolom vs. tingkat tabel: Pengguna dapat melakukan
INSERTatauUPDATEpada suatu kolom jika mereka memiliki hak istimewa tersebut baik di tingkat kolom maupun di tingkat tabel. Mencabut hak istimewa tingkat kolom tidak menghapus hak istimewa tingkat tabel yang sudah ada untuk kolom tersebut.PUBLICdanWITH GRANT OPTION: Opsi grant tidak dapat diberikan kepadaPUBLIC. Hanya role bernama yang dapat menerima opsi grant.Grant oleh non-pemilik: Jika Anda bukan pemilik suatu objek tetapi memiliki beberapa hak istimewa dengan opsi grant,
GRANTberhasil hanya untuk hak istimewa tersebut. Jika Anda sama sekali tidak memiliki opsi grant, perintah tersebut gagal.
Contoh
Memberikan hak istimewa tabel
Berikan hak SELECT dan INSERT pada tabel orders kepada pengguna alice:
GRANT SELECT, INSERT ON orders TO alice;Setelah pemberian ini, alice dapat membaca dan menyisipkan baris di orders, tetapi tidak dapat memperbarui atau menghapusnya.
Memberikan hak istimewa tingkat kolom
Berikan hak UPDATE pada kolom tertentu dari tabel employees kepada pengguna bob:
GRANT UPDATE (salary, department_id) ON employees TO bob;bob dapat memperbarui salary dan department_id, tetapi tidak kolom lainnya.
Memberikan hak dengan izin untuk memberikan kembali
Berikan hak SELECT pada tabel products kepada pengguna carol, dan izinkan dia memberikan hak yang sama kepada pihak lain:
GRANT SELECT ON products TO carol WITH GRANT OPTION;Memberikan keanggotaan role
Tambahkan pengguna dave sebagai anggota role reporting_role:
GRANT reporting_role TO dave;dave mewarisi semua hak istimewa yang dimiliki oleh reporting_role.
Memberikan role sistem
Berikan role sistem CONNECT dan RESOURCE kepada pengguna eve:
GRANT CONNECT, RESOURCE TO eve;Memberikan hak istimewa database link
Izinkan pengguna frank membuat database link publik:
GRANT CREATE PUBLIC DATABASE LINK TO frank;