Schemas / Criar sinônimos

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
Avatar do usuário
MuLtAnI
Moderador
Moderador
Mensagens: 90
Registrado em: Ter, 01 Jun 2004 9:21 am
Localização: Videira - SC
Contato:

Bom dia, tenho o seguinte cenário:

Em um banco de dados com o usuário A e o schema A, surgiu a necessidade de se criar outro usuário, porém esse usuário deve ter acesso ao schema A, mas sem que ele tenha que fazer referência, ex.: SELECT * FROM A.TABELA.

Existe alguma maneira de fazer isso sem que precise criar sinônimos?

Pois não queria criar sinônimos para todos os objetos.

Obrigado
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5026
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Terá que criar sinônimo. Mas isso é uma tarefa muito fácil se você criar um script que monta o código pra você. Veja o exemplo:

Selecionar tudo

SELECT 'CREATE PUBLIC SYNONYM '||OBJECT_NAME||' FOR '||OBJECT_NAME||';'
FROM USER_OBJECTS
WHERE OBJECT_TYPE IN ('TABLE', 'FUNCTION', 'PROCEDURE','VIEW','PACKAGE')
  AND OBJECT_NAME LIKE 'TB_%'
  AND NOT EXISTS (SELECT SYNONYM_NAME
                  FROM ALL_SYNONYMS
                  WHERE OWNER='PUBLIC'
                    AND SYNONYM_NAME=OBJECT_NAME
                    AND TABLE_OWNER='seu_owner') 
:-o
erthal
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 130
Registrado em: Seg, 22 Nov 2004 1:45 pm
Localização: Niterói - RJ
Gustavo Erthal Jr. | TRISCAL
...................................................
Rio de Janeiro | (21) 2507-2010
São Paulo | (11) 3167-0526
www.triscal.com.br

Ou então você pode dar grants para o outro usuário acessar o schema A. Mas deve ter certeza de que esse outro usuário não terá objetos com o mesmo nome dos já existentes no schema A. Se houver você terá que usar os sinônimos, bastando para isso utilizar o script fornecido pelo dr_gori.
Avatar do usuário
MuLtAnI
Moderador
Moderador
Mensagens: 90
Registrado em: Ter, 01 Jun 2004 9:21 am
Localização: Videira - SC
Contato:

Olá erthal, mas como eu daria um grant para todo o schema?

é isso mesmo que preciso, este novo usuário não terá objeto nenhum, apenas acesso a todos os objetos do usuário A.

Eu não quero é ter que ficar criando um monte de sinônimos e fazendo referência aos objetos.

obrigado!

[]'s
erthal
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 130
Registrado em: Seg, 22 Nov 2004 1:45 pm
Localização: Niterói - RJ
Gustavo Erthal Jr. | TRISCAL
...................................................
Rio de Janeiro | (21) 2507-2010
São Paulo | (11) 3167-0526
www.triscal.com.br

Brother,

Então rode esse pequeno script no SQL*Plus, ou qualquer outra ferramenta que você utilize, como o PlSql Developer:

Selecionar tudo

BEGIN
     FOR R1 IN (SELECT OBJECT_NAME FROM USER_OBJECTS) LOOP
         EXECUTE IMMEDIATE ('GRANT SELECT, INSERT, UPDATE, DELETE ON '||R1.OBJECT_NAME||' TO NOVO_USUARIO');
     END LOOP;
END;
Lembrando somente de alterar o NOVO_USUARIO para o usuário que você quer dar os grants.

Se você só quiser dar grants para as tabelas, altere a tabela da cláusula FROM para a USER_TABLES, e o atributo da cláusula SELECT deverá ser TABLE_NAME.

Resolvido seu problema?
Mogli
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Ter, 04 Jul 2006 12:41 pm
Localização: Campinas - SP

Mas ainda vai ser necessário criar sinônimos, só dando grant não resolve.
Pode ser usado as linhas abaixo para gerar o script sql para isso:

Selecionar tudo

# script do GRANT
    sqlplus ContaOwner/ContaOwner
    SET HEADING OFF;
    SET PAGESIZE 0;
    SELECT 'GRANT SELECT,UPDATE,INSERT,DELETE ON ',TNAME, ' TO usuario_novo;' from tab;
    SELECT 'GRANT ALL ON ', SEQUENCE_NAME, ' TO usuario_novo;' from USER_SEQUENCES;
    SELECT 'GRANT ALL ON ', OBJECT_NAME, ' TO usuario_novo;' from USER_OBJECTS WHERE OBJECT_TYPE = 'FUNCTION';
    EXIT;

Selecionar tudo

 # script dos SINÔNIMOS
    sqlplus ContaOwner/ContaOwner
    SET HEADING OFF;
    SET PAGESIZE 0;
    SELECT 'CREATE SYNONYM ',TNAME, ' FOR ContaOwner.',TNAME, ';' from tab;
    SELECT 'CREATE SYNONYM ',SEQUENCE_NAME, ' FOR ContaOwner.',SEQUENCE_NAME, ';' from USER_SEQUENCES;
    SELECT 'CREATE SYNONYM ',VIEW_NAME, ' FOR ContaOwner.',VIEW_NAME, ';' from user_views;
    SELECT 'CREATE SYNONYM ',OBJECT_NAME, ' FOR ContaOwner.',OBJECT_NAME,';' from USER_OBJECTS WHERE OBJECT_TYPE = 'FUNCTION';
    EXIT;
Use as linhas geradas para o script do grant logando com a ContaOwner e as linhas geradas para os sinônimos com a conta do novo usuario.

Espero que tenha sido claro e que ajude.
Avatar do usuário
MuLtAnI
Moderador
Moderador
Mensagens: 90
Registrado em: Ter, 01 Jun 2004 9:21 am
Localização: Videira - SC
Contato:

valeu rapaziada, quanto a criar os sinônimos não é problema, eu apenas queria saber se havia alguma forma de fazer isso sem o uso dos sinônimos, imaginei que houvesse algo como compartihamento de schemas entre usuários.


obrigado pela força!

[]'s
Responder
  • Informação