Bravanet 0 Denunciar post Postado Novembro 16, 2007 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
Motta 645 Denunciar post Postado Novembro 16, 2007 O user1 faz : grant select any table on user2 mas se não me engano o dba tem de dar um grant option para o user1 fazer isto. Para mais detalhes veja o Manuel. http://download.oracle.com/docs/cd/B10501_...privs.htm#15311 Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Novembro 21, 2007 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
MonTiLLa 1 Denunciar post Postado Novembro 21, 2007 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