Oracle
 sql >> Database >  >> RDS >> Oracle

Come scrivere una politica in Oracle SQL che limita l'accesso ai non proprietari per una tabella?

Non devi fare assolutamente nulla al riguardo.

Le tabelle (e i dati memorizzati all'interno) sono di proprietà dell'utente A. Nessuno può vederle a meno che l'utente A concede determinati privilegi ad altri utenti, come l'utente B.

Ciò può essere fatto concedendo il privilegio di selezione, ad es.

grant select on my_table to user_B;

e l'utente B recupererebbe i dati come

select * from user_A.my_table;

L'utente B non potrà modificare i dati (poiché non gli è stato concesso di inserire/aggiornare/eliminare).

Inoltre, tu (come utente A) puoi creare una vista che seleziona solo una parte dei dati, ad es.

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

grant select on v_my_table to user_B;

In questo modo, l'utente B vedrà solo le righe il cui punteggio è maggiore di 4.

Se c'è l'utente C, non può vedere assolutamente nulla. Se desideri che visualizzi alcuni dati, faresti quello che hai già fatto con l'utente B:concedere determinati privilegi.

Tuttavia, c'è un'opzione per consentire all'utente B di "inoltrare" i privilegi ad altri utenti:useresti with grant option , ad es.

grant select on my_table to user_B with grant option;

Ciò consentirebbe all'utente B di concedere la selezione ad altri utenti, ad esempio

grant select on user_A.my_table to user_C;

Infine (parlando di questa risposta), se ci sono molti utenti a cui vorresti concedere tali privilegi, puoi creare ruoli . Quindi concederesti i privilegi a un ruolo e concederesti il ​​ruolo a un altro utente. Ti consente di modificare i ruoli a seconda dei tuoi desideri (e degli altri utenti).

create role my_role;
grant select on my_table to my_role;

Ad esempio, per iniziare, potresti concedere select a my_role , quindi concedi my_role agli utenti B, C e D.

grant my_role to user_B;
grant my_role to user_C;

Successivamente, puoi concedere insert a my_role

grant insert on my_table to my_role;

e tutti gli utenti hanno concesso my_role sarebbe automaticamente in grado di inserire righe nella my_table dell'utente A.