ODBC-Zugriff auf ORACLE verhindern

Hallo,

habe eine Access97-Anwendung, die über ODBC auf eine ORACLE9i-DB zugreift. Über die Anwendung kann ein user nur ausgewählte Datensätze anlegen und bearbeiten. Aber wie kann man verhindern, dass der user mit seinem Kennwort direkt über ODBC auf die ORACLE-Tabellen zugreifen und dort auch andere Datensätze ändern kann!?
Danke für eure Hilfe!

Gruss Marion

Hallo Marion,

indem Du jedem User ein entsprechendes Berechtigungsprofil in Oracle verpasst.

Dazu müssen sich die Benutzer mit ihren eigenen Benutzernamen bei Oracle anmelden.
Jetzt benötigt jeder Benutzer noch mindestens das Create SESSION Privileg. (Dann kann er sich verbinden)

GRANT CREATE SESSION TO benutzer;

Jetzt erstellt man eine Rolle für die Benutzer damit die Arbeit nicht ausartet:
CREATE ROLE meine_benutzer_duerfen_das;

Jetzt weist man diesen Benutzer die Rolle zu:
GRANT meine_benutzer_duerfen_das TO benutzer;

Und dann die Objektberechtigungen einfach der ROlle zuweisen, dann haben alle Benutzer diese Rechte.
GRANT SELECT ON schema.tabelle TO meine_benutzer_duerfen_das;

Dazu kann man sich ein Skript basteln, dass die Tabellen aus USER_Tables rausliest.

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,
vom Client aus kannst du das nicht verhindern. Deine Anwendung „versteckt“ die Möglichkeit ja nur. Nur auf dem Server könntest du die Logik zb. in einem Trigger hinterlegen die einem bestimmten User nur Änderungen an bestimmten Datensätzen erlaubt.
Alternativ kannst du auch verschiedene Views zum Lesen bzw Ändern benutzen. Diesen Views kannst du dann entsprechende Rechte auf dem Server geben.

Gruss
Quaser

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Marion,

dein Problem kommt mir bekannt vor… du willst verhindern, das ein findiger Anwender sich eine Access-Datenbank erstellt und darin Verknuefungen zur Oracle-Tabelle anlegt und mit seiner ja gueltigen Oracle-Kennung in den Daten rumpfuscht???

also ich habe mir angewoehnt die Benutzerdaten der Oracle-Umgebung von den Benutzern zu verbergen, in dem ich die Benutzerverwaltung in Access verlagert habe. Der Anwender wird ueber sein Systemanmeldename identifiziert oder er gibt sein Zugangskennung in Access an. Die Access-Anwendung hat eine eigene Benutzerkennung fuer die Oracle-DB, die dem Anwender nicht bekannt ist. Somit koennen die Anwender sowieso nur ueber dieses eine Access-FrontEnd auf die Daten zugreifen. Dann werden den Anwendern, natuerlich auch nur Access .MDE FontEnds zur Verfuegung gestellt, die sich mit -Doppelklick nicht oeffnen lassen.

Ich glaube das ist fuer diesen Fall die sicherste Vorgehensweise.

Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

ODBC-Zugriff auf ORACLE verhindern
Danke Euch allen,

also ich habe mir eine Kombination aus mehreren Sachen als Lösung überlegt.
Ich werde einen Dummy-User erstellen, der die entsprechenden Berechtigungen hat und mit ORACLE-Kennwort in Access hinterlegt ist. D.h. der user selbst hat keine Rechte. Meldet er sich in Access an, wird automatisch der Dummy-user bei ORACLE angemeldet. In einer Variablen wird der „richtige“ Name des users gespeichert, damit man Datensatzänderungen auch nachvollziehen kann. Alle diese user erhalten eine bestimmte Rolle, die nur dazu dient, die userart zu erkennen.

Als Problem hat sich noch herausgestellt, dass man die eingebundenen ORACLE-Tabellen einfach in eine zweite Access-Instanz importieren und ansehen kann!

Das kann man zum Glück verhindern, indem man die Objekte in Access ausblendet.

Ich hoffe, das funktioniert so.

Danke und viele Grüße

Marion

Hi!

Kurzer Einwurf:

Als Problem hat sich noch herausgestellt, dass man die
eingebundenen ORACLE-Tabellen einfach in eine zweite
Access-Instanz importieren und ansehen kann!

Das kann man zum Glück verhindern, indem man die Objekte in
Access ausblendet.

Korrektur des letzten Satzes:

Das kann man zum Glück verhindern, indem man die Benutzerverwaltung in Oracle sauber definiert (Stichworte: Rollen, Profile, etc.) - und schon müssen sich die Drittprodukte um nix mehr kümmern …

Was passiert eigentlich, wenn sich jemand kurzerhand per SQL-Plus o.ä. mittels SQL-Net oder so auf seinem Rechner in die Oracle-DB reinhängt?

Grants haben schon seinen Sinn unter Oracle …

Grüße,
Tomh

Hi!

Alternativ kannst du auch verschiedene Views zum Lesen bzw
Ändern benutzen. Diesen Views kannst du dann entsprechende
Rechte auf dem Server geben.

Vor allem kannst Du im Select auf die View (und sonst sieht der User nix) schon auf die Datensätze einschränken, die er manipulieren darf … auf die View darf er schreiben, auf die Tabelle selber darf er nix machen … (hab’s sicherheitshalber auf einer 9i grad nochmals probiert: grant all auf die View, auf die Table nix und schon sieht der User nur noch die Sätze mit der entsprechenden WHERE-Bedingung)

Grüße,
Tomh

PS: Eine Historie von „empfindlichen“ Tabellen (Wer hat Wann Was geändert/eingefügt/gelöscht) sollte eigentlich gar nicht mehr erwähnt werden müssen …