Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie schreibe ich eine Richtlinie in Oracle SQL, die den Zugriff auf Nicht-Besitzer für eine Tabelle einschränkt?

Sie müssen absolut nichts dagegen unternehmen.

Tabellen (und darin gespeicherte Daten) gehören Benutzer A. Niemand kann sie sehen, es sei denn Benutzer A gewährt anderen Benutzern, z. B. Benutzer B, bestimmte Privilegien.

Dies kann durch Gewährung von Auswahlrechten erfolgen, z. B.

grant select on my_table to user_B;

und Benutzer B würde dann Daten abrufen als

select * from user_A.my_table;

Benutzer B kann keine Daten ändern (da ihm das Einfügen/Aktualisieren/Löschen nicht gewährt wurde).

Außerdem können Sie (als Benutzer A) eine Ansicht erstellen die nur einen Teil der Daten auswählt, z. B.

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

grant select on v_my_table to user_B;

Dadurch würde Benutzer B nur Zeilen sehen, deren Punktzahl größer als 4 ist.

Wenn es Benutzer C gibt, kann er absolut nichts sehen. Wenn Sie möchten, dass es einige Daten sieht, würden Sie das tun, was Sie bereits mit Benutzer B getan haben – bestimmte Privilegien gewähren.

Es gibt jedoch eine Option, mit der Benutzer B Berechtigungen an andere Benutzer „weiterleiten“ kann – Sie würden with grant option verwenden , z. B.

grant select on my_table to user_B with grant option;

Das würde es Benutzer B ermöglichen, anderen Benutzern die Auswahl zu erteilen, z. B.

grant select on user_A.my_table to user_C;

Wenn es viele Benutzer gibt, denen Sie solche Privilegien gewähren möchten, können Sie schließlich (in Bezug auf diese Antwort) Rollen erstellen . Dann würden Sie einer Rolle Berechtigungen erteilen und die Rolle einem oder mehreren anderen Benutzern erteilen. Es ermöglicht Ihnen, Rollen nach Ihren Wünschen (und denen anderer Benutzer) zu ändern.

create role my_role;
grant select on my_table to my_role;

Zum Beispiel könnten Sie zu Beginn select erteilen zu my_role , und gewähren Sie dann my_role an Benutzer B, C und D.

grant my_role to user_B;
grant my_role to user_C;

Später können Sie insert erteilen zu my_role

grant insert on my_table to my_role;

und allen Benutzern, denen my_role gewährt wurde wäre automatisch in der Lage, Zeilen in my_table.

von Benutzer A einzufügen