Criando e Gerenciando Sinônimos – Oracle
Olá 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 já vi muitos desenvolvedores e iniciantes com dúvidas ao criarem sinônimos 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 Sinônimos. Apenas rodava o script por rodar.
Se você é uma dessas pessoas que so rodam scripts de criação de sinônimos e não entende como realmente cria ou gerencia sinônimos, vale apena dar uma lida neste artigo.
Mas o que seriam Sinônimos (Synonyms)?
– Sinônimos nada mais é que um alias de um objeto de um outro SCHEMA para outro.
Um sinônimo pode ser criado para uma table, view, sequence, procedure, function ou package no Banco de Dados Local.
Podemos também criar sinônimo via Database Link para um objeto em um outro Banco de Dados.
Existem 2 tipos de sinônimos:
– Sinônimos Privados (Default)
Sinônimos Privados são mais recomendados por motivo de segurança.
Criando Sinônimo Privado:
CREATE OR REPLACE SYNONYM <synonym_name> FOR <object_name>;
Dropando Sinônimo Privado:
DROP SYNONYM <synonym_name>;
– Sinônimos Públicos
Somente Usuários com Privilegio DBA podem criar Sinônimos Públicos.
O Sinônimo Publico estará disponível para todos os Usuários do Banco de Dados com os privilégios apropriados.
Criando Sinônimo Publico:
CREATE OR REPLACE PUBLIC SYNONYM <synonym_name> FOR <object_name>;
Dropando Sinônimo Publico:
DROP PUBLIC SYNONYM <synonym_name>;
Bom então para entendermos melhor simularemos um ambiente. Segue abaixo o ambiente:
– Temos o usuário(Schema)Bruno que contém a Tabela Cliente.
– Temos o usuário(Schema)Murassaki que gostaria de executar SELECT na Tabela Cliente do Usuário Bruno.
– Objetivo: Criar Sinônimo Privado para o Usuário Murassaki no qual terá privilégio de executar SELECT na Tabela Cliente pertencente ao Usuário Bruno.
Passo 1: Conectar com usuario SYS ou SYSTEM, conceder privilegio de Criar Sinônimo ao Usuário Murassaki:
SQL> GRANT CREATE SYNONYM TO MURASSAKI;
Grant succeeded.
Passo 2: Conectar com usuário Bruno e conceder privilegio de SELECT na tabela Cliente para o Usuário Murassaki:
SQL> GRANT SELECT ON CLIENTE TO MURASSAKI;
Grant succeeded.
Obs: Lembrando que neste passo 2 é o momento em define o nível de privilegio a ser concedido. Neste caso apenas o privilégio de SELECT.
Passo 3: Podemos verificar ao conectar no Usuário Murassaki antes de criarmos o sinônimo 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 sinônimo? 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.
Passo 4: Conectar com usuário Murassaki e criar o sinonimo da Tabela Cliente.
SQL> CREATE OR REPLACE SYNONYM CLIENTE FOR BRUNO.CLIENTE;
Synonym created.
Passo 5: Ainda conectado com usuário Murassaki já podemos testar o sinônimo:
SQL> SELECT * FROM CLIENTE;
ID NAME
---------- ------------------------------
1 JOSE
2 MARIA
3 JOANA
4 JOAO
Pronto Sinônimo criado com sucesso.
Espero ter ajudado e esclarecido algumas dúvidas.
Abraço