Entwickler-Ecke

Datenbanken - Oracle: Benutzerrechte


delphijanka - Do 13.08.09 12:07
Titel: Oracle: Benutzerrechte
Hallo.

Habe ein Problem hier, und zwar:

ich lege die Rolle an:

CREATE ROLE RoleABC

dann weise ich der Rolle die erlaubte Rechte:

GRANT SELECT ON TabelleABC TO RoleABC

dann erstelle ich einen user:

CREATE USER UserABC IDENTIFIED BY PasswortABC

dann ordne ich dem User die Rolle zu:

GRANT RoleABC TO UserABC


Die Anmeldung an der DB erfolgt ohne Probleme. Aber ich kann aus der Tabelle TabelleABC nichts lesen, die Fehlermeldung: Tabelle oder View nicht vorhanden.

Woran liegt das? Was mache ich falsch?


iKilledKenny - Do 13.08.09 12:45

Du musst die Rolle für den User aktivieren.


Quelltext
1:
set role RoleABC identified by RolePassword;                    


So funktioniert das zumindest bei Oracle.


jaevencooler - Do 13.08.09 12:50

Moin, Moin,

du hast auch vergessen dem user seinen Default und temporary tablespace zu zuordnen.

Auch hast die Tabelle in einem anderen tablespace erzeugt, da Du ja noch nicht als der neue User
connected warst, oder ???

Gruß
Michael


delphijanka - Do 13.08.09 12:58

@iKilledKenny

hab dich net verstanden.

@jaevencooler

ich habe die Tabelle unter einem anderen User-Namen erzeugt. Das heisst, die Tabelle liegt "irgendwo", und mit dem neuen User muss ich das bekanntmachen. Aber wie denn?


iKilledKenny - Do 13.08.09 13:04

Nachdem du den User an der DB angemeldet hast (die Connection geöffnet hast), musst du für ihn die Rolle aktivieren. Nehme ein TAdoCommand, setze o.g. SQL-Text und führe es aus.


delphijanka - Do 13.08.09 13:09

@iKilledKenny

Aber ich habe doch dem User bereits eine Rolle zugeordnet, und dieses Sachverhalten ist in der DB immer persistent.


jaevencooler - Do 13.08.09 13:13

Moin,

user profile icondelphijanka hat folgendes geschrieben Zum zitierten Posting springen:
@iKilledKenny

hab dich net verstanden.

@jaevencooler

ich habe die Tabelle unter einem anderen User-Namen erzeugt. Das heisst, die Tabelle liegt "irgendwo", und mit dem neuen User muss ich das bekanntmachen. Aber wie denn?


Das geht folgendermaßen:

select * from BenutzerDerTabelleAngelegthat.TabelleABC

dabei musst du dem neuen benutzer auch entsprechende rechte in dem anderen Schema granten

also etwa so:

grant select on TabelleABC to NeuemBenutzer


Gruß
Michael


delphijanka - Do 13.08.09 13:23

@jaevencooler

du sagst:

"select * from BenutzerDerTabelleAngelegthat.TabelleABC
...
grant select on TabelleABC to NeuemBenutzer"


Korrektur: grant select on BenutzerDerTabelleAngelegthat.TabelleABC to NeuemBenutzer

dann geht es, danke dir und allen anderen, die versucht haben mir zu helfen.


Fragen nebenbei:
- was passiert, wenn ich den alten Benutzer aus der DB entferne? Bleiben die Tabellen bestehen? Oder ist der eine Art Admin, der dann nicht gelöscht werden kann?


iKilledKenny - Do 13.08.09 13:40

user profile iconjaevencooler hat folgendes geschrieben Zum zitierten Posting springen:

Das geht folgendermaßen:

select * from BenutzerDerTabelleAngelegthat.TabelleABC

dabei musst du dem neuen benutzer auch entsprechende rechte in dem anderen Schema granten

also etwa so:

grant select on TabelleABC to NeuemBenutzer


Damit hebelst du dann das Rollenkonzept komplett aus. Wenn man jedem Benutzer einen Grant auf eine Tabelle, und eine Anwendung hat in der Regel nicht nur eine, geben muss, ist das ja totaler Schwachsinn. Deshalb gibts ja das Rollenkonzept.

Also nochmal: Lass die Berechtigungsstruktur so wie sie ist, und setze dem Benutzer nach der Anmeldung an die Datenbank die Rolle.