Pular para o conteúdo

Regra de Segurança em Senhas de Usuários ORACLE

Regra de Segurança em Senhas de Usuários ORACLE

Salve galeraaaaaaaaaaaa..!!

Já faz muito tempo que eu não postava nada aqui heim… é.. muito tempo mesmo..!!
Primeiro quero parabenizar ao companheiros que estiveram no OOW e deixaram seus FEEDBACKS sobre como foi o evento, não vou citar nomes pois posso esquecer de alguém…

E Principalmente parabenizar ao Willians pelo excelente site, que a cada dia vem crescendo mais e mais, existem foruns sobre ORACLE.. existem blogs de oracle.. e existe o GPO.

Ahhh.. claro neh.. tenho que parabenizar aos profissionais que ajudam a fazer do portal GPO o que é hoje e continuará sendo amanhã e por muito tempo.

Poxa.. por quantas vezes eu precisei de ajuda e corri para o GPO..

Infelizmente hoje em dia eu somente tenho acesso a administração ORACLE em minha casa, no trabalho temos base 8i e 10g, mas fui retirado da função que exercia em auxiliar o DBA da empresa na administração dos servidores, onde aprendi muito… mas não deixei de aprender e buscar conhecimento.. como muitos aqui dizem.. não adianta você ter N cursos.. se não corre atras e faz a sua parte.. nenhum curso vai te ensinar tudo, ele apenas irá te dar um “NORTE”, ai basta você correr atras… Bom.. eu tentei fazer um curso a uns 2 anos atras.. mas… mas…

Adivinhem… oq aconteceu… fui fazer o curso de FORMAÇÃO DBA ORACLE 10g… e como em um passe de mágica a escola sumiu.. é.. isto mesmo.. sumiu.. de uma hora para outra eles sumiram.. e eu fiquei literalmente “chupando o dedo”…. Então agora eu apenas tenho o meu esforço para aprender.. se eu não fizer minha parte.. ninguem vai fazer por mim.. então.. uma dica aqueles que querem começar..

NÃO DESISTAM… LUTEM.. BATALHEM… CORRAM ATRAS DE SEUS SONHOS..

Se Deus quiser.. e Ele quer.. tenho certeza.. meio do ano estou tirando minha certificaçao OCA.. e sem o auxilio de nenhum curso.. somente com meu esforço e auxilio dos amigos aqui no forum.. que tiram muitas duvidas.. e logo no fim do ano tiro a OCP… é… pra cima deles…

Bom.. vamos falar doq realmete interessa neste post…!!

Eu fui fazer um teste em uma empresa e uma das questões eram como você faria para criar uma regra de segurança para as senhas dos usuários ORACLE… eu acho q respondi certo.. mas resolvi correr atras para fazer sair do papel.. e rodar no banco neh..

Perguntei no forum GPO e o Ishii me deu uma dica.. depois o Drbs (David)..fui procurar saber mais e acabei achando um post do Alphamek (Rodrigo Almeida – Parente próximo do Jack Bauer e Chuck Norris) falando sobre criar regra de segurança para os usuários e senhas no ORACLE…
http://imasters.uol.com.br/artigo/3384/oracle/perfil_de_usuarios_profile_-_parte_01

Resolvi criar uma function com as regras de validação para senhas dentro do ORACLE….

Abaixo um passo a passo para a criação do script, perfil e usuário ORACLE com a regra de senha…
Espero que isto ajude a quem precise.. da mesma maneira que me ajudou….

PLSQL
CREATE OR REPLACE FUNCTION VALIDASENHA(USUARIO VARCHAR2,SENHA VARCHAR2, OLD_SENHA VARCHAR2) 
RETURN BOOLEAN 
IS 
Result BOOLEAN := TRUE; 
isNumericA BOOLEAN := TRUE; 
isNumericB BOOLEAN := TRUE; 
isNumericC BOOLEAN := TRUE; 
isCharactersA BOOLEAN := TRUE; 
isCharactersB BOOLEAN := TRUE; 
isCharactersC BOOLEAN := TRUE; 
isSpecialCharA BOOLEAN := TRUE; 
isSpecialCharB BOOLEAN := TRUE; 
isSpecialCharC BOOLEAN := TRUE; 
isAchouNumeric BOOLEAN := FALSE; 
isAchouChar BOOLEAN := FALSE; 
isAchouSpecialChar BOOLEAN := FALSE; 
tamanho NUMBER; 

BEGIN 
tamanho := length(Senha); 
/* SOMENTE PERMITE USUÁRIOS COM NO MÍNIMO 5 CARACTERES E SENHAS COM NO MÍNIMO 10 CARACTERES... */ 

IF LENGTH(USUARIO) < 5 THEN 
Result := FALSE; 
raise_application_error(-20001, Usuário tem que conter no mínimo 5 caracteres.'); 
ELSIF tamanho < 10 THEN 
Result := FALSE; 
raise_application_error(-20002, 'a senha tem que ter no mínimo 10 Caracteres, entre números, letras e Caracteres Especiais.'); 
ELSIF TRIM(usuario) = TRIM(senha) THEN 
Result := FALSE; 
raise_application_error(-20003, 'A Senha não pode ser igua ao nome do Usuário.'); 
ELSE 
FOR i IN 1..tamanho-2 
LOOP 
/* Esta validação somente irá permitir que seja digitado 2 números por vez.. Ex: PassWord : A11B22C33 Alimentando variáveis com as informações obtidas com as verificações do campo da senha... Identifica se os valores da senha são do Números. */ 
isNumericA := substr(Senha,i, 1) IN ('0','1','2','3','4','5','6','7','8','9'); 
isNumericB := substr(Senha,i+1,1) IN ('0','1','2','3','4','5','6','7','8','9'); 
isNumericC := substr(Senha,i+2,1) IN ('0','1','2','3','4','5','6','7','8','9'); 

/* Esta validação somente irá permitir que seja digitado 2 letras por vez.. Ex: PassWord : AA11BB22CC33 Alimentando variáveis com as informações obtidas com as verificações do campo da senha... Identifica se os valores da senha são Letras (Maiusculas/Minusculas). */ 

isCharactersA := substr(Senha,i, 1) IN ('a','b','c','d','e','f','g','h','i','j','k','l','m','n', 'o','p','q','r','s','t','u','v','x','z','w','y', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N', 'O','P','Q','R','S','T','U','V','X','Z','W','Y'); 
isCharactersB := substr(Senha,i+1,1) IN ('a','b','c','d','e','f','g','h','i','j','k','l','m','n', 'o','p','q','r','s','t','u','v','x','z','w','y', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N', 'O','P','Q','R','S','T','U','V','X','Z','W','Y'); 
isCharactersC := substr(Senha,i+2,1) IN ('a','b','c','d','e','f','g','h','i','j','k','l','m','n', 'o','p','q','r','s','t','u','v','x','z','w','y', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N', 'O','P','Q','R','S','T','U','V','X','Z','W','Y'); 

/* Esta validação somente irá permitir que seja digitado 2 Caracteres Especiais por vez.. Ex: PassWord : AA11+.BB-*22/=CC?@33 Alimentando variáveis com as informações obtidas com as verificações do campo da senha... Identifica se os valores da senha são do tipo CARACTER ESPECIAL. */ 

isSpecialCharA := substr(Senha,i, 1) IN (' ','ç','Ç','!','@','#',')

Bom, com a dica do David.. eu criei esta function com o usuário SYS… Após isto rode o script abaixo, que irá criar um profile onde você deverá adicionar os usuários.. Assim vc pode criar uma regra de login para cada profile…

SQL
CREATE PROFILE TESTE_PROFILE LIMIT
 FAILED_LOGIN_ATTEMPTS 5
 PASSWORD_VERIFY_FUNCTION VALIDASENHA;

Na criação deste Profile eu apenas deixei a opção de número máximo de falhas na tentativa de login.. Se quiserem podem colocar outros parametros também… A linha PASSWORD_VERIFY_FUNCTION informa que haverá uma funcion para validação de senha.. e a VALIDASENHA é a function criada… Após criar a function e o Profile.. hora de criar o usuário neh.. hehe..

SQL
 CREATE USER DBAREGIS IDENTIFIED BY "R3G1S@R@UJ0"
 DEFAULT TABLESPACE TBSESTUDOSDAT
 TEMPORARY TABLESPACE TBSESTUDOSTMP
 PROFILE TESTE_PROFILE
 PASSWORD EXPIRE;

Bom.. criei um usuário com mais de 5 caracteres.. pois é uma regra que foi colocado na function de validação… Determinei que o usuário DBAREGIS será do grupo TESTE_PROFILE, lembrando que vc poderá ter um profile para cada grupo de usuários e assim uma regra de validação para cada um… com a linha “PASSWORD EXPIRE” informei que este usuário tem sua senha expirada.. assim no próximo login será solicitado ao mesmo que realize a troca de senha, ou até mesmo quando vc determinar na criação do profile ou quando desejar o tempo em que a senha irá expirar…. SQL> ALTER PROFILE TESTE_PROFILE LIMIT PASSWORD_LIFE_TIME ; Quando não determino esta opção, o PASSWORD_LIFE_TIME fica por default como UNLIMITED, ou seja, ele não irá expirar a senha.. Para consultar esta informação e outras sobre os PROFILE´S criados, rode o script abaixo… SQL> select resource_name,limit from dba_profiles where profile=’TESTE_PROFILE’; Bom.. então é isso.. assim vc não correrá o risco de que algum usuário altere sua senha para apenas 1 letra ou data de nascimento.. coisa que é muito falha.. heheh.. sei que o POST está bem grande.. mas estou empolgado hoje.. hauhauhahahuahh!!! Abraços pessoal… ,’%’,’^’,’&’,’.’,'{‘,’}’,’*’,'(‘,’)’,’_’,’/’,’\’, ‘|’,’/’,”,’,’,’;’,’:’,’-‘,’+’,’=’,’?’,’~’,'”‘,'[‘,’]’,’|’,” || chr(39)); isSpecialCharB := substr(Senha,i+1,1) IN (‘ ‘,’ç’,’Ç’,’!’,’@’,’#’,’

Bom, com a dica do David.. eu criei esta function com o usuário SYS… Após isto rode o script abaixo, que irá criar um profile onde você deverá adicionar os usuários.. Assim vc pode criar uma regra de login para cada profile… CREATE PROFILE TESTE_PROFILE LIMIT FAILED_LOGIN_ATTEMPTS 5 PASSWORD_VERIFY_FUNCTION VALIDASENHA; Na criação deste Profile eu apenas deixei a opção de número máximo de falhas na tentativa de login.. Se quiserem podem colocar outros parametros também… A linha PASSWORD_VERIFY_FUNCTION informa que haverá uma funcion para validação de senha.. e a VALIDASENHA é a function criada… Após criar a function e o Profile.. hora de criar o usuário neh.. hehe..

SQL
 CREATE USER DBAREGIS IDENTIFIED BY "R3G1S@R@UJ0"
 DEFAULT TABLESPACE TBSESTUDOSDAT
 TEMPORARY TABLESPACE TBSESTUDOSTMP
 PROFILE TESTE_PROFILE
 PASSWORD EXPIRE;

Bom.. criei um usuário com mais de 5 caracteres.. pois é uma regra que foi colocado na function de validação… Determinei que o usuário DBAREGIS será do grupo TESTE_PROFILE, lembrando que vc poderá ter um profile para cada grupo de usuários e assim uma regra de validação para cada um… com a linha “PASSWORD EXPIRE” informei que este usuário tem sua senha expirada.. assim no próximo login será solicitado ao mesmo que realize a troca de senha, ou até mesmo quando vc determinar na criação do profile ou quando desejar o tempo em que a senha irá expirar….

SQL
SQL> ALTER PROFILE TESTE_PROFILE LIMIT PASSWORD_LIFE_TIME ;

Quando não determino esta opção, o PASSWORD_LIFE_TIME fica por default como UNLIMITED, ou seja, ele não irá expirar a senha.. Para consultar esta informação e outras sobre os PROFILE´S criados, rode o script abaixo… SQL> select resource_name,limit from dba_profiles where profile=’TESTE_PROFILE’; Bom.. então é isso.. assim vc não correrá o risco de que algum usuário altere sua senha para apenas 1 letra ou data de nascimento.. coisa que é muito falha.. heheh.. sei que o POST está bem grande.. mas estou empolgado hoje.. hauhauhahahuahh!!! Abraços pessoal…

,’%’,’^’,’&’,’.’,'{‘,’}’,’*’,'(‘,’)’,’_’,’/’,’\’, ‘|’,’/’,”,’,’,’;’,’:’,’-‘,’+’,’=’,’?’,’~’,'”‘,'[‘,’]’,’|’,” || chr(39)); isSpecialCharC := substr(Senha,i+2,1) IN (‘ ‘,’ç’,’Ç’,’!’,’@’,’#’,’ Bom, com a dica do David.. eu criei esta function com o usuário SYS… Após isto rode o script abaixo, que irá criar um profile onde você deverá adicionar os usuários.. Assim vc pode criar uma regra de login para cada profile…

SQL
CREATE PROFILE TESTE_PROFILE LIMIT FAILED_LOGIN_ATTEMPTS 5 PASSWORD_VERIFY_FUNCTION VALIDASENHA;

Na criação deste Profile eu apenas deixei a opção de número máximo de falhas na tentativa de login.. Se quiserem podem colocar outros parametros também… A linha PASSWORD_VERIFY_FUNCTION informa que haverá uma funcion para validação de senha.. e a VALIDASENHA é a function criada… Após criar a function e o Profile.. hora de criar o usuário neh.. hehe..

SQL
CREATE USER DBAREGIS IDENTIFIED BY "R3G1S@R@UJ0" DEFAULT TABLESPACE TBSESTUDOSDAT TEMPORARY TABLESPACE TBSESTUDOSTMP PROFILE TESTE_PROFILE PASSWORD EXPIRE;

Bom.. criei um usuário com mais de 5 caracteres.. pois é uma regra que foi colocado na function de validação… Determinei que o usuário DBAREGIS será do grupo TESTE_PROFILE, lembrando que vc poderá ter um profile para cada grupo de usuários e assim uma regra de validação para cada um… com a linha “PASSWORD EXPIRE” informei que este usuário tem sua senha expirada.. assim no próximo login será solicitado ao mesmo que realize a troca de senha, ou até mesmo quando vc determinar na criação do profile ou quando desejar o tempo em que a senha irá expirar…. SQL> ALTER PROFILE TESTE_PROFILE LIMIT PASSWORD_LIFE_TIME ; Quando não determino esta opção, o PASSWORD_LIFE_TIME fica por default como UNLIMITED, ou seja, ele não irá expirar a senha.. Para consultar esta informação e outras sobre os PROFILE´S criados, rode o script abaixo… SQL> select resource_name,limit from dba_profiles where profile=’TESTE_PROFILE’; Bom.. então é isso.. assim vc não correrá o risco de que algum usuário altere sua senha para apenas 1 letra ou data de nascimento.. coisa que é muito falha.. heheh.. sei que o POST está bem grande.. mas estou empolgado hoje.. hauhauhahahuahh!!! Abraços pessoal… ,’%’,’^’,’&’,’.’,'{‘,’}’,’*’,'(‘,’)’,’_’,’/’,’\’, ‘|’,’/’,”,’,’,’;’,’:’,’-‘,’+’,’=’,’?’,’~’,'”‘,'[‘,’]’,’|’,” || chr(39));

PLSQL
IF isNumericA AND isNumericB AND isNumericC THEN 
Result := FALSE; 
raise_application_error(-20004, 'A Ssenha não pode ter uma sequencia de 2 números.'); 
END IF; 

IF isCharactersA AND isCharactersB AND isCharactersC THEN 
Result := FALSE; 
raise_application_error(-20005, 'A Senha não pode ter uma sequencia com mais de 2 letras.'); 
END IF; 

IF isSpecialCharA AND isSpecialCharB AND isSpecialCharC THEN 
Result := FALSE; 
raise_application_error(-20006, 'A Senha não pode ter uma sequencia com mais de 2 caracteres especials.'); 
END IF; 

END LOOP; 

FOR i IN 1..tamanho LOOP 

/* Esta validação somente irá verificar se existe pelo menos 1 caracter de cada tipo, pois é obrigatório a digitação de pelo menos 1 (UM) caracter de cada tipo.. Ex: PassWord : AA11+.BB-*22/=CC?@33 Alimentando variáveis com as informações obtidas com as verificações do campo da senha... Identifica se os valores da senha são do tipo NUMEROS, LETRAS (Maiusculas/Minusculas) e CARACTERES ESPECIAIS. */ 

isNumericA := substr(Senha,i, 1) IN ('0','1','2','3','4','5','6','7','8','9'); isCharactersA := substr(Senha,i, 1) IN ('a','b','c','d','e','f','g','h','i','j','k','l', 'm','n','o','p','q','r','s','t','u','v','x','z','w','y', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N', 'O','P','Q','R','S','T','U','V','X','Z','W','Y'); isSpecialCharA := substr(Senha,i, 1) IN (' ','ç','Ç','!','@','#','

Bom, com a dica do David.. eu criei esta function com o usuário SYS… Após isto rode o script abaixo, que irá criar um profile onde você deverá adicionar os usuários.. Assim vc pode criar uma regra de login para cada profile…

SQL
CREATE PROFILE TESTE_PROFILE LIMIT FAILED_LOGIN_ATTEMPTS 5 PASSWORD_VERIFY_FUNCTION VALIDASENHA;

Na criação deste Profile eu apenas deixei a opção de número máximo de falhas na tentativa de login.. Se quiserem podem colocar outros parametros também… A linha PASSWORD_VERIFY_FUNCTION informa que haverá uma funcion para validação de senha.. e a VALIDASENHA é a function criada… Após criar a function e o Profile.. hora de criar o usuário neh.. hehe..

SQL
CREATE USER DBAREGIS IDENTIFIED BY "R3G1S@R@UJ0" DEFAULT TABLESPACE TBSESTUDOSDAT TEMPORARY TABLESPACE TBSESTUDOSTMP PROFILE TESTE_PROFILE PASSWORD EXPIRE;

Bom.. criei um usuário com mais de 5 caracteres.. pois é uma regra que foi colocado na function de validação… Determinei que o usuário DBAREGIS será do grupo TESTE_PROFILE, lembrando que vc poderá ter um profile para cada grupo de usuários e assim uma regra de validação para cada um… com a linha “PASSWORD EXPIRE” informei que este usuário tem sua senha expirada.. assim no próximo login será solicitado ao mesmo que realize a troca de senha, ou até mesmo quando vc determinar na criação do profile ou quando desejar o tempo em que a senha irá expirar…. SQL> ALTER PROFILE TESTE_PROFILE LIMIT PASSWORD_LIFE_TIME ; Quando não determino esta opção, o PASSWORD_LIFE_TIME fica por default como UNLIMITED, ou seja, ele não irá expirar a senha.. Para consultar esta informação e outras sobre os PROFILE´S criados, rode o script abaixo… SQL> select resource_name,limit from dba_profiles where profile=’TESTE_PROFILE’; Bom.. então é isso.. assim vc não correrá o risco de que algum usuário altere sua senha para apenas 1 letra ou data de nascimento.. coisa que é muito falha.. heheh.. sei que o POST está bem grande.. mas estou empolgado hoje.. hauhauhahahuahh!!! Abraços pessoal…

,’%’,’^’,’&’,’.’,'{‘,’}’,’*’, ‘(‘,’)’,’_’,’/’,’\’,’|’,’/’,”,’,’,’;’,’:’,’-‘,’+’, ‘=’,’?’,’~’,'”‘,'[‘,’]’,’|’,” || chr(39));

PLSQL
IF isNumericA THEN 
isAchouNumeric := TRUE; 
END IF; 

IF isCharactersA THEN 
isAchouChar := TRUE; 
END IF; 

IF isSpecialCharA THEN 
isAchouSpecialChar := TRUE; 
END IF; 
END LOOP; 

IF NOT (isAchouNumeric AND isAchouChar AND isAchouSpecialChar) THEN 
Result := FALSE; 
raise_application_error(-20007, 'A Senha deve conter pelo menos 2 números, 2 letras, 2 Caracteres especiais e mais 2 caracteres intercalados.'); 
END IF; 
END IF; 
RETURN(Result); 
END VALIDASENHA;

Bom, com a dica do David.. eu criei esta function com o usuário SYS…
Após isto rode o script abaixo, que irá criar um profile onde você deverá adicionar os usuários..
Assim vc pode criar uma regra de login para cada profile…

SQL
CREATE PROFILE TESTE_PROFILE LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_VERIFY_FUNCTION VALIDASENHA;

Na criação deste Profile eu apenas deixei a opção de número máximo de falhas na tentativa de login..
Se quiserem podem colocar outros parametros também…

A linha PASSWORD_VERIFY_FUNCTION informa que haverá uma funcion para validação de senha.. e a VALIDASENHA é a function criada…

Após criar a function e o Profile.. hora de criar o usuário neh.. hehe..

SQL
CREATE USER DBAREGIS IDENTIFIED BY "R3G1S@R@UJ0"
DEFAULT TABLESPACE TBSESTUDOSDAT
TEMPORARY TABLESPACE TBSESTUDOSTMP
PROFILE TESTE_PROFILE
PASSWORD EXPIRE;

Bom.. criei um usuário com mais de 5 caracteres.. pois é uma regra que foi colocado na function de validação…
Determinei que o usuário DBAREGIS será do grupo TESTE_PROFILE, lembrando que vc poderá ter um profile para cada grupo de usuários e assim uma regra de validação para cada um…
com a linha “PASSWORD EXPIRE” informei que este usuário tem sua senha expirada.. assim no próximo login será solicitado ao mesmo que realize a troca de senha, ou até mesmo quando vc determinar na criação do profile ou quando desejar o tempo em que a senha irá expirar….

SQL
SQL> ALTER PROFILE TESTE_PROFILE LIMIT PASSWORD_LIFE_TIME ;

Quando não determino esta opção, o PASSWORD_LIFE_TIME fica por default como UNLIMITED, ou seja, ele não irá expirar a senha..

Para consultar esta informação e outras sobre os PROFILE´S criados, rode o script abaixo…

SQL
SQL> select resource_name,limit from dba_profiles where profile=’TESTE_PROFILE’;

Bom.. então é isso.. assim vc não correrá o risco de que algum usuário altere sua senha para apenas 1 letra ou data de nascimento.. coisa que é muito falha..

heheh.. sei que o POST está bem grande.. mas estou empolgado hoje.. hauhauhahahuahh!!!
Abraços pessoal…

Regis Araujo

Regis Araujo

Regis Araujo é DBA há 07 anos, especialista em Banco de Dados Oracle com experiência em SQL-Server e Bacharel em Ciências da Computação. Com conhecimentos em Banco de Dados e Sistemas operacionais.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Marcações:
plugins premium WordPress