Bom dia Pessoal,
Sou nova na area de banco de dados, estou estagiando e peguei uma solicitaçao de um cliente, porém não tem ninguém aqui agora para me ajudar.
Tenho que fazer o seguinte:
criar o usuário 456 no banco de dados xyz com o mesmo perfil do usuário 123.
Criar o usuario com o mesmo perfil eu sei, mas tenho que pegar os privilegios que esse outro usuario tem em outras tabelas.
Pra pegar o privilegio das tabelas eu usei este select:
select ('grant ' ||PRIVILEGE|| ' on '||OWNER||'.'||TABLE_NAME||' to '||GRANTEE||';') from dba_tab_privs where owner not in('123') AND GRANTEE='123';
Tenho que coletar também as views que este usuario tem acesso
A minha duvida é como vou coletar essas informações referente as views.
Obrigada
Renata
Ajuda Select
- stcoutinho
- Moderador
- Mensagens: 850
- Registrado em: Qua, 11 Mai 2011 5:15 pm
- Localização: são Paulo - SP
Olá Renata,
Bem vinda ao forum GLUFKE.
Então, talvez você possa usar a DBA_TAB_PRIVS para identificar as permissões atribuidas a este usuário.
Tente este comando:
Lembre-se: para atribuir o GRANT corretamente, você precisa estar conectado como o "OWNER" do objeto. Por exemplo, se o comando gerado informar "GRANT SELECT ON SYS.V$SESSION ..", você tem que executar este comando conectado como o usuário "SYS". E assim por diante.
Eu recomendaria duas coisas:
A) Leia um pouco sobre "ROLES". As "roles" corresponde a papeis que podem agrupar um conjunto completo de permissões. Por exemplo, a o invés de :
Você pode atribuir estas permissões para uma ROLE e depois atribuir para um ou mais usuários;
Perceba que com as roles, fica muito mais fácil você atribuir ou remover permissões de usuários. É melhor do que ficar levantando as permissões de um usuário para replicar em outro.
B) Pesquise um pouco mais sobre scripts de DBA na internet ("o pulo do gato").
Parece a princípio um conselho um pouco vago, mas na internet existe uma série de sites onde você pode pegar scripts bem bacanas que permitem à você agilizar suas tarefas de DBA.
Por exemplo, se você consultar o site da OTN ORACLE (especificamente a thread => https://forums.oracle.com/thread/906823), você vai se deparar com o
recurso DBMS_METADATA, que permite te extrair uma série de comandos DDL e DSL do dicionário do ORACLE.
Connecte-se no SQL*PLUS como o usuário "123" e execute o script abaixo:
Você vai notar que estes comandos te monstram TODAS as permissões atrbuidas para o usuário "123".
Espero que tenha conseguido esclarecer suas dúvidas. Fique à vontade para perguntar mais sobre este tema.
Pode ser que os outros foristas tenham outras dicas interessantes para ajudar em seu trabalho.
Abraços,
Sergio Coutinho
Bem vinda ao forum GLUFKE.
Então, talvez você possa usar a DBA_TAB_PRIVS para identificar as permissões atribuidas a este usuário.
Tente este comando:
SELECT 'GRANT '||PRIVILEGE||' ON '||OWNER||'.'||TABLE_NAME||' TO '||GRANTEE||';' FROM DBA_TAB_PRIVS WHERE GRANTEE = '123'
Eu recomendaria duas coisas:
A) Leia um pouco sobre "ROLES". As "roles" corresponde a papeis que podem agrupar um conjunto completo de permissões. Por exemplo, a o invés de :
GRANT SELECT, INSERT , DELETE on TAB_A TO USUARIO_1;
GRANT SELECT, INSERT , DELETE on TAB_B TO USUARIO_1;
GRANT SELECT, INSERT , DELETE on TAB_C TO USUARIO_1;
--
GRANT SELECT, INSERT , DELETE on TAB_A TO USUARIO_2;
GRANT SELECT, INSERT , DELETE on TAB_Z TO USUARIO_4;
GRANT SELECT, INSERT , DELETE on TAB_A TO ROLE_A;
GRANT SELECT, INSERT , DELETE on TAB_B TO ROLE_A;
GRANT SELECT, INSERT , DELETE on TAB_C TO ROLE_A;
--
GRANT ROLE_A TO USUARIO_1;
GRANT ROLE_A TO USUARIO_2;
B) Pesquise um pouco mais sobre scripts de DBA na internet ("o pulo do gato").
Parece a princípio um conselho um pouco vago, mas na internet existe uma série de sites onde você pode pegar scripts bem bacanas que permitem à você agilizar suas tarefas de DBA.
Por exemplo, se você consultar o site da OTN ORACLE (especificamente a thread => https://forums.oracle.com/thread/906823), você vai se deparar com o
recurso DBMS_METADATA, que permite te extrair uma série de comandos DDL e DSL do dicionário do ORACLE.
Connecte-se no SQL*PLUS como o usuário "123" e execute o script abaixo:
set heading off
set pages 0
set long 9999999
select dbms_metadata.get_granted_ddl('ROLE_GRANT', user)
from dual;
select dbms_metadata.get_granted_ddl('SYSTEM_GRANT', user)
from dual;
select dbms_metadata.get_granted_ddl('OBJECT_GRANT', user)
from dual;
Espero que tenha conseguido esclarecer suas dúvidas. Fique à vontade para perguntar mais sobre este tema.
Pode ser que os outros foristas tenham outras dicas interessantes para ajudar em seu trabalho.
Abraços,
Sergio Coutinho
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 11 visitantes