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.