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,
delphijanka hat folgendes geschrieben : |
@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
jaevencooler hat folgendes geschrieben : |
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!