Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara menulis kebijakan di Oracle SQL yang membatasi akses ke non-pemilik untuk sebuah tabel?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penyembunyian angka &nls_parameter

  2. Bagaimana cara mengubah nilai variabel global dalam paket PL/SQL secara dinamis?

  3. Bagaimana cara melihat batasan tabel misalnya apakah itu kunci utama atau kunci unik?

  4. ORA-01792:jumlah maksimum kolom dalam tabel atau tampilan adalah 1000 kesalahan saat menggunakan WITH di sql

  5. Oracle sql - temukan item umum yang dibeli antara dua pengguna