Criando e Gerenciando Sinônimos - Oracle
domingo, junho 21st, 2009Olá Pessoal depois de uma longa jornada de estudos para prova 1Z0-042, finalmente de volta postando mais um artigo.
Hoje iremos abordar um assunto que para muitos pode ser fácil, mas ja vi muitos desenvolvedores e iniciantes com dúvidas ao criarem sinonimos e não entenderem o que realmente estão fazendo. Eu mesmo era uma dessas pessoas que no início não sabia o que estava fazendo quando rodava scripts de criação de Sinonimos. Apenas rodava o script por rodar.
Se você é uma dessas pessoas que so rodam scripts de criação de sinonimos e não entende como realmente cria ou gerencia sinonimos, vale apena dar uma lida neste artigo.
Mas o que seriam Sinonimos(Synonyms)?
- Sinonimos nada mais é que um alias de um objeto de um outro SCHEMA para outro.
Um sinonimo pode ser criado para uma table, view, sequence, procedure, function ou package no Banco de Dados Local.
Podemos também criar sinonimo via Database Link para um objeto em um outro Banco de Dados.
——————————————————————————————————-
Existem 2 tipos de sinonimos:
- Sinonimos Privados (Default)
Sinonimos Privados são mais recomendados por motivo de segurança.
Criando Sinonimo Privado:
CREATE OR REPLACE SYNONYM <synonym_name> FOR <object_name>;
Dropando Sinonimo Privado:
DROP SYNONYM <synonym_name>;
- Sinonimos Públicos
Somente Usuarios com Privilegio DBA podem criar Sinonimos Publicos.
O Sinonimo Publico estará disponivel para todos os Usuários do Banco de Dados com os privilégios apropriados.
Criando Sinonimo Publico:
CREATE OR REPLACE PUBLIC SYNONYM <synonym_name> FOR <object_name>;
Dropando Sinonimo Publico:
DROP PUBLIC SYNONYM <synonym_name>;
——————————————————————————————————-
Bom então para entendermos melhor simularemos um ambiente. Segue abaixo o ambiente:
- Temos o usuario(Schema)Bruno que contém a Tabela Cliente.
- Temos o usuairo(Schema)Murassaki que gostaria de executar SELECT na Tabela Cliente do Usuario Bruno.
- Objetivo: Criar Sinonimo Privado para o Usuario Murassaki no qual terá privilégio de executar SELECT na Tabela Cliente pertencente ao Usuario Bruno.
——————————————————————————————————-
Passo1: Conectar com usuario SYS ou SYSTEM, conceder privilegio de Criar Sinonimo ao Usuario Murassaki:
SQL> GRANT CREATE SYNONYM TO MURASSAKI;
Grant succeeded.
——————————————————————————————————-
Passo2: Conectar com usuario Bruno e conceder privilegio de SELECT na tabela Cliente para o Usuario Murassaki:
SQL> GRANT SELECT ON CLIENTE TO MURASSAKI;
Grant succeeded.
Obs:Lembrando que neste passo2 é o momento em define o nível de privilegio a ser concedido. Neste caso apenas o privilégio de SELECT.
——————————————————————————————————-
Passo3: Podemos verificar ao conectar no Usuario Murassaki antes de criarmos o sinonimo notaremos que ja temos acesso a tabela Cliente:
SQL> SELECT * FROM BRUNO.CLIENTE;
ID NAME
———- ——————————
1 JOSE
2 MARIA
3 JOANA
4 JOAO
Alguns podem estar se perguntando, mas pra que o sinonimo? Ai é que está, ele serve para não precisar referenciar o nome do <Usuario.Tabela> e sim apenas o nome da Tabela como se fosse parte do Schema Murassaki.
——————————————————————————————————-
Passo4: Conectar com usuario Murassaki e criar o sinonimo da Tabela Cliente.
SQL> CREATE OR REPLACE SYNONYM CLIENTE FOR BRUNO.CLIENTE;
Synonym created.
——————————————————————————————————-
Passo5: Ainda conectado com usuario Murassaki ja podemos testar o sinonimo:
SQL> SELECT * FROM CLIENTE;
ID NAME
———- ——————————
1 JOSE
2 MARIA
3 JOANA
4 JOAO
——————————————————————————————————-
Pronto Sinonimo criado com sucesso.
Espero ter ajudado e esclarecido algumas dúvidas.
Abraço
Bruno Murassaki

