Halaman ini menjelaskan hak istimewa yang dapat Anda berikan kepada peran database untuk kontrol akses yang mendetail.
Untuk mempelajari peran database dan kontrol akses yang terperinci, lihat Tentang kontrol akses yang terperinci.
Tabel berikut menunjukkan hak istimewa kontrol akses yang terperinci dan objek database yang dapat memberikannya.
SELECT | INSERT | PERBARUI | HAPUS | JALANKAN | |
---|---|---|---|---|---|
Tabel | ✓ | ✓ | ✓ | ✓ | |
Kolom | ✓ | ✓ | ✓ | ||
Lihat | ✓ | ||||
Ubah streaming | ✓ | ||||
Mengubah fungsi baca aliran data | ✓ | ||||
Urutan | ✓ | ✓ | |||
Model | ✓ |
Bagian berikut memberikan detail tentang setiap hak istimewa.
SELECT
Mengizinkan peran untuk membaca atau membuat kueri dari tabel, tampilan, aliran data perubahan, urutan, atau model.
Jika daftar kolom ditentukan untuk tabel, hak istimewa hanya berlaku pada kolom tersebut. Jika tidak ada daftar kolom yang ditentukan, hak istimewa akan berlaku pada semua kolom dalam tabel, termasuk kolom yang ditambahkan setelahnya. Daftar kolom tidak diizinkan untuk tampilan.
Spanner mendukung tampilan hak invoker dan tampilan hak pendefinisi. Untuk informasi lebih lanjut, lihat Tentang tampilan.
Jika Anda membuat tampilan dengan hak invoker, untuk membuat kueri tampilan, peran database atau pengguna memerlukan hak istimewa
SELECT
pada tampilan, serta hak istimewaSELECT
pada objek dasar yang dirujuk dalam tampilan. Misalnya, anggaplah tampilanSingerNames
dibuat di tabelSingers
.CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
Misalkan peran database
myRole
menjalankan kueriSELECT * FROM SingerNames
. Peran harus memiliki hak istimewaSELECT
di tampilan dan harus memiliki hak istimewaSELECT
di tiga kolom yang direferensikan atau di seluruh tabelSingers
.Jika Anda membuat tampilan dengan hak pendefinisi, untuk membuat kueri tampilan, peran database atau pengguna hanya memerlukan hak istimewa
SELECT
pada tampilan. Misalnya, anggaplah tampilanAlbumsBudget
dibuat di tabelAlbums
.CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;
Misalkan peran database
Analyst
menjalankan kueriSELECT * FROM AlbumsBudget
. Peran ini hanya memerlukan hak istimewaSELECT
di tampilan. Class ini tidak memerlukan hak istimewaSELECT
pada tiga kolom yang direferensikan atau pada tabelAlbums
.Setelah memberikan
SELECT
pada subset kolom untuk tabel, pengguna FGAC tidak dapat lagi menggunakanSELECT *
pada tabel tersebut. Kueri pada tabel tersebut harus memberi nama semua kolom yang akan disertakan.SELECT
yang diberikan pada kolom yang dihasilkan tidak memberikanSELECT
pada kolom dasar yang mendasarinya.Untuk tabel yang disisipkan,
SELECT
yang diberikan pada tabel induk tidak diterapkan ke tabel turunan.Jika Anda memberikan
SELECT
pada aliran data perubahan, Anda juga harus memberikanEXECUTE
pada fungsi yang bernilai tabel untuk aliran data perubahan. Untuk informasi selengkapnya, lihat MEMEKSIKAN.Jika
SELECT
digunakan dengan fungsi agregat pada kolom tertentu, misalnyaSUM(col_a)
, peran tersebut harus memiliki hak istimewaSELECT
di kolom tersebut. Jika fungsi agregat tidak menentukan kolom apa pun, misalnyaCOUNT(*)
, peran tersebut harus memiliki hak istimewaSELECT
setidaknya di satu kolom dalam tabel.Jika menggunakan
SELECT
dengan suatu urutan, Anda hanya dapat melihat urutan yang memiliki hak istimewa untuk melihatnya.
Contoh
GoogleSQL
GRANT SELECT ON TABLE employees TO ROLE hr_director; GRANT SELECT ON TABLE customers, orders, items TO ROLE account_mgr; GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO ROLE hr_manager; GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO ROLE hr_rep; GRANT SELECT ON VIEW orders_view TO ROLE hr_manager; GRANT SELECT ON CHANGE STREAM ordersChangeStream TO ROLE hr_analyst; GRANT SELECT ON SEQUENCE sequence_name TO ROLE role_name;
PostgreSQL
GRANT SELECT ON TABLE employees TO hr_director; GRANT SELECT ON TABLE customers, orders, items TO account_mgr; GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO hr_manager; GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO hr_rep; GRANT SELECT ON TABLE orders_view TO hr_manager; // orders_view is an invoker rights view GRANT SELECT ON CHANGE STREAM orders_change_stream TO hr_analyst; GRANT SELECT ON SEQUENCE sequence_name TO hr_package;
INSERT
Memungkinkan peran menyisipkan baris ke tabel yang ditentukan. Jika daftar kolom telah ditentukan, izin hanya berlaku untuk kolom tersebut. Jika tidak ada daftar kolom yang ditentukan, hak istimewa akan berlaku pada semua kolom dalam tabel.
Jika nama kolom ditentukan, kolom yang tidak disertakan akan mendapatkan nilai defaultnya saat penyisipan.
INSERT
tidak dapat diberikan pada kolom yang dibuat.
Contoh
GoogleSQL
GRANT INSERT ON TABLE employees, contractors TO ROLE hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO ROLE hr_rep;
PostgreSQL
GRANT INSERT ON TABLE employees, contractors TO hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO hr_rep;
UPDATE
Mengizinkan peran memperbarui baris di tabel yang ditentukan. Update dapat
dibatasi untuk subset kolom tabel. Jika Anda menggunakannya dengan urutan, peran ini akan memungkinkan peran untuk memanggil fungsi get-next-sequence-value
pada urutan.
Selain hak istimewa UPDATE
, peran tersebut memerlukan
hak istimewa SELECT
di semua kolom utama dan semua kolom yang dikueri. Kolom yang dikueri mencakup kolom dalam klausa WHERE
dan kolom yang digunakan untuk menghitung nilai baru dari kolom yang diperbarui dan kolom yang dihasilkan.
UPDATE
tidak dapat diberikan pada kolom yang dibuat.
Contoh
GoogleSQL
GRANT UPDATE ON TABLE employees, contractors TO ROLE hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO ROLE hr_rep;
PostgreSQL
GRANT UPDATE ON TABLE employees, contractors TO hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO hr_rep;
DELETE
Memungkinkan peran menghapus baris dari tabel yang ditentukan.
DELETE
tidak dapat diberikan di tingkat kolom.Peran ini juga memerlukan
SELECT
di semua kolom utama dan kolom apa pun yang mungkin disertakan dalam klausaWHERE
kueri.Untuk tabel sisipan dalam database dialek GoogleSQL, hak istimewa
DELETE
hanya diperlukan di tabel induk. Jika tabel turunan menentukanON DELETE CASCADE
, baris dari tabel turunan akan dihapus meskipun tanpa hak istimewaDELETE
pada tabel turunan.
Contoh
GoogleSQL
GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;
PostgreSQL
GRANT DELETE ON TABLE employees, contractors TO hr_admin;
EXECUTE
Jika memberikan SELECT
pada aliran perubahan, Anda juga harus memberikan EXECUTE
pada fungsi baca untuk aliran data perubahan. Untuk mengetahui informasi selengkapnya, lihat
Mengubah fungsi pembacaan aliran data dan sintaksis kueri.
Saat Anda menggunakan model ini dengan model, peran untuk menggunakan model dalam fungsi machine learning akan diizinkan.
Contoh
Contoh berikut menunjukkan cara memberikan EXECUTE
pada fungsi baca untuk aliran data perubahan bernama my_change_stream
.
GoogleSQL
GRANT EXECUTE ON TABLE FUNCTION READ_my_change_stream TO ROLE hr_analyst;
PostgreSQL
GRANT EXECUTE ON FUNCTION spanner.read_json_my_change_stream TO hr_analyst;
Langkah selanjutnya
Untuk informasi selengkapnya, lihat:
- Mengonfigurasi kontrol akses yang terperinci
- Tentang kontrol akses yang terperinci
- Pernyataan GRANT dan REVOKE (database dialek GoogleSQL)
- Pernyataan GRANT dan REVOKE (database dialek PostgreSQL)