quarta-feira, 9 de abril de 2014

Criando usuários no Oracle, Removendo e Gerenciando

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
 USER_COL_PRIVS_RECD

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.