Halaman ini menjelaskan hak istimewa yang dapat Anda berikan ke peran database untuk kontrol akses terperinci. Informasi ini berlaku untuk database dialek GoogleSQL dan database dialek PostgreSQL.
Untuk mempelajari peran database dan kontrol akses terperinci, lihat Ringkasan kontrol akses terperinci.
Tabel berikut menunjukkan hak istimewa kontrol akses terperinci dan objek database yang dapat diberikan hak istimewa tersebut.
| PILIH | INSERT | PERBARUI | HAPUS | JALANKAN | PENGGUNAAN | |
|---|---|---|---|---|---|---|
| Skema | ✓ | |||||
| Tabel | ✓ | ✓ | ✓ | ✓ | ||
| Kolom | ✓ | ✓ | ✓ | ✓ | ||
| Lihat | ✓ | |||||
| Aliran data perubahan | ✓ | |||||
| Fungsi baca aliran perubahan | ✓ | |||||
| Urutan | ✓ | ✓ | ||||
| Model | ✓ |
Bagian berikut memberikan detail tentang setiap hak istimewa.
SELECT
Memungkinkan 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 di semua kolom dalam tabel, termasuk kolom yang ditambahkan setelahnya. Daftar kolom tidak diizinkan untuk tampilan.
Spanner mendukung tampilan hak invoker dan tampilan hak definer. Untuk mengetahui informasi selengkapnya, lihat Ringkasan tampilan.
Jika Anda membuat tampilan dengan hak invoker, untuk mengkueri tampilan, peran atau pengguna database memerlukan hak istimewa
SELECTpada tampilan, dan juga hak istimewaSELECTpada objek pokok yang direferensikan dalam tampilan. Misalnya, asumsikan tampilanSingerNamesdibuat di tabelSingers.CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;Misalnya, peran database
myRolemenjalankan kueriSELECT * FROM SingerNames. Peran harus memiliki hak istimewaSELECTpada tabel virtual dan harus memiliki hak istimewaSELECTpada tiga kolom yang direferensikan atau pada seluruh tabelSingers.Jika Anda membuat tampilan dengan hak pendefinisi, untuk mengkueri tampilan, peran atau pengguna database hanya memerlukan hak istimewa
SELECTpada tampilan. Misalnya, asumsikan tampilanAlbumsBudgetdibuat di tabelAlbums.CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;Misalnya, peran database
Analystmenjalankan kueriSELECT * FROM AlbumsBudget. Peran hanya memerlukan hak istimewaSELECTpada tabel virtual. Akun layanan ini tidak memerlukan hak istimewaSELECTpada tiga kolom yang direferensikan atau pada tabelAlbums.Setelah memberikan
SELECTpada subset kolom untuk tabel, pengguna kontrol akses terperinci tidak dapat lagi menggunakanSELECT *pada tabel tersebut. Kueri pada tabel tersebut harus menyebutkan semua kolom yang akan disertakan.SELECTyang diberikan pada kolom yang dihasilkan tidak memberikanSELECTpada kolom dasar yang mendasarinya.Untuk tabel yang disisipkan,
SELECTyang diberikan pada tabel induk tidak akan diterapkan ke tabel turunan.Saat memberikan
SELECTpada aliran data perubahan, Anda juga harus memberikanEXECUTEpada fungsi bernilai tabel untuk aliran data perubahan. Untuk mengetahui informasi selengkapnya, lihat EXECUTE.Jika
SELECTdigunakan dengan fungsi agregat pada kolom tertentu, misalnyaSUM(col_a), peran tersebut harus memiliki hak istimewaSELECTpada kolom tersebut. Jika fungsi agregat tidak menentukan kolom apa pun, misalnyaCOUNT(*), peran tersebut harus memiliki hak istimewaSELECTpada setidaknya satu kolom dalam tabel.Saat menggunakan
SELECTdengan urutan, Anda hanya dapat melihat urutan yang izinnya Anda miliki.
Contoh penggunaan GRANT SELECT
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 dalam tabel yang ditentukan. Jika daftar kolom ditentukan, izin hanya berlaku pada kolom tersebut. Jika tidak ada daftar kolom yang ditentukan, hak istimewa akan berlaku di semua kolom dalam tabel.
Jika nama kolom ditentukan, kolom apa pun yang tidak disertakan akan mendapatkan nilai defaultnya saat penyisipan.
INSERTtidak dapat diberikan pada kolom yang dihasilkan.
Contoh penggunaan GRANT INSERT
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 untuk memperbarui baris dalam tabel yang ditentukan. Update dapat dibatasi pada subset kolom tabel. Saat Anda menggunakannya dengan urutan, peran ini memungkinkan peran memanggil fungsi get-next-sequence-value pada urutan.
Selain hak istimewa UPDATE, peran tersebut memerlukan hak istimewa SELECT di semua kolom yang dikueri. Kolom yang dikueri mencakup kolom dalam klausa WHERE.
UPDATE tidak dapat diberikan pada kolom yang dihasilkan.
Contoh penggunaan GRANT UPDATE
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.
DELETEtidak dapat diberikan di tingkat kolom.Peran ini juga memerlukan
SELECTpada kolom apa pun yang mungkin disertakan dalam klausaWHEREkueri.Untuk tabel yang disisipkan dalam database dialek GoogleSQL, hak istimewa
DELETEhanya diperlukan pada tabel induk. Jika tabel turunan menentukanON DELETE CASCADE, baris dari tabel turunan akan dihapus meskipun tanpa hak istimewaDELETEpada tabel turunan.
Contoh penggunaan GRANT DELETE
GoogleSQL
GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;
PostgreSQL
GRANT DELETE ON TABLE employees, contractors TO hr_admin;
EXECUTE
Saat memberikan SELECT pada aliran perubahan, Anda juga harus memberikan EXECUTE pada fungsi baca untuk aliran perubahan. Untuk mengetahui informasi selengkapnya, lihat
Fungsi baca aliran data perubahan dan sintaksis kueri.
Saat Anda menggunakannya dengan model, peran ini memungkinkan penggunaan model dalam fungsi machine learning.
Contoh penggunaan GRANT EXECUTE
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;
PENGGUNAAN
Saat Anda memberikan USAGE ke skema bernama, hak istimewa untuk mengakses objek yang terdapat dalam skema bernama akan diberikan. Hak istimewa USAGE diberikan, secara default, ke skema default.
Langkah berikutnya
- Mengonfigurasi kontrol akses yang sangat terperinci
- Ringkasan kontrol akses terperinci
- Pernyataan GRANT dan REVOKE (database dialek GoogleSQL)
- Pernyataan GRANT dan REVOKE (database dialek PostgreSQL)