Estou realizando alguns testes em um ambiente 21c e precisei criar o usuário HR para dar algumas cargas, até aqui bem simples né?
Primeiro criei o usuário e dei as permissões necessárias:
CREATE USER HR IDENTIFIED BY SenhA_Segura#123 GRANT CREATE SESSION, RESOURCE TO HR; ALTER USER HR QUOTA UNLIMITED ON USERS;
Mas ao tentar fazer login, recebi o famoso erro ORA-01017 que indica que a senha (ou usuário) passada está errada:
SQL> conn HR/SenhA_Segura#123 ERROR: ORA-01017: invalid username/password; logon denied
Pessoal, uma correção aqui apontada pelo Rodrigo Jorge , ao fazer o conn dentro de uma conexão do sqlplus, mesmo tendo executado o alter session set container=xxx; ele vai tentar se autenticar no CDB e por isso esse erro de senha inválida, o teste deveria ter sido feito usando uma entrada tns por exemplo.
Mas como minha senha pode estar errada se acabei de criar o usuário com essa mesma senha? Minha primeira reação foi olhar o parâmetro SEC_CASE_SENSITIVE_LOGON :
SQL> show parameter logon SQL> show parameter case SQL> show parameter sec NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_securefile string PREFERRED optimizer_secure_view_merging boolean TRUE sec_max_failed_login_attempts integer 3 sec_protocol_error_further_action string (DROP,3) sec_protocol_error_trace_action string TRACE sec_return_server_release_banner boolean FALSE sql92_security boolean TRUE SQL>
Note que nas duas primeiras vezes, nada foi retornado, será que eu poderia estar digitando errado? Talvez alguma diferença por estar no pdb e não no cdb ? Foi ai que achei essa página aqui que fala de parâmetros que foram descontinuados na versão 21c, avançando na documentação, outros parâmetros também foram removidos:
Desupport of UNIFIED_AUDIT_SGA_QUEUE_SIZE
Starting in Oracle Database 21c, the initialization parameterUNIFIED_AUDIT_SGA_QUEUE_SIZE
is desupported.Desupport of IGNORECASE Parameter for Passwords
Starting in Oracle Database 21c, theIGNORECASE
parameter for theorapwd
file is desupported. All newly created password files are case-sensitive.Desupport of DISABLE_DIRECTORY_LINK_CHECK
Starting in Oracle Database 21c, theDISABLE_DIRECTORY_LINK_CHECK
parameter is desupported, with no replacement.Desupport of REMOTE_OS_AUTHENT Parameter
The Oracle Database initialization parameterREMOTE_OS_AUTHENT
has been removed from Oracle Database 21c.Desupport of SEC_CASE_SENSITIVE_LOGON
TheSEC_CASE_SENSITIVE_LOGON
parameter is desupported in Oracle Database 21c.
Voltando ao nosso problema, antigamente você poderia apenas alterar o parâmetro SEC_CASE_SENSITIVE_LOGON para que o case da senha fosse ignorado e isso geralmente resolvia o problema (nas versões 12c, precisava unir ele ao parâmetro do sqlnet) , agora na versão 21c, precisamos ajustar apenas o parâmetro SQLNET.ALLOWED_LOGON_VERSION_SERVER no nosso arquivo sqlnet.ora
Olhando na DBA_USERS, a senha do nosso usuário já estava definido como 11G/12C:
A partir da versão 12.2 o valor padrão para o ALLOWED_LOGON_VERSION_SERVER é 12, ou seja, usuários criados nesse banco poderiam usar uma senha com ou sem case, mas na prática eu não consegui fazer login de jeito nenhum, por isso eu tive que definir o SEC_CASE_SENSITIVE_LOGON para 12, dessa forma o login foi feito com sucesso, caso queira forçar a senha para o padrão mais novo(e seguro) sugiro colocar o valor como 12a, mas tome muito cuidado pois ao fazer isso, você perde a capacidade de fazer login com formatos mais antigos de senha:
Aqui nesse site você tem toda a explicação dos valores e seus respectivos padrões: https://docs.oracle.com/en/database/oracle/oracle-database/21/netrf/parameters-for-the-sqlnet.ora.html#GUID-1FA9D26C-4D97-4D1C-AB47-1EC234D924AA recomendo dar uma olhada nele e também nesse post do Mike Dietrich: https://mikedietrichde.com/2017/04/25/what-happens-to-password_versions-during-an-upgrade-to-oracle-12-2/ onde ele também explica esse comportamento.