Eu estou tentando conceder privilégio de uma view de um usuário a outro.
No SQL Plus, eu loguei como system e fiz um select * from funcionario;. Uma mensagem de “tabela ou view inexistente” foi dada no console.
Depois, loguei com outro usuário, ‘wilson’, e fiz o mesmo select. Retornou os dados da tabela, já que criei essas tabelas enquanto estava logado com esse username.
Criei uma view chamada view_func de funcionario e fiz grant select on view_func to system; Retornou “concessão bem-sucedida”. Contudo, quando loguei como system e fiz um select * from view_func, uma mensagem de “tabela ou view inexistente” foi dada.
Utilizando o Oracle SQL Developer: criei uma conexão dando o nome xe_wilson, preenchendo o nome de usuário com ‘wilson’ e senha adequado. Fiz o teste e retornou o mesmo que acima. Em system, as tabelas, inclusive funcionario não são acessíveis. Criei uma view de funcionario utilizando ‘wilson’ e dei grant select à system. Não retornou erro. Logado como system, a mensagem de “tabela ou view inexistente” aparece novamente.
Utilizando Oracle Application Express ocorre o mesmo.
[quote=Aleksandro]Você fez um teste pelo system assim:
Veja se funciona ?
[/quote]
Colocando o nome do usuário na frente da view concedida, o acesso é permitido. Como antes eu estava acostumado com MySQL e neste não é necessário fazer isso, estava achando que tinha erro no banco Oracle. Mas pelo que vi, é assim mesmo, correto? Tenho sempre que colocar o nome do usuário na frente da tabela ou view que desejo acessar (que me foi concedido permissão). É isso mesmo?
No Oracle vc pode usar sinônimos para tabelas, views e outros objetos. Assim dispensaria o nome do dono do objeto antes dele. Dá até pra você usar um sinônimo cujo nome seja diferente da tabela (se isso tiver alguma utilidade pra você). Siga esses passos (estando logado como usuário que criou o objeto):
create public synonym view_func to wilson.view_func;
grant select on view_func to public;
Traduzindo: o primeiro comando cria um sinônimo público, que será enxergado por qualquer usuário que se logar (mesmo os que sejam criados após a criação do sinônimo)
o segundo comando dá permissão de select no sinônimo (não no objeto diretamente). Veja que uma coisa é saber que o objeto existe, outra coisa é poder utilizá-lo.
[quote=ADEMILTON]No Oracle vc pode usar sinônimos para tabelas, views e outros objetos. Assim dispensaria o nome do dono do objeto antes dele. Dá até pra você usar um sinônimo cujo nome seja diferente da tabela (se isso tiver alguma utilidade pra você). Siga esses passos (estando logado como usuário que criou o objeto):
create public synonym view_func to wilson.view_func;
grant select on view_func to public;
Traduzindo: o primeiro comando cria um sinônimo público, que será enxergado por qualquer usuário que se logar (mesmo os que sejam criados após a criação do sinônimo)
o segundo comando dá permissão de select no sinônimo (não no objeto diretamente). Veja que uma coisa é saber que o objeto existe, outra coisa é poder utilizá-lo.
[/quote]
Olá, ADEMILTON!
Esse comando eu conhecia. Uma pergunta. No Oracle Database Express, temos a possibilidade de criar um espaço de trabalho. Quando um usuário é criado dentro de um espaço de trabalho, as suas tabelas não podem ser vistas por outros usuários que estejam em outras áreas de trabalho. Contudo, se dois usuários estiverem na mesma área de trabalho e possuírem o grant resources, o que implicitamente dá ao usuário o unlimited tablespace, um pode ver as tabelas do outro.
Aí você está se referindo ao APEX, confere ? Cara, isso já é um pouco mais escuro porque não mexi muito ainda… Mas sua afirmação faz sentido, só tenha em mente que é um esquema de acesso um pouco diferente, não é direto no banco, tem um cara do APEX que faz um intermédio, manjou ?
Sim, é o APEX. Realmente o acesso ao banco não é direto, pelo que percebi. Tenho que criar usuários no sql plus antes e conceder alguns privilégios, senão não consigo criar um usuário no APEX. Em outras palavras, o usuário criado no sql plus por meio do create user e os seus privilégios por meio de grant é usado como área de trabalho para criar um usuário no APEX.
Cara, eu te recomendaria um fórum focado mais em Oracle mesmo: http://glufke.net/oracle/ . Faz tempo que não ando por lá, mas tal como aqui é tutti buona gente.
No mysql você pode ter diversos schemas sim, você pode criar um prd_all, prd_sys, prd_x , e quando faz o select , você é obrigado a colocar o schema.tabela é a mesma coisa, a não ser que vc tenha apenas 1 único repositório , no caso do oracle é a mesma coisa, fazendo uma analogia, para eu usar algo que seja seu preciso da sua permissão, mas a sua permissão não quer dizer que é meu, portanto preciso indicar que é seu e estou acessando…