Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bravanet

Grant

Recommended Posts

Pessoal, bom dia!

 

Me encontro com o seguinte problema:

 

TENHO 2 schemas com seus respectivos usuários

 

schema1(user1)

schema2(user2)

 

Até ai beleza...

 

Estou precisando dar permissão ao usuário 2 para que ele possa ler também o schema1.

 

É possivel? Estou usando o Oracle 10g Xe.

 

Obrigado,

 

Júnior

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem outras opções:

 

1 - Synonyms

 

Vá no Schema1 e crie synonym para todas as tabelas do schema, e depois um GRANT SELECT ON SYNONYM1 to SCHEMA2, para o usuário 2 poder visualizar as tabelas.

 

2 - Grant Explicíto

 

Você pode se conectar com o usuário 1 e dar os grants explicítos para o usuário 2, pode usar o SELECT abaixo:

 

SELECT 'grant select on ' || table_name || ' to usuario2;'
FROM user_tables;

 

3 - Criar uma ROLE

 

Você também pode criar um ROLE e passar todos os grants necessários nos objetos do schema01 para a ROLE, e posteriormente atribuir essa role para o usuário 2.

 

GRANT SELECT ON <role> TO USUARIO2;

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa amigo!

 

Lembrando que se for usar a opção 3 do Rodrigo pode ser que alguns comandos não funcionem e terá que ser dado os comandos de GRANT explicitamente para o cliente.

Ex.: Uitlizar o EXECUTE IMMEDIATE dentro de um bloco PL-SQL anonônimo por exemplo.

 

Segue o script PL-SQL para ajudar nesse processo:

--
-- SCRIPT PARA CRIAR UMA NOVA ROLE COM AS PERMISSOES E UM USUARIO DO BANCO DE DADOS
-- E CEDER A PERMISSAO DESSA ROLE A USUARIOS DO BANCO DE DADOS
--
DECLARE
  var_nomeBanco            VARCHAR2(50);
  var_nomeBancoFavorecido  VARCHAR2(50);
BEGIN
  var_nomeBanco           := Upper('usuario1');
  var_nomeBancoFavorecido := Upper('usuario2');
  -- criando a Role
  EXECUTE IMMEDIATE 'CREATE ROLE permissoes_'||var_nomeBanco||' NOT IDENTIFIED';
  dbms_output.put_line('------------------');
  dbms_output.put_line('CREATE ROLE permissoes_'||var_nomeBanco||' NOT IDENTIFIED;');
  dbms_output.put_line('------------------');
  -- cedendo a permissao de SELECT, INDEXES e REFERENCES para a Role criada
  FOR permissao IN (SELECT 'GRANT SELECT,INDEX,REFERENCES,update ON '||var_nomeBanco||'.'||RPAD(object_name,35,' ')||' TO permissoes_'||var_nomeBanco   AS cederPermissoes,
                    object_name
                    FROM dba_objects WHERE object_type = 'TABLE' AND owner = var_nomeBanco) LOOP
    BEGIN
      EXECUTE IMMEDIATE permissao.cederPermissoes;
      dbms_output.put_line(permissao.cederPermissoes||';');
    EXCEPTION WHEN OTHERS THEN
      dbms_output.put_line('ERRO!!! NAO POSSIVEL CEDER A PERMISSAO À TABELA: '||permissao.object_name);
    END;
  END LOOP;
  -- cedendo a permissao da nova role ao usuario desejado
  EXECUTE IMMEDIATE 'grant  permissoes_'||var_nomeBanco||' to '||var_nomeBancoFavorecido;
  dbms_output.put_line('------------------');
  dbms_output.put_line('GRANT PERMISSOES_'||var_nomeBanco||' TO '||var_nomeBancoFavorecido||';');
  dbms_output.put_line('------------------');
END;
/
-- Dropando a ROLE, se necessário
--DROP ROLE <nome_role>;

 

http://forum.imasters.com.br/public/style_emoticons/default/natal_smile.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.