Para
criar um novo usuário de acesso no banco de dados Oracle, é necessário se
conectar como um usuário que tenha acesso DBA.
SQL> CREATE USER usuario123
IDENTIFIED BY senha123;
User created.
Após criarmos um novo usuário precisamos adicionar os seus
GRANTS, ou seja, as permissões para o usuário:
SELECT,
INSERT, DELETE, INDEX, UPDATE, ALTER, CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, e quaisquer outras necessárias.
SQL> GRANT CREATE TABLE, CREATE
VIEW, CREATE SEQUENCE TO usuario123;
Grant succeeded.
Criando uma ROLE de privilégios para ser usada para vários
usuários, uma role é o conjunto de privilégios que guardamos armazenados com a
finalidade de proporcionar uma facilitação de manuseio na hora de se conceder privilégios,
evitando a digitação de todos os privilégios, passando a ter que digitar
somente o nome da role, ou seja, uma ROLE é um Grupo que tem todas as
permissões que você desejar, e pode incluir vários usuários que queira que
utilize aquelas permissões. No exemplo, o nome da ROLE é "aspirante"
e não há privilégio dentro dela.
SQL> CREATE ROLE aspirante;
Role created.
Incluiremos os privilégios CREATE TABLE e CREATE VIEW (para
criarmos tabelas e views), para a ROLE "aspirante":
SQL> GRANT CREATE TABLE, CREATE VIEW TO aspirante;
Grant succeeded.
Como a ROLE já possui alguns privilégios definidos, vamos adicionar
o nosso usuário a ela. Para usar suas permissões, o usuário "usuario123"
está recebendo os GRANTS da ROLE ASPIRANTE, que são CREATE TABLE e CREATE VIEW
(somente para criar tabelas e views):
SQL> GRANT aspirante TO usuario123;
Grant succeeded.
Agora vamos mudar a senha do nosso usuário “usuario123” que era “senha123”, e vamos muda-la para “supersenha”:
SQL> ALTER USER usuario123
IDENTIFIED BY supersenha;
User altered.
Agora vamos dar um novo GRANT para o “usuario123” para a tabela s_emp,
somente para consulta.
SQL> GRANT SELECT ON s_emp TO
usuario123;
Grant succeeded.
O exemplo abaixo mostra como adicionar um novo GRANT a uma
ROLE, relacionado com colunas específicas de uma tabela no caso s_dept e atribuindo a permissão de UPDATE
para o usuário "usuario123"
e para a ROLE "aspirante".
SQL> GRANT UPDATE(name,region_id)
ON s_dept TO usuario123,aspirante;
Grant succeeded.
Este exemplo mostra como dar GRANT para um usuário em uma tabela
e este usuário ter permissão de passar este mesmo GRANT para outros usuários.
SQL> GRANT SELECT ON s_emp usuario123
WITH GRANT OPTION;
Grant succeeded.
Para deixar qualquer usuário executar um SELECT na tabela s_dept
que é do “usuario123”, usamos o GRANT
abaixo:
SQL> GRANT SELECT ON usuario123.s_dept
TO PUBLIC;
Grant succeeded.
Para sabermos quais privilégios nosso usuário possui, temos
que acessar o DICIONÁRIO DE DADOS nas seguintes tabelas:
ROLE_SYS_PRIVS
ROLE_TAB_PRIVS
USER_ROLE_PRIVS
USER_TAB_PRIVS_MADE
USER_TAB_PRIVS_RECD
USER_COL_PRIVS_MADE
Para ver as ROLES que o “usuario123” tem acesso, execute a
query abaixo:
SQL> SELECT GRANTED_ROLE, OS_GRANTED FROM USER_ROLE_PRIVS
WHERE USERNAME = 'usuario123';
GRANTED_ROLE OS_
------------------------------
---
CONNECT NO
DBA NO
MANAGER NO
Para tirar um privilégio do “usuário123”, use REVOKE como
abaixo:
SQL> REVOKE SELECT ON s_emp FROM usuario123;
Revoke succeeded.
No exemplo acima tiramos o privilégio de SELECT do USUÁRIO “usuario123”.
Como criar sinônimo:
Criando um sinônimo para uma tabela: no caso está sendo criado
um sinônimo com o nome "departamento" para a tabela s_dept que
pertence ao “usuario123”:
SQL> CREATE SYNONYM departamento FOR usuario123.s_dept;
Synonym created.
Agora estamos criando um sinônimo para uma VIEW que se chama
dept_sum_vu e o nome do sinônimo criado é “soma_departamento”:
SQL> CREATE SYNONYM soma_departamento FOR dept_sum_vu;
Synonym created.
Agora estamos criando um sinônimo público, com nome "recepcao"
referente à tabela s_dept do “usuário123”:
SQL> CREATE PUBLIC SYNONYM recepcao
FOR usuario123.s_dept;
Synonym created.
Para dropar (apagar) um sinônimo é simples:
SQL> DROP SYNONYM departamento;
Synonym dropped.