sql >> Database >  >> RDS >> Oracle

Hoe schrijf je een beleid in Oracle SQL dat de toegang tot niet-eigenaren voor een tabel beperkt?

U hoeft er niets aan te doen.

Tabellen (en gegevens die erin zijn opgeslagen) zijn eigendom van gebruiker A. Niemand kan het zien tenzij gebruiker A kent bepaalde rechten toe aan andere gebruikers, zoals gebruiker B.

Dat kan worden gedaan door select privilege toe te kennen, d.w.z.

grant select on my_table to user_B;

en gebruiker B zou dan gegevens ophalen als

select * from user_A.my_table;

Gebruiker B kan geen gegevens wijzigen (omdat er geen toestemming is gegeven voor invoegen/bijwerken/verwijderen).

Verder kunt u (als gebruiker A) een weergave . maken die slechts een deel van de gegevens selecteert, bijv.

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

grant select on v_my_table to user_B;

Als u dit doet, ziet gebruiker B alleen rijen waarvan de score hoger is dan 4.

Als er gebruiker C is, kan deze absoluut niets zien. Als je wilt dat het wat gegevens ziet, zou je doen wat je al deed met gebruiker B - bepaalde privileges verlenen.

Er is echter een optie om gebruiker B rechten te laten "doorsturen" naar andere gebruikers - u zou with grant option gebruiken , bijv.

grant select on my_table to user_B with grant option;

Dat zou gebruiker B in staat stellen selectie toe te kennen aan andere gebruikers, bijvoorbeeld

grant select on user_A.my_table to user_C;

Ten slotte (over dit antwoord gesproken), als er veel gebruikers zijn aan wie u dergelijke rechten wilt verlenen, kunt u rollen maken . Dan zou je privileges toekennen aan een rol, en een rol toekennen aan een andere gebruiker(s). Hiermee kunt u rollen aanpassen aan uw (en andere gebruikers) wensen.

create role my_role;
grant select on my_table to my_role;

Om te beginnen zou je bijvoorbeeld select . kunnen verlenen naar my_role , en geef vervolgens my_role voor gebruikers B, C en D.

grant my_role to user_B;
grant my_role to user_C;

Later kunt u insert . verlenen naar my_role

grant insert on my_table to my_role;

en alle gebruikers die my_role . hebben gekregen zou automatisch rijen kunnen invoegen in de my_table van gebruiker A.




  1. Selecteer een dynamische set kolommen uit een tabel en ontvang de som voor elk

  2. Een cumulatief bedrag resetten?

  3. Hoe verwijder ik herhaalde kolomwaarden uit het rapport?

  4. ORACLE-beperking om nulwaarde toe te staan, IF