Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak napisać politykę w Oracle SQL, która ogranicza dostęp do tabeli dla osób niebędących właścicielami?

Nie musisz nic z tym robić.

Tabele (i przechowywane w nich dane) są własnością użytkownika A. Nikt nie może ich zobaczyć chyba, użytkownik A nadaje określone uprawnienia innym użytkownikom, takim jak użytkownik B.

Można to zrobić, przyznając uprawnienie select, tj.

grant select on my_table to user_B;

a użytkownik B pobierałby dane jako

select * from user_A.my_table;

Użytkownik B nie będzie mógł modyfikować danych (ponieważ nie przyznano mu możliwości wstawiania/aktualizowania/usuwania).

Ponadto Ty (jako użytkownik A) możesz utworzyć widok który wybiera tylko część danych, np.

create view v_my_table as 
  select * 
  from my_table
  where score > 4;

grant select on v_my_table to user_B;

W ten sposób użytkownik B zobaczy tylko wiersze, których wynik jest większy niż 4.

Jeśli istnieje użytkownik C, nie widzi absolutnie niczego. Jeśli chcesz, aby wyświetlał jakieś dane, zrobiłbyś to, co już zrobiłeś z użytkownikiem B - przyznaj pewne uprawnienia.

Istnieje jednak opcja, aby umożliwić użytkownikowi B „przekazywanie” uprawnień innym użytkownikom — użyjesz opcji with grant option , np.

grant select on my_table to user_B with grant option;

Umożliwiłoby to użytkownikowi B przyznanie wyboru innym użytkownikom, np.

grant select on user_A.my_table to user_C;

Na koniec (mówiąc o tej odpowiedzi), jeśli jest wielu użytkowników, którym chciałbyś przyznać takie uprawnienia, możesz utworzyć role . Następnie przyznałbyś uprawnienia do roli i przyznał rolę innym użytkownikom. Pozwala na modyfikację ról w zależności od Twoich (i innych użytkowników) życzeń.

create role my_role;
grant select on my_table to my_role;

Na przykład na początek możesz przyznać select do my_role , a następnie przyznaj my_role dla użytkowników B, C i D.

grant my_role to user_B;
grant my_role to user_C;

Później możesz przyznać insert do my_role

grant insert on my_table to my_role;

i wszyscy użytkownicy, którym przyznano my_role automatycznie będzie w stanie wstawić wiersze do my_table użytkownika 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. Błąd z transakcją JPA podczas wywoływania procedury składowanej

  2. Grupowanie SQL na interwale czasowym

  3. Jak wybrać 200 rekordów dla każdej iteracji 'for loop' w Oracle?

  4. Oracle Query - Wybór rekordów przy użyciu danych kolumn z pierwszej tabeli

  5. Zachowanie rownum Oracle z funkcją mod