Hak istimewa kontrol akses yang sangat terperinci

Halaman ini menjelaskan hak istimewa yang dapat Anda berikan ke peran database untuk kontrol akses yang sangat 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 istimewanya.

PILIH INSERT PERBARUI HAPUS JALANKAN PENGGUNAAN
Skema
Tabel
Kolom
Lihat
Ubah aliran data
Fungsi baca aliran perubahan
Urutan
Model

Bagian berikut memberikan detail tentang setiap hak istimewa.

SELECT

Mengizinkan peran membaca atau membuat kueri dari tabel, tampilan, aliran 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 pemanggil dan tampilan hak penentu. Untuk mengetahui informasi selengkapnya, lihat Ringkasan tampilan.

    Jika Anda membuat tampilan dengan hak pemanggil, untuk membuat kueri tampilan, peran atau pengguna database memerlukan hak istimewa SELECT pada tampilan, dan juga hak istimewa SELECT pada objek pokok yang dirujuk dalam tampilan. Misalnya, anggap tampilan SingerNames dibuat di tabel Singers.

    CREATE VIEW SingerNames SQL SECURITY INVOKER AS
    SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
    

    Misalkan peran database myRole menjalankan kueri SELECT * FROM SingerNames. Peran harus memiliki hak istimewa SELECT pada tampilan dan harus memiliki hak istimewa SELECT pada tiga kolom yang dirujuk atau pada seluruh tabel Singers.

    Jika Anda membuat tampilan dengan hak penentu, untuk membuat kueri tampilan, peran atau pengguna database hanya memerlukan hak istimewa SELECT pada tampilan. Misalnya, anggap tampilan AlbumsBudget dibuat di tabel Albums.

    CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS
    SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;
    

    Misalkan peran database Analyst menjalankan kueri SELECT * FROM AlbumsBudget. Peran hanya memerlukan hak istimewa SELECT pada tampilan. Pengguna tidak memerlukan hak istimewa SELECT pada tiga kolom yang dirujuk atau pada tabel Albums.

  • Setelah memberikan SELECT pada subset kolom untuk tabel, pengguna FGAC tidak dapat lagi menggunakan SELECT * pada tabel tersebut. Kueri pada tabel tersebut harus menyebutkan semua kolom yang akan disertakan.

  • SELECT yang diberikan pada kolom yang dihasilkan tidak memberikan SELECT pada kolom dasar pokok.

  • Untuk tabel yang disisipkan, hak istimewa SELECT yang diberikan pada tabel induk tidak diturunkan ke tabel turunan.

  • Saat memberikan SELECT pada aliran perubahan, Anda juga harus memberikan EXECUTE pada fungsi bernilai tabel untuk aliran perubahan. Untuk mengetahui informasi selengkapnya, lihat EXECUTE.

  • Jika SELECT digunakan dengan fungsi agregat pada kolom tertentu, misalnya SUM(col_a), peran harus memiliki hak istimewa SELECT pada kolom tersebut. Jika fungsi agregat tidak menentukan kolom apa pun, misalnya COUNT(*), peran harus memiliki hak istimewa SELECT pada setidaknya satu kolom dalam tabel.

  • Saat menggunakan SELECT dengan urutan, Anda hanya dapat melihat urutan yang memiliki hak istimewa untuk dilihat.

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

Mengizinkan peran untuk 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 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 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. Pembaruan dapat dibatasi ke subset kolom tabel. Saat Anda menggunakannya dengan urutan, peran tersebut dapat memanggil fungsi get-next-sequence-value pada urutan.

Selain hak istimewa UPDATE, peran 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

Mengizinkan peran menghapus baris dari tabel yang ditentukan.

  • DELETE tidak dapat diberikan di tingkat kolom.

  • Peran juga memerlukan SELECT pada kolom apa pun yang mungkin disertakan dalam klausa WHERE kueri.

  • Untuk tabel yang disisipkan dalam database dialek GoogleSQL, hak istimewa DELETE hanya diperlukan pada tabel induk. Jika tabel turunan menentukan ON DELETE CASCADE, baris dari tabel turunan akan dihapus meskipun tanpa hak istimewa DELETE pada 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 perubahan dan sintaksis kueri.

Saat Anda menggunakannya dengan model, peran tersebut dapat menggunakan model dalam fungsi machine learning.

Contoh penggunaan GRANT EXECUTE

Contoh berikut menunjukkan cara memberikan EXECUTE pada fungsi baca untuk aliran 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, hal ini memberikan hak istimewa untuk mengakses objek yang ada dalam skema bernama. Hak istimewa USAGE diberikan, secara default, ke skema default.

Langkah berikutnya