sql >> Databasteknik >  >> RDS >> Oracle

Hur skriver man en policy i Oracle SQL som begränsar åtkomsten till icke-ägare för en tabell?

Du behöver inte göra absolut något åt ​​det.

Tabeller (och data som lagras inom) ägs av användare A. Ingen kan se det om inte användare A ger vissa privilegier till andra användare, såsom användare B.

Det kan göras genom att ge select-privilegium, dvs.

grant select on my_table to user_B;

och användare B skulle sedan hämta data som

select * from user_A.my_table;

Användare B kommer inte att kunna ändra data (eftersom den inte beviljades infoga/uppdatera/radera).

Dessutom kan du (som användare A) skapa en vy som bara väljer en del av data, t.ex.

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

grant select on v_my_table to user_B;

Om du gör det skulle användare B bara se rader vars poäng är större än 4.

Om det finns användare C kan den inte se absolut någonting. Om du vill att den ska se vissa data, skulle du göra som du redan gjorde med användare B - bevilja vissa privilegier.

Det finns dock ett alternativ att låta användare B "vidarebefordra" privilegier till andra användare - du skulle använda with grant option , t.ex.

grant select on my_table to user_B with grant option;

Det skulle tillåta användare B att bevilja val till andra användare, t.ex.

grant select on user_A.my_table to user_C;

Slutligen (om det här svaret), om det finns många användare som du skulle vilja ge sådana privilegier till, kan du skapa roller . Sedan skulle du ge privilegier till en roll och ge roll till en annan användare. Det låter dig ändra roller beroende på dina (och andra användares) önskemål.

create role my_role;
grant select on my_table to my_role;

Till exempel, för att börja, kan du ge select till my_role , och bevilja sedan my_role till användare B, C och D.

grant my_role to user_B;
grant my_role to user_C;

Senare kan du bevilja insert till my_role

grant insert on my_table to my_role;

och alla användare som beviljats ​​my_role skulle automatiskt kunna infoga rader i användare A:s my_table.




  1. Utmaningar med att skala Moodle PostgreSQL-databasen

  2. Tillbaka-knapp för en ensidig webbsida

  3. Massuppdatera mysql med where-satsen

  4. SQL/Laravel - Varför returnerar min fråga en tom samling?