Considere o seguinte cenário em um banco de dados Oracle 11g .
O usuário ADMIN realiza o seguinte:
CREATE USER Alice IDENTIFIED BY pwdalice;
GRANT CREATE SESSION TO Alice;
CREATE ROLE Viewer IDENTIFIED BY pwdviewer;
GRANT Viewer TO Alice;
GRANT SELECT ON Table_1 TO Viewer;
Em seguida, Alice faz login no banco de dados como 'Alice' e executa o seguinte comando:
SELECT * FROM Table_1;
Alice recebe o seguinte erro:
SELECT * FROM Table_1
*
ERROR at line 1:
ORA-00942: table or view does not exist
Eu pensei que conceder privilégios a uma função permitiria que seus usuários-membros obtivessem esses privilégios. No entanto, este cenário mostra que não é assim. O que estou perdendo aqui? Como posso conceder SELECT a Alice usando uma função?
Atualizar:
Seguindo as respostas, tentei 3 correções sem sucesso
1) Usando nomes de tabela totalmente qualificados
Eu deixei de incluir o nome do esquema no SELECT * FROM Table_1;
comando. No entanto, mesmo depois de adicionar o nome do esquema conforme mostrado abaixo, ainda ocorre o erro.
Alice executa:
SELECT * FROM ADMIN.Table_1;
Obtém o erro:
SELECT * FROM ADMIN.Table_1
*
ERROR at line 1:
ORA-00942: table or view does not exist
2) Usando um sinônimo para o nome da tabela totalmente qualificado
Infelizmente, isso também não parece resolver o problema.
Alice executa o seguinte:
CREATE SYNONYM Syn_Table_1 FOR ADMIN.Table_1;
CREATE SYNONYM Syn_Table_1 FOR ADMIN.Table_1
*
ERROR at line 1:
ORA-01031: insufficient privileges
3) Alterando a sessão
ALTER SESSION SET current_schema = ADMIN;
Session altered.
SELECT * FROM Table_1;
SELECT * FROM Table_1
*
ERROR at line 1:
ORA-00942: table or view does not exist