Wenn Sie keinem der beiden Benutzer zusätzliche Privilegien gewähren wollen, haben Sie nicht viele Möglichkeiten.
Sie können eine Prozedur erstellen, die einem Superuser gehört, z.B. einem Konto, das SELECT ANY TABLE hat, (aber ノット SYS oder SYSTEM), der beide Zählungen vornimmt und die Differenz berechnet.
create function get_diff
return pls_integer
authid definer
as
c1 pls_integer;
c2 pls_integer;
begin
select count(*)
into c1
from staff.stf_table;
select count(*)
into c2
from employee.emp_table;
return abs(c1-c2);
end get_diff;
/
Das Entscheidende ist hier also der AUTHID DEFINER. Das bedeutet, dass die Funktion mit den Rechten des Benutzers ausgeführt wird, der die Funktion besitzt; da er die notwendigen Rechte hat, um beide Tabellen abzufragen, kann dieser Benutzer die Funktion ausführen, ebenso wie jeder andere Benutzer, dem er die EXECUTE ON GET_DIFF
.
Das ist wirklich das Minimum an Bewilligung, mit dem Sie auskommen können.
NB: Ich bin nicht auf die Frage des Schreibens in eine Datei eingegangen, weil ich nicht glaube, dass das der Kern Ihrer Frage ist. Die Hauptsache sind die Berechtigungen.
"Gibt es keine Möglichkeit, dass der Proc sich als Benutzer 'staff' verbindet und die Zählung in einer Datei speichern und dann als Benutzer 'Mitarbeiter' die Zählung in der gleichen Datei speichern und vergleichen?"
Nr. T
Die Daten des PERSONALs sind Eigentum des PERSONALs und die Daten des ARBEITNEHMERS sind Eigentum des ARBEITNEHMERS. Standardmäßig kann STAFF die Daten von EMPLOYEE nicht sehen und umgekehrt. Um diese Situation zu ändern, haben Sie zwei Möglichkeiten:
- Lassen Sie STAFF SELECT auf ihre Tabelle an EMPLOYEE gewähren und lassen Sie EMPLOYEE SELECT auf ihre Tabelle an STAFF gewähren.
- Verwenden Sie ein Konto, das für die Tabellen beider Schemas berechtigt ist, um die Arbeit zu erledigen.
Natürlich kann es bei der ersten Variante zu Datenschutzproblemen kommen. Wenn dies Ihr Anliegen ist, gibt es einige Möglichkeiten, die Sie nutzen können:
- Lassen Sie jedes Schema eine Ansicht besitzen, die lediglich eine Anzahl ihrer Datensätze auswählt, und gewähren Sie Berechtigungen für die Ansichten.
- Wenn Sie über Enterprise Edition 10gR2 oder höher verfügen, können Sie VPD auf Spaltenebene verwenden: Gewähren Sie Select für die Tabelle und legen Sie eine Richtlinie fest, um alle sensiblen Daten zu verbergen. Weitere Informationen .