2011-12-22 20 views
6

Esistono due schemi in un database Oracle.Bypass "tabella o vista non esiste" nella compilazione del pacchetto

MYSCHEMA controllato da me.

OTHERSCHEMA che non è controllato da me.

So solo che posso ottenere risultato da select * from OTHERSCHEMA.OTHEROBJECT. Tuttavia, OTHEROBJECT è un sinonimo .

nel mio pacchetto, ho una dichiarazione come

insert into MYSCHEMA.MYTABLE(COL1) select COL1 from OTHERSCHEMA.OTHEROBJECT; 

ma mi ha dato Table or view does not exist.

Come posso risolvere o bypass questo problema? Grazie!

+0

Sei connesso a 'MYSCHEMA' ed eseguire' select * from OTHERSCHEMA.OTHEROBJECT' e funziona? Il tuo pacchetto è compilato sotto 'MYSCHEMA'? Hai provato a eseguire l'istruzione di inserimento al di fuori del pacchetto come dichiarazione autonoma: funziona? –

risposta

11

suppongo che hai ricevuto il privilegio di scegliere tra otherschema.otherobject per mezzo di un ruolo come opposted ad una sovvenzione diretta (come ad esempio grant all on otherschema.otherobject to myschema). In questo caso, i privilegi all'interno di questo ruolo non verranno utilizzati per determinare quali diritti si hanno all'interno di un blocco PL/SQL.

Vedi anche How Roles Work in PL/SQL Blocks (Oracle Docu, in cui si dice sotto ruoli Utilizzato in Named blocchi con i diritti del definitore:

Tutti i ruoli sono disabilitati in qualsiasi blocco denominato PL/SQL (stored procedure, una funzione o trigger) che viene eseguito con i diritti del definitore. I ruoli non sono utilizzati per il controllo privilegio e non è possibile impostare ruoli all'interno procedimento i diritti di un definitore.)

Problemi correlati