O Oracle Database oferece uma infinidade de recursos que permitem aos administradores de banco de dados um controle fino sobre a utilização de recursos. Entre esses recursos, os ‘Profiles’ se destacam como uma maneira poderosa de gerenciar e limitar a utilização de recursos por um usuário ou um conjunto de usuários. Neste artigo, mergulharemos mais profundamente no conceito de profiles e exploraremos todos os recursos que podem ser limitados usando profiles no Oracle através de exemplos práticos.
Criando um Profile
A criação de um profile é feita utilizando o comando CREATE PROFILE
. Vamos criar um profile chamado limited_user
que limita o tempo de sessão ociosa para 30 minutos e permite no máximo 3 sessões simultâneas por usuário:
CREATE PROFILE limited_user LIMIT
IDLE_TIME 30
SESSIONS_PER_USER 3;
Utilizando os recursos do Profile
A seguir, detalharei cada recurso que pode ser controlado por um profile, fornecendo exemplos práticos para ilustrar sua utilização:
COMPOSITE_LIMIT
: Define um limite de uso geral de recursos do sistema. No exemplo abaixo, definimos esse limite como 5000 para o profilecomposite_limit_profile
:
CREATE PROFILE composite_limit_profile LIMIT
COMPOSITE_LIMIT 5000;
SESSIONS_PER_USER
: Define o número máximo de sessões que um usuário pode ter ao mesmo tempo. No exemplo abaixo, definimos esse limite como 3 para o profilesessions_profile
:
CREATE PROFILE sessions_profile LIMIT
SESSIONS_PER_USER 3;
CPU_PER_SESSION
: Define o número máximo de centissegundos de CPU que uma sessão pode consumir. No exemplo abaixo, definimos esse limite como 10000 para o profilecpu_per_session_profile
:
CREATE PROFILE cpu_per_session_profile LIMIT
CPU_PER_SESSION 10000;
CPU_PER_CALL
: Define o número máximo de centissegundos de CPU que uma chamada (uma única solicitação SQL) pode consumir. No exemplo abaixo, definimos esse limite como 3000 para o profilecpu_per_call_profile
:
CREATE PROFILE cpu_per_call_profile LIMIT
CPU_PER_CALL 3000;
CONNECT_TIME
: Define o número máximo de minutos que uma sessão pode durar. No exemplo abaixo, definimos esse limite como 120 para o profileconnect_time_profile
:
CREATE PROFILE connect_time_profile LIMIT
CONNECT_TIME 120;
IDLE_TIME
: Define o número máximo de minutos que uma sessão pode permanecer ociosa antes de ser encerrada. No exemplo abaixo, definimos esse limite como 30 para o profileidle_time_profile
:
CREATE PROFILE idle_time_profile LIMIT
IDLE_TIME 30;
LOGICAL_READS_PER_SESSION
: Define o número máximo de leituras lógicas (do buffer de banco de dados ou do disco) que uma sessão pode executar. No exemplo abaixo, definimos esse limite como 100000 para o profilereads_per_session_profile
:
CREATE PROFILE reads_per_session_profile LIMIT
LOGICAL_READS_PER_SESSION 100000;
LOGICAL_READS_PER_CALL
: Define o número máximo de leituras lógicas que uma chamada pode executar. No exemplo abaixo, definimos esse limite como 1000 para o profilereads_per_call_profile
:
CREATE PROFILE reads_per_call_profile LIMIT
LOGICAL_READS_PER_CALL 1000;
PRIVATE_SGA
: Define o tamanho máximo (em bytes) da área global do sistema (SGA) que pode ser alocada a uma sessão. No exemplo abaixo, definimos esse limite como 5000000 para o profileprivate_sga_profile
:
CREATE PROFILE private_sga_profile LIMIT
PRIVATE_SGA 5000000;
FAILED_LOGIN_ATTEMPTS
: Define o número máximo de tentativas de login falhas antes que a conta do usuário seja bloqueada. No exemplo abaixo, definimos esse limite como 3 para o profilefailed_logins_profile
:
CREATE PROFILE failed_logins_profile LIMIT
FAILED_LOGIN_ATTEMPTS 3;
PASSWORD_LIFE_TIME
: Define o número de dias antes que a senha do usuário expire e precise ser alterada. No exemplo abaixo, definimos esse limite como 60 para o profilepassword_life_profile
:
CREATE PROFILE password_life_profile LIMIT
PASSWORD_LIFE_TIME 60;
PASSWORD_GRACE_TIME
: Define o número de dias após a expiração da senha durante os quais o usuário ainda pode fazer login. No exemplo abaixo, definimos esse limite como 10 para o profilepassword_grace_profile
:
CREATE PROFILE password_grace_profile LIMIT
PASSWORD_GRACE_TIME 10;
PASSWORD_REUSE_TIME
: Define o número mínimo de dias antes que uma senha possa ser reutilizada. No exemplo abaixo, definimos esse limite como 30 para o profilepassword_reuse_time_profile
:
CREATE PROFILE password_reuse_time_profile LIMIT
PASSWORD_REUSE_TIME 30;
PASSWORD_REUSE_MAX
: Define o número mínimo de senhas únicas que o usuário deve usar antes de poder reutilizar uma senha. No exemplo abaixo, definimos esse limite como 10 para o profilepassword_reuse_max_profile
:
CREATE PROFILE password_reuse_max_profile LIMIT
PASSWORD_REUSE_MAX 10;
PASSWORD_LOCK_TIME
: Define o número de dias que uma conta permanece bloqueada após o número máximo de tentativas de login falhas ser atingido. No exemplo abaixo, definimos esse limite como 1 para o profilepassword_lock_profile
:
CREATE PROFILE password_lock_profile LIMIT
PASSWORD_LOCK_TIME 1;
PASSWORD_VERIFY_FUNCTION
: Define uma função PL/SQL que é usada para verificar a complexidade da senha quando uma senha é alterada ou criada. No exemplo abaixo, estamos utilizando a função padrão de verificação de senha do Oracleverify_function
:
CREATE PROFILE verify_func_profile LIMIT
PASSWORD_VERIFY_FUNCTION verify_function;
Alterar um profile
O comando ALTER PROFILE
é utilizado para modificar um profile existente.
Vamos supor que você tenha um profile chamado limited_user
que já foi criado, e você queira alterar o IDLE_TIME
para 60 minutos e o SESSIONS_PER_USER
para 5. Você faria isso da seguinte maneira:
ALTER PROFILE limited_user LIMIT
IDLE_TIME 60
SESSIONS_PER_USER 5;
Este comando modifica o profile limited_user
, atualizando o IDLE_TIME
e o SESSIONS_PER_USER
para os novos valores fornecidos.
Lembre-se de que qualquer alteração feita a um profile afetará todos os usuários aos quais o profile está atribuído. Além disso, as alterações feitas a um profile só entrarão em vigor na próxima vez que o usuário iniciar uma sessão; elas não afetarão as sessões já existentes.
Limitação
Um usuário só pode ter um profile atribuído a ele por vez. Entretanto, você pode alterar o profile de um usuário a qualquer momento usando o comando ALTER USER
.
Por exemplo, se você tiver um usuário chamado usuario1
e quiser alterar o profile dele de profile1
para profile2
, você faria isso da seguinte maneira:
ALTER USER usuario1 PROFILE profile2;
Lembre-se de que o novo profile deve já existir antes de você poder atribuí-lo a um usuário. Caso contrário, o Oracle retornará um erro.
Embora um usuário só possa ter um profile de cada vez, lembre-se de que os profiles são muito flexíveis. Você pode configurar um profile com qualquer combinação de limites de recursos que se adequar às suas necessidades.
Conclusão
Os Profiles no Oracle são uma ferramenta extremamente útil que pode ser utilizada para manter um controle preciso sobre a utilização de recursos do banco de dados. Através dos exemplos acima, você pode perceber como cada recurso pode ser limitado de maneira granular para se adequar às suas necessidades específicas.