Sicherheit auf Spaltenebene

9

Ich brauche eine Lösung, um bestimmte Spalten in einer Tabelle auszublenden. Wir haben Leute, die Berichte für diese Datenbank und speziell für einige dieser Tabellen mit vertraulichen Informationen erstellen müssen, aber keine Elemente wie Gehalt oder SSN sehen dürfen. Ist es möglich, bestimmte Spalten für Benutzer zu filtern?

Robert
quelle
1
Welche Versionsnummer von Oracle (10.1 / 10.2 / 11.1 / 11.2) und verwenden Sie Enterprise Edition / Standard Edition? Haben Sie zusätzliche lizenzierte Optionen (z. B. Oracle Advanced Security)?
Philᵀᴹ
10g R2 Enterprise Edition. Keine zusätzlichen lizenzierten Funktionen, die mir bekannt sind.
Robert

Antworten:

13

Sie können dies mit einer normalen Ansicht tun, solange die beteiligten Benutzer noch keinen Zugriff auf die Basistabelle haben.

Z.B:

SQL> create user reportuser identified by reportuser;

User created.

SQL> grant create session to reportuser;

Grant succeeded.

SQL> grant create synonym to reportuser;

Grant succeeded.

SQL> select user from dual;

USER
------------------------------
PHIL

SQL> create table basetable
(
  id number primary key,
  viewable varchar2(30),
  secret varchar2(30)
);

Table created.

SQL> insert into basetable values ( 1, 'hello world','this is secret' );

1 row created.

SQL> commit;

Commit complete.

SQL> create view reportview
as
select id, viewable
from basetable;

View created.

SQL> grant select on reportview to reportuser;

Grant succeeded.

SQL> conn reportuser/reportuser
Connected.
SQL> select * from phil.basetable;
select * from phil.basetable
                   *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select secret from phil.basetable;
select secret from phil.basetable
                        *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select * from phil.reportview;

        ID VIEWABLE
---------- ------------------------------
         1 hello world

SQL>

Wenn Sie Berechtigungen für die betreffenden Tabellen widerrufen und die Ansichten zusammen mit einem Synonym für jede Benutzeransicht erstellen, die denselben Namen wie die ursprüngliche Tabelle hat, sollte diese transparent sein.

Z.B:

SQL> select user from dual;

USER
------------------------------
REPORTUSER

SQL> create synonym basetable for phil.reportview;

Synonym created.

SQL> select * from basetable;

        ID VIEWABLE
---------- ------------------------------
         1 hello world

SQL>

Sie können dies auch mit Virtual Private Database tun , aber ich denke, es ist eine teure, extra lizenzierte Option. Mit DBMS_RLS konfigurieren Sie die relevanten Sicherheitsrichtlinien, die Sie benötigen.

Philᵀᴹ
quelle
Danke für die ausführliche Antwort. Es ist Ihnen nicht bewusst, nach der tatsächlichen Tabelle selbst zu filtern. Dies wäre eine viel sauberere Lösung für uns, da wir eine Reihe von Tabellen haben werden, für die wir dies tun können. Ihre Lösung könnte jedoch funktionieren.
Robert
2
Wenn Sie Berechtigungen für die betreffenden Tabellen widerrufen und die Ansichten zusammen mit einem Synonym für jeden Benutzer erstellen, der denselben Namen wie die ursprüngliche Tabelle hat, sollte diese transparent sein.
Philᵀᴹ
Ok ... das macht Sinn. Ich habe nicht daran gedacht, Synonyme für den Benutzer zu erstellen. Ich muss also einen Berichtsbenutzer erstellen, ihm Zugriff auf alle Tabellen gewähren und dann die spezifischen Tabellen entfernen, um die ich mir Sorgen mache. Beginnen Sie danach mit dem Erstellen der Ansichten, um die Spalten auszublenden.
Robert
Jep! Noch mehr Fragen, fiel frei, um zurück zu kommen und zu fragen. Vergiss nicht zu testen :)
Philᵀᴹ