Anda tidak perlu melakukan apa-apa.
Tabel (dan data yang disimpan di dalamnya) dimiliki oleh pengguna A. Tidak ada yang bisa melihatnya kecuali pengguna A memberikan hak istimewa tertentu kepada pengguna lain, seperti pengguna B.
Itu dapat dilakukan dengan memberikan hak istimewa pilih, yaitu
grant select on my_table to user_B;
dan pengguna B kemudian akan mengambil data sebagai
select * from user_A.my_table;
Pengguna B tidak akan dapat mengubah data (karena tidak diberikan insert/update/delete).
Selanjutnya, Anda (sebagai pengguna A) dapat membuat tampilan yang hanya memilih sebagian data, mis.
create view v_my_table as
select *
from my_table
where score > 4;
grant select on v_my_table to user_B;
Dengan melakukannya, pengguna B hanya akan melihat baris yang skornya lebih besar dari 4.
Jika ada pengguna C, itu sama sekali tidak dapat melihat apa pun. Jika Anda ingin melihat beberapa data, Anda akan melakukan apa yang sudah Anda lakukan dengan pengguna B - berikan hak istimewa tertentu.
Namun, ada opsi untuk mengizinkan pengguna B "meneruskan" hak istimewa ke pengguna lain - Anda akan menggunakan with grant option
, misalnya
grant select on my_table to user_B with grant option;
Itu akan memungkinkan pengguna B untuk memberikan pilihan kepada pengguna lain, mis.
grant select on user_A.my_table to user_C;
Terakhir (berbicara tentang jawaban ini), jika ada banyak pengguna yang ingin Anda berikan hak istimewa seperti itu, Anda dapat membuat peran . Kemudian Anda akan memberikan hak istimewa ke peran, dan memberikan peran ke pengguna lain. Ini memungkinkan Anda untuk mengubah peran tergantung pada keinginan Anda (dan pengguna lain).
create role my_role;
grant select on my_table to my_role;
Misalnya, untuk permulaan, Anda dapat memberikan select
ke my_role
, lalu berikan my_role
untuk pengguna B, C dan D.
grant my_role to user_B;
grant my_role to user_C;
Nanti, Anda dapat memberikan insert
ke my_role
grant insert on my_table to my_role;
dan semua pengguna diberikan my_role
akan secara otomatis dapat menyisipkan baris ke my_table pengguna A.