Seguindo um tutorial em vídeo sobre carteiras oracle: https://youtu.be/LLZzUNb9ALU
O servidor db é executado a partir do contêiner docker oficial da Oracle.
Os passos que fiz são os seguintes:
- No shell do servidor, executei o sql plus como sysdba:
$ sqlplus / as sysdba
- Criou um usuário:
SQL> alter session set "_ORACLE_SCRIPT"=true;
SQL> CREATE USER fred identified by flintstone;
SQL> GRANT CONNECT, RESOURCE, DBA to fred;
- Logon testado:
$ sqlplus fred/flintstone
SQL> show user;
User is "fred"
- Criou uma carteira no local padrão:
$ORACLE_BASE/admin/$ORACLE_SID/wallet
$ orapki wallet create -wallet $ORACLE_BASE/admin/$ORACLE_SID/wallet -auto_login -pwd MyWalletPass
- Criou um perfil de carteira para o usuário
fred
:
$ mkstore -wrl $ORACLE_BASE/admin/$ORACLE_SID/wallet -createCredential $ORACLE_SID fred flintstone
- Tentei fazer login no sqlplus:
$ sqlplus /@$ORACLE_SID
Isso falha. Obteve o erroORA-01017: invalid username/password; logon denied
Não é capaz de entender o que está errado. O objetivo final é usar esta carteira para um aplicativo nodejs com autenticação externa (node-oracledb). Mas acho que se eu puder corrigir a etapa 6, devo poder usar no nodejs.
Como sugerido por André
Na primeira parte, mencionei explicitamente a localização da carteira no
sqlnet.ora
arquivo e também incluí a seguinte linha:SQLNET.WALLET_OVERRIDE=TRUE
. Também verificou a entrada tns correta emtnsnames.ora
. (Isso já foi resolvido durante a inicialização do contêiner, então não precisei fazer nada).Para a 2ª parte, tive que usar o mesmo
sqlnet.ora
com a ressalva de que oWALLET_LOCATION
parâmetro foi atualizado com a localização da pasta wallet na máquina cliente. E para o programa cliente, tive que definir aTNS_ADMIN
variável de ambiente; Eu tive que apontá-lo para a pasta onde o antigo arquivo residiria. Além disso, adicionei umtnsnames.ora
arquivo e um nome tns (semelhante ao nome do serviço oracle no servidor db).Nota : Na máquina cliente, temos que ter cuidado com a sintaxe no arquivo
sqlnet.ora
e notnsnames.ora
arquivo. Diferentes clientes têm várias maneiras de se conectar. Acabei de observar o caso de um programa nodejs usadoorcaledb
como cliente oracle. Esses tipos específicos de clientes fazem uso da variável de ambienteTNS_ADMIN
.