Autor Beitrag
delphijanka
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 151

WinXP
D 2009 Arc., Java, C
BeitragVerfasst: Do 13.08.09 12:07 
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?


Zuletzt bearbeitet von delphijanka am Do 13.08.09 12:53, insgesamt 1-mal bearbeitet
iKilledKenny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Do 13.08.09 12:45 
Du musst die Rolle für den User aktivieren.

ausblenden Quelltext
1:
set role RoleABC identified by RolePassword;					


So funktioniert das zumindest bei Oracle.
jaevencooler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 166
Erhaltene Danke: 6

MS-DOS,Win32, Win95, Win 98, Me,XP, Linux, NT4.0, NT 2000-2008, Vista, Windows 7
Turbo Pascal,D1 Enter,D2 Enter,D3 Enter,D5 Enter, Kylix, D2007, PL/SQL, MS/SQL, Delphi 2010, Delphi XE
BeitragVerfasst: 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

_________________
Wissen ist Macht, nichts wissen macht auch nichts...
delphijanka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 151

WinXP
D 2009 Arc., Java, C
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 151

WinXP
D 2009 Arc., Java, C
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 166
Erhaltene Danke: 6

MS-DOS,Win32, Win95, Win 98, Me,XP, Linux, NT4.0, NT 2000-2008, Vista, Windows 7
Turbo Pascal,D1 Enter,D2 Enter,D3 Enter,D5 Enter, Kylix, D2007, PL/SQL, MS/SQL, Delphi 2010, Delphi XE
BeitragVerfasst: 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

_________________
Wissen ist Macht, nichts wissen macht auch nichts...
delphijanka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 151

WinXP
D 2009 Arc., Java, C
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: 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.