segunda-feira, 2 de janeiro de 2012

Senhas com “case sensitive” no Oracle 11g

Esse artigo abordará o recurso de senhas com “case sensitives” disponível para o banco de dados Oracle na versão 11g.


No Oracle 11g é possível diferenciar senhas maiúsculas de minúsculas, esse recurso é “default” para o banco de dados Oracle 11g durante a criação. Se durante a criação do banco de dados, o DBA estiver utilizando o DBCA, ele poderá everter essa configuração, permitindo trabalhar como nas versões anteriores ao 11g (10g, 9i, 8i, entre outros).


Abaixo a tela que permite alterar a configuração do banco para aceitar ou não senhas em “case sensitive”.


O parâmetro de inicialização SEC_CASE_SENSITIVE_LOGON permite o controle sobre senhas diferenciando senhas maiúsculas de senhas minúsculas. Se os aplicativos existentes utilizam autenticação no 11g, o DBA pode utilizar o comando ALTER SYSTEM para desativar esta funcionalidade.


SQL> SHOW PARAMETER SEC_CASE_SENSITIVE_LOGON

NAME                       TYPE      VALUE
-------------------------- --------- ------
sec_case_sensitive_logon   boolean   TRUE


O código abaixo demonstra a funcionalidade de senha que diferencia maiúsculas de minúsculas. Em primeiro lugar, o parâmetro de inicialização SEC_CASE_SENSITIVE_LOGON é redefinido para TRUE e é criado um novo usuário com uma senha caso mista.

SQL> ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;
System altered.


SQL> CONN / AS SYSDBA
Connected.


SQL> ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = TRUE;
System altered.


SQL> CREATE USER test2 IDENTIFIED BY Test2;
User created.


SQL> GRANT CONNECT TO test2;
User granted.

Na sequência é demonstrada a funcionalidade da senha diferenciando maiúsculas de minúsculas será testado a conexão com o novo usuário com senha digitada corretamente e incorretamente.

SQL> CONN test2/Test2
Connected.


SQL> CONN test2/test2
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.

Alterando o parâmetro de inicialização SEC_CASE_SENSITIVE_LOGON como FALSE pode-se conectar no banco de dados usando as duas variantes da senha (maiúsculas ou minúsculas), conforme demonstrado abaixo.

SQL> CONN / AS SYSDBA
Connected.


SQL> ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;
System altered.


SQL> CONN test2/Test2
Connected.


SQL> CONN test2/test2
Connected.

Se o parâmetro for habilitado novamente o banco de dados irá diferenciar maiúsculas de minúsculas, a autenticação é feita contra a senha, neste caso que está cadastrada de modo misto (maiúsculas e minúsculas).

SQL> CONN / AS SYSDBA
Connected.


SQL> ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = TRUE;
System altered.


SQL> CONN test3/Test3
Connected.


SQL> CONN test3/test3
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.

A visão DBA_USERS inclui uma coluna chamada “PASSWORD_VERSIONS” que indica qual a versão do banco de dados em que a senha foi criada ou modificada.

SQL> SELECT username, password_versions FROM dba_users;


USERNAME                       PASSWORD
------------------------------ --------
TEST                           10G 11G
SPATIAL_WFS_ADMIN_USR          10G 11G
SPATIAL_CSW_ADMIN_USR          10G 11G
APEX_PUBLIC_USER               10G 11G
.
.
.
SYSTEM                         10G 11G
SYS                            10G 11G
MGMT_VIEW                      10G 11G
OUTLN                          10G 11G


32 rows selected.

Usuários importados de um banco de dados 10g têm um valor PASSWORD_VERSIONS de "10G" e mantém as senhas sem diferenciação de maiúsculas e minúsculas independente da configuração do parâmetro SEC_CASE_SENSITIVE_LOGON. As senhas poderão diferenciar maiúsculas de minúsculas, assim que os usuários alterarem a mesma, supondo que o parâmetro SEC_CASE_SENSITIVE_LOGON esteja ativado, definido como TRUE.

O parâmetro “ignorecase” do utilitário orapwd permite controle sobre maiúsculas e minúsculas de senhas no arquivo de senhas. O valor “default” é "n", que significa que as senhas serão diferenciadas de maiúsculas e de minúsculas. Quando usuários que possuem os privilégios (SYSDBA e SYSOPER) forem importados de uma versão anterior de banco de dados, suas senhas estarão incluídas no arquivo de senhas. Esses usuários irão funcionar sem o modo “case sensitive” até que a senha do usuário seja modificada.

Para criar senhas sem utilizar o modo de “case sensitive” no arquivo de senhas, deve-se recriar o arquivo de senha usando a opção “ignorecase = y “, conforme demonstrado abaixo.

$orapwd file=orapwDB11Gb entries=100 ignorecase=y password=mypassword

As senhas associadas com “database links” também podem diferenciar maiúsculas de minúsculas, porém, podem apresentar alguns problemas ao conectar-se entre diferentes versões de banco de dados:
  • De 11g para 11g: O “database link” deve ser criado com a mesma senha do banco de dados remoto.
  • De 11g para 10g: O “database link” deve ser criado de qualquer modo não obedecendo (maiúsculas ou minúsculas), pois o banco de dados remote irá ignorar.
  • De 10g para 11g: O usuário remoto deve ter sua senha modificada para ser totalmente em letras maiúsculas.



Rubens Oliveira
DBA Oracle Consultor
olivert.dba@consultant.com