ORA-01031: privilégios insuficientes quando vista seleção
Pergunta
Quando tento executar uma visão que inclui tabelas de esquemas diferentes um ORA-001031 Privilégios insuficientes é lançada. Estas tabelas têm permissão de execução para o esquema onde a vista foi criada. Se eu executar instrução SQL da visão funciona. O que eu estou ausente?
Solução
Como o proprietário da tabela que você precisa para conceder acesso SELECT nas tabelas subjacentes ao utilizador que está a executar a instrução SELECT como.
grant SELECT on TABLE_NAME to READ_USERNAME;
Outras dicas
Finalmente eu tenho que trabalhar. A resposta de Steve é ??certo, mas não para todos os casos. Ele falha quando essa visão está sendo executado a partir de um terceiro esquema. Para que isso funcione você tem que adicionar a opção de concessão:
GRANT SELECT ON [TABLE_NAME] TO [READ_USERNAME] WITH GRANT OPTION;
Assim, [READ_USERNAME]
pode também conceder selecione privilégio sobre a vista para outro esquema
Q. Quando é o "com opção de concessão" necessária?
A. quando você tem uma vista executado a partir de um terceiro esquema.
Exemplo: esquema DSDSW tem uma visão chamada view_name
a) that view selects from a table in another schema (FDR.balance)
b) a third shema X_WORK tries to select from that view
doações típicas: conceder escolha em dsdw.view_name para dsdw_select_role; conceder dsdw_select_role a FDR;
Mas: fdr fica selecionar count (*) from dsdw.view_name; ERRO na linha 1: ORA-01031: privilégios insuficientes
emitir a concessão:
grant select on fdr.balance to dsdw with grant option;
Agora FDR: selecionar count (*) from dsdw.view_name; 5 linhas
Deixe-me fazer uma recapitulação.
Quando você construir uma visão contendo objeto de diferentes proprietários, os outros proprietários têm de conceder "com opção de concessão" para o proprietário do ponto de vista. Assim, o proprietário vista pode conceder a outros usuários ou esquemas ....
Exemplo: User_a é o proprietário de uma tabela chamada mine_a User_b é o proprietário de uma tabela chamada yours_b
Vamos user_b digamos quer criar uma exibição com uma junção de mine_a e yours_b
Para o fim de funcionar bem, user_a tem que dar "concessão selecione no mine_a para user_b com opção de concessão"
Então user_b pode conceder selecionar naquele fim de todos.
Se a vista é acessado através de um procedimento armazenado, a concessão executar é insuficiente para aceder à vista. Você deve conceder selecionar explicitamente.
Se a vista é acessado através de um procedimento armazenado, a concessão executar é insuficiente para aceder à vista. Você deve conceder selecionar explicitamente.
basta digitar essa
conceder tudo para público;
Para usar um ponto de vista, o usuário deve ter os privilégios apropriados, mas apenas para a própria visão, e não seus objetos subjacentes. No entanto, se os privilégios de acesso para os objetos subjacentes da visualização são removidos, então o usuário não tem acesso. Este comportamento ocorre porque o domínio de segurança que é usado quando um usuário consulta a vista é a do definidor da visão. Se os privilégios sobre os objetos subjacentes são revogados a partir definidor da vista, em seguida, a visão torna-se inválido, e ninguém pode usar a vista. Portanto, mesmo se um usuário tiver sido concedido acesso à vista, o usuário pode não ser capaz de usar a visão, se os direitos do definidor foram revogadas a partir de objetos subjacentes da visualização.
Documentação do Oracle http://docs.oracle.com/cd/B28359_01 /network.111/b28531/authorization.htm#DBSEG98017