2013-02-13 8 views
5

Das Szenario: eine Oracle 11g-Datenbank mit einigen sensiblen Benutzerdaten, die zu rechtlichen Verpflichtungen führen können, wenn sie an die falsche Partei gemeldet werden.Oracle Spalten von bestimmten Benutzern ausblenden

Der gewünschte Effekt: nur ein bestimmter Benutzer, von einer bestimmten IP-Anschluss können die Spalte sehen, dass diese sensiblen Benutzerdaten enthält

Ich bin nicht sicher, dass ausgeblendeten Spalten oder virtuelle Spalten sind die richtigen Wege dazu. Es scheint, dass feinkörnige Zugangskontrolle könnte helfen. Ich bin mir nicht sicher, was die beste Lösung ist. Die Beschränkung durch IP wird wahrscheinlich auf Listener-Ebene vorgenommen?

Die Frage: Wie können wir die Sichtbarkeit einer Spalte einschränken, so dass sie nur für einen bestimmten Benutzer verfügbar ist? Alle anderen Benutzer würden die Spalte nie sehen, auch nicht, wenn sie eine "DESC TABLE_WITH_SENSITIVE_DATA" ausführen.

Danke für irgendwelche Tipps.

+0

Virtuelle Spalte ist total nicht das. Es wird verwendet, um eine berechnete Spalte direkt in einer Tabelle zu haben, anstatt eine Ansicht zu verwenden. – Plouf

+0

FGAC kann die Spalte DATA (oder die ganze Zeile) ausblenden, aber nicht die Spalte selbst, noch kann sie in 'DESC' versteckt werden. Sie müssten Ansichten haben, um eine Spalte vollständig zu verbergen, und den Benutzern dann nur den Zugriff auf die Ansicht gewähren. – DazzaL

+0

Wenn Sie sagen "nur ein bestimmter Benutzer, der von einer bestimmten IP Verbindung herstellt", wollen Sie wirklich, dass die Datenbank die verbindenden IP erzwingt? Haben Sie zu diesem Punkt Ihre Netzwerkadministratoren konsultiert? – APC

Antwort

6

Der einfachste Weg, dies zu tun, ist eine Sicht auf die Tabelle zu erstellen, die nicht alle Spalten enthält. Gewährt keine Auswahl in der Tabelle, sondern nur in der Ansicht.

+1

Das ist so eine einfache und elegante Lösung Ich bin irgendwie dumm, um es verpasst zu haben. – emx

3

Der "richtige" Weg, dies zu tun, ist mit feinkörnigen Zugriffskontrolle (Virtual Private Database), die den Inhalt von Spalten mit einem NULL ersetzen können, wenn bestimmte Bedingungen nicht erfüllt sind.

Siehe Beispiel hier: http://docs.oracle.com/cd/B28359_01/network.111/b28531/vpd.htm#autoId17

Sie können sich wahrscheinlich diese Art von Funktionalität bauen Sie sich, wenn Sie beide verarmten und qualifizierte Gefühl sind.

+0

Nachdem wir ein wenig über VPD und FGAC gelesen hatten, wurde klar, dass dies verwendet werden könnte, um das Verstecken von Daten in gewissem Maße zu erzwingen, jedoch ist es wahrscheinlich zu kompliziert (und möglicherweise kostspielig), diese Techniken für unseren Zweck zu verwenden. – emx

1

Haben Sie die Möglichkeit, Rollen zu ändern und Ansichten zu erstellen? Vielleicht könnten Sie zwei separate Ansichten erstellen und den Zugriff auf zwei verschiedene Rollen für diese Tabelle gewähren. Alle Benutzer, die die vertraulichen Daten nicht sehen können, würden einer "eingeschränkten" Rolle angehören und die anderen hätten Zugriff auf die "uneingeschränkte" Rolle. Sie müssten der jeweiligen Rolle Berechtigungen für jede Ansicht erteilen.

Es ist wichtig zu beachten, dass die Aktualisierung der einer Ansicht zugeordneten zugrunde liegenden Daten eingeschränkt ist. Wie erläutert here, Ansichten, die Set-Operatoren, Aggregate und GROUP BY DISTINCT und Joins enthalten und nicht modifizierbar.