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