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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top