sábado, 25 de março de 2017

Gerenciamento de Usuários - Banco de dados Oracle

Os usuários no banco de dados podem ser gerenciados (criados / alterados/ excluídos) de diversas formas, abaixo estamos descrevendo algumas delas, de forma simples.


1) Criar um usuário no banco de dados


$ sqlplus / as sysdba

SQL> CREATE USER <nome_do_usuário> IDENTIFIED BY <senha> DEFAULT TABLESPACE <tablespace_padrão> TEMPORARY TABLESPACE <tablespace_TEMP> PASSWORD EXPIRE


2) Conceder privilégio para um usuário no banco de dados

$ sqlplus / as sysdba

SQL> GRANT CONNECT, RESOURCE TO <usuário>

Obs.: Existem diversos GRANTs que podem ser concedidos aos usuários no banco de dados Oracle, aqui temos apenas um exemplo.



3) Alterar a senha de um usuário no banco de dados

$ sqlplus / as sysdba

SQL> alter user system identified by <senha>;

SQL> exit



4) Remover usuário no banco de dados

sqlplus "/ as sysdba"

SQL> drop user <usuário> cascade;

SQL> exit



5) Quantidade de usuários no banco de dados

$ sqlplus / as sysdba

SQL> select count(*) from dba_users;



6) Quantidade de usuários conectados no momento

Para verificarmos os usuários conectados no exato momento em um banco de dados Oracle, podemos utilizar os comandos abaixo:

    SQL> select username from v$session where username is not null;

    SQL> select count(*) from v$transaction;


Para listar os usuários que possuam uma identificação específica, neste caso XPTO no nome, podemos:

    SQL> select username from v$session where username like '%XPTO%';


Para listar apenas usuários com status ativo no banco de dados:

    SQL> select username from v$session where status like '%ACTIVE%';


Para um usuário específico, podemos utilizar:

    SQL> select username from v$session where username='ADCXPTORDT';



7) Exibir usuários e seus respectivos processos em execução

Existem diversas consultas que podem ser feitas no banco de dados para obtermos informações da sessão do usuário, para isso devemos consultar as views: v$session e/ou a gv$session se for um ambiente RAC

Podemos verificar o conteúdo (campos) das views (v$session / gv$session) com os comandos:

SQL> desc v$session
SQL> desc gv$session


Abaixo seguem alguns exemplos de consultas que podemos fazer:

col MACHINE format a25
col USERNAME format a15
set pagesize 1000

select sid,serial#,spid,username,status,machine from v$session order by 1,2;

select serial#, sid, process, status, username, Logon_Time from v$session where username like '%EMPLOY%';

select serial#, sid, process, status, username, Logon_Time, Program, event from v$session where username like '%FINAN%';

select status, username, Logon_Time, Program from v$session where username like '%ABCD%';

select username, status from v$session where username like '%XPTO%';


Onde:

username    => nome do usuário da sessão.
status          => indica se a sessão está ativa ou inativa.
machine      => informa a máquina de onde a requisição está sendo feita.
Logon_time => indica o horário em que a sessão fez a conexão com o banco de dados (logon).

Program     => o programa utilizado para executar a sessão.
event           => informa o evento atual da sessão.
sid               => identificador da sessão
serial#        => juntamente com o sid forma a identificação da sessão no banco de dados.

process       => informa o processo de sistema operacional relacionado com a sessão atual do banco de dados.


O resultado será semelhante a:

SERIAL#  SID PROCESS   STATUS   USERNAME  LOGON_TIME         PROGRAM    EVENT
---------------- -------  ------------------ ---------------- ---------------------- --------------------------------- --------------------- -----------------------------------
     23655  6197 1820:6296   ACTIVE    XPTO            12/03/2014 15:18:05  dllhost.exe   SQL*Net message from client