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

Hvordan skriver man en politik i Oracle SQL, der begrænser adgangen til ikke-ejere for en tabel?

Du behøver ikke gøre absolut noget ved det.

Tabeller (og data gemt indeni) ejes af bruger A. Ingen kan se det medmindre bruger A giver visse privilegier til andre brugere, såsom bruger B.

Det kan gøres ved at tildele select privilege, dvs.

grant select on my_table to user_B;

og bruger B ville derefter hente data som

select * from user_A.my_table;

Bruger B vil ikke være i stand til at ændre data (da de ikke blev givet indsæt/opdater/slet).

Desuden kan du (som bruger A) oprette en visning som kun vælger en del af data, f.eks.

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

grant select on v_my_table to user_B;

Hvis du gør det, vil bruger B kun se rækker, hvis score er større end 4.

Hvis der er bruger C, kan den ikke se absolut noget. Hvis du ønsker, at den skal se nogle data, ville du gøre, hvad du allerede gjorde med bruger B - give visse privilegier.

Der er dog en mulighed for at lade bruger B "viderestille" privilegier til andre brugere - du ville bruge with grant option , f.eks.

grant select on my_table to user_B with grant option;

Det ville gøre det muligt for bruger B at give valg til andre brugere, f.eks.

grant select on user_A.my_table to user_C;

Til sidst (taler om dette svar), hvis der er mange brugere, du gerne vil give sådanne privilegier til, kan du oprette roller . Så ville du give privilegier til en rolle og tildele rolle til en anden bruger(e). Det giver dig mulighed for at ændre roller afhængigt af dine (og andre brugeres) ønsker.

create role my_role;
grant select on my_table to my_role;

For eksempel kan du til at begynde med give select til my_role , og tildel derefter my_role til brugere B, C og D.

grant my_role to user_B;
grant my_role to user_C;

Senere kan du give insert til my_role

grant insert on my_table to my_role;

og alle brugere tildelt my_role ville automatisk være i stand til at indsætte rækker i bruger A's my_table.




  1. Java:Io-undtagelse:Netværksadapteren kunne ikke oprette forbindelsen

  2. MySQL SELECT fra flere tabeller, flere GROUP BY og group_concat?

  3. VB.NET mySQL indsæt kommando

  4. Arbejde med MyISAM i MySQL