top of page

Erros de usuários já existentes em bancos de dados Oracle ao usar Data Pump em PDBs e CDBs

  • Foto do escritor: CloudDB
    CloudDB
  • 8 de mai. de 2023
  • 2 min de leitura

Algumas vezes acontecem erros durante a importação do Data Pump, no exemplo a seguir, devido a um usuário pré-criado: ORA-31684: Tipo de objeto USER: "XYZ" já existe.


Frequentemente, é necessário saber antecipadamente, antes da criação, as funções e privilégios necessários para esse usuário. Ou seja, o que conceder ao usuário antes da importação!


Aqui está como extrair todas essas informações com um único comando, que cria um script para executar as funções e privilégios necessários. Vamos supor que o usuário se chame JOHN:


select 'grant '||GRANTED_ROLE||' to JOHN;' from DBA_ROLE_PRIVS where grantee = 'JOHN'

union all

select 'grant '||PRIVILEGE||' to JOHN;' from DBA_SYS_PRIVS where grantee = 'JOHN'

union all

select 'grant '||PRIVILEGE||' on '||GRANTOR||'.'||TABLE_NAME||' to JOHN;' from DBA_TAB_PRIVS where grantee = 'JOHN';


Como você pode ver, todas as informações podem ser encontradas e extraídas das tabelas DBA_ROLE_PRIVS, DBA_SYS_PRIVS e DBA_TAB_PRIVS.


Observe que você precisa executar esse comando no PDB onde o usuário local está. Se você executá-lo no CDB, provavelmente obterá "nenhuma linha selecionada".


Caso você não tenha acesso DBA por algum motivo, modifique as consultas acima para visualizar os privilégios apenas para o usuário atual. Para isso, consulte as versões USER_ das mesmas tabelas DBA_ e execute as consultas como usuário atual.


Aqui está outro exemplo que mostra que as coisas nem sempre são tão simples:


Suponha que eu tenha uma role chamada HACKER que já foi concedida à role DBA.


SQL> grant HACKER to DBA;


Essa não aparece nas visualizações acima. Isso ocorre porque as visualizações de privilégios DBA_ exibem apenas os GRANTEES com acesso atribuído diretamente. Note que a role HACKER é herdada de outra role. Bem, não se preocupe - ela será concedida indiretamente. Essas roles não são exibidas nessas visualizações.


A consulta select * from dba_role_roles; mostrará quais roles foram concedidas às roles.


Além disso, lembre-se de extrair o perfil do usuário e as cotas do tablespace antes de pré-criar o usuário. Utilize as tabelas DBA_TS_QUOTAS e DBA_PROFILES. E não se esqueça da senha!

 
 
 

Posts recentes

Ver tudo

Comments


Logo_quadrada.png

CLOUD DB LTDA - 28.961.479/0001-41

© 2020 Direitos Reservados CloudDB ®  O plágio é considerado crime e sua principal referência é a lei 9.610 - ♥ SEO WIX Partner - Phoenix

bottom of page