[Oracle 9.2] missing or invalid...

liam

Mitglied
Hallo,

ich möchte mit Benutzer B auf Tabellen zugreifen die Benutzer A gehören,
dies mache ich indem ich mit ALTER SCHEMA... das Schema auf Benutzer A einstelle.
Wenn ich nun Daten aus der Tabelle abfrage zur Initialisierung meines Programms bekomme ich den Fehler "missing or invalide schema authorization identifier".
Das seltsame wenn ich danach SELECTs auf die Tabellen mache kommt er nicht mehr.
Warum verhält es sich so verschieden? Benötigt B "SELECT ANY TABLE" oder sonstige Rechte? Da Benutzer B zurzeit nur sehr eingeschränkte Rechte hat und er nur soviel wie nötig bekommen soll.
 
Also das Statement ALTER SCHEMA... kenne ich leider nicht und hab ich in der
Reference auch nicht gefunden. Was ich kenne ist
ALTER SESSION SET CURRENT_SCHEMA = A;
Damit wird aus SELECT * FROM tablename; ein SELECT * FROM a.tablename;

Das Recht SELECT ANY TABLE ist für einen normalen Benutzer sicherlich zu hoch.
Idealerweise solltes du eine Rolle anlegen, und der Rolle SELECT Rechte auf die
Objekte von A granten. Dem Benutzer B dann diese Rolle zuordnen.
 
Oh Sorry meinte ALTER SESSION :)
Das Granten hättest ein kleines Beispiel dafür?Muss man das für jede Tabelle ausführen?Sind über 100 das wäre sehr mühsam :)
Das Problem ist nur so an der Datenbank darf nichts verändert werden.
 
An der Datenbank selbst ändert sich ja durch die Rolle gar nix. Hier ein kleines
Beispiel:
Code:
CREATE ROLE b_users;

GRANT SELECT ON a_tables TO b_users;
GRANT b_users TO B;

Du musst schon jede Tabelle einzeln granten, wenn du eine ideale Rechtezuteilung
haben willst. Das kannst du dir aber einfach machen, indem du dir die Grant
Statements in SQL*Plus generierst:

Code:
SET HEADING OFF
SET PAGES 0
SET LINES130
SET FEEDBACK OFF
SPOOL grants.sql
SELECT  'GRANT SELECT ON ' || table_name || ' TO b_users; '
FROM    USER_TABLES;
SPOOL off
 
Exceptionfault hat gesagt.:
Code:
SET HEADING OFF
SET PAGES 0
SET LINES130
SET FEEDBACK OFF
SPOOL grants.sql
SELECT 'GRANT SELECT ON ' || table_name || ' TO b_users; '
FROM USER_TABLES;
SPOOL off

nochmal eine Frage, bin als SYS angemeldet in SQL*Plus und zurzeit sieht es so aus

Code:
SET HEADING OFF
SET PAGES 0
SET LINES130
SET FEEDBACK OFF
SPOOL grants.sql
SELECT  'GRANT SELECT ON ' || table_name || ' TO SCOTT; '
FROM	USER_TABLES;
SPOOL off

möchte aber nicht die Tabellen von SYS Granten sondern die des Users OPEN aber als dieser kann ich mich nicht anmelden, wie geht das?
 
Dann einfach das Statement so abändern:
Code:
SELECT  'GRANT SELECT ON OPEN.' || table_name || ' TO SCOTT; '
FROM	DBA_TABLES
WHERE OWNER = 'OPEN';
 

Neue Beiträge

Zurück