top of page

Oracle autenticando no Windows AD - Parte 1

Neste artigo abordaremos uma forma das "Strong Authentications" Oracle.

Ao decorrer deste, utilizaremos o Oracle/Kerberos para se autenticar no AD e então realizar a conexão com a base de dados Oracle.


A utilização deste procedimento remove a utilização de senha na conexão do usuário Oracle, ou seja, aquele velho padrão usuário/senha não existirá mais.


Daqui pra frente só conecta no usuário quem tiver o token carregador na maquina cliente, só pra dar uma prévia do que vai acontecer o usuário no banco de dados ficará assim: ALTER USER DIOGO IDENTIFIED EXTERNALLY AS 'DIOGO.FERNANDES@DATACOSMOS.COM.BR' ;


Vamos lá...


No AD, vamos criar um usuário para o HOST/NODE chamado DATABASENODE1. Em caso de RAC criar um usuário para cada nó, sugiro criar o usuário no grupo de "serviços" para um melhor gerenciamento no futuro.



Uma vez criado vamos executar o comando KTPASS para gerar uma keytab, em resumo este arquivo ficará no sqlnet do Oracle e será responsável por verificar se aquela autenticação é valida ou não. Caso queria saber mais sobre o processo procure por TGT na tecnologia Kerberos que entenderá todo o processo.


Com permissão de ADMIN no power shell execute o comando:

ktpass.exe -princ ORACLE/databasenode1.datacosmos.com.br@DATACOSMOS.COM.BR -mapuser databasenode1 -crypto all -pass "Senha_do_usuario_aqui" -out c:\temp\databasenode1.keytab

Explicando o comando: Parte 1

ktpass.exe -princ ORACLE/databasenode1.datacosmos.com.br@DATACOSMOS.COM.BR

"ORACLE" é o Serviço que criamos no AD com o comando ktpass e iremos vincular no sqlnet do banco posteriormente, depois do "/" vem o nome do host, este nome deve ser o FQDN, com o comando hostname -f você o obtém, depois do "@" vem o seu domínio.


Apos a execução do comando ktpass o nome do usuario deve ficar como ORACLE/NOME_DO_HOST.


Explicando o comando: Parte 2

-mapuser databasenode1 -crypto all -pass "Senha_do_usuario_aqui" -out c:\temp\databasenode1.keytab

Map user é o usuário que criamos anteriormente, crypto é o tipo de criptografia que neste caso está adicionando todas no arquivo de keytab e o cominho out é o arquivo chamado "keytab", este arquivo iremos transferi-lo para o host de banco de dados é fazer o apontamento no sqlnet.ora.



Pronto, com esse comando executado podemos pegar o arquivo c:\temp\DATABASENODE1.keytab do AD e iniciar nossa configuração de Strong Authentication que se autenticará no Windows.

No sqlnet no banco de dados que receberá as conexões via Strong Authentication vamos fazer a seguinte configuração:

[oracle@databasenode1 ~]$ cd $ORACLE_HOME
[oracle@databasenode1 dbhome_1]$ cd network/admin/
[oracle@databasenode1 admin]$ vi sqlnet.ora
[oracle@databasenode1 admin]$ cat sqlnet.ora

# Kerberos Parameters 
SQLNET.AUTHENTICATION_SERVICES=(beq,kerberos5pre,kerberos5)
SQLNET.FALLBACK_AUTHENTICATION=TRUE
SQLNET.AUTHENTICATION_KERBEROS5_SERVICE=ORACLE
SQLNET.KERBEROS5_CONF=/u01/app/oracle/product/19.0/dbhome_1/network/admin/krb5.conf
SQLNET.KERBEROS5_CLOCKSKEW=6000
SQLNET.KERBEROS5_CONF_MIT=TRUE
# Server side only
SQLNET.KERBEROS5_KEYTAB=/u01/app/oracle/product/19.0/dbhome_1/network/admin/databasenode1.keytab

Apos isso vamos colocar as configurações do AD no arquivo krb5.conf que está no sqlnet acima.

[oracle@databasenode1 admin]$ vi /u01/app/oracle/product/19.0/dbhome_1/network/admin/krb5.conf
[oracle@databasenode1 admin]$ cat /u01/app/oracle/product/19.0/dbhome_1/network/admin/krb5.conf
[libdefaults]
default_realm = DATACOSMOS.COM.BR
clockskew = 6000
passwd_check_s_address = false
noaddresses = true
forwardable = yes
[realms]
DATACOSMOS.COM.BR = {
kdc = DATACOSMOS.COM.BR:88
}
[domain_realm]
DATACOSMOS.COM.BR = DATACOSMOS.COM.BR
.DATACOSMOS.COM.BR = DATACOSMOS.COM.BR
datacosmos.com.br = DATACOSMOS.COM.BR
.datacosmos.com.br = DATACOSMOS.COM.BR
domainsecundario.com.com=DATACOSMOS.COM.BR
.domainsecundario.com.com=DATACOSMOS.COM.BR
domainsecundario.com.COM=DATACOSMOS.COM.BR
.domainsecundario.com.COM=DATACOSMOS.COM.BR

OBS: Caso o domínio tenha correlação de confiança entre outros domínios, colocar todos como no exemplo acima. O Master é o DATACOMOS.COM.BR então criarei outros apontamentos do domainsecundario para o DATACOMOS.COM.BR, como no exemplo acima.


Uma vez essas configurações feitas vamos para o banco de dados:


[oracle@databasenode1 ~]$ sqlplus diogo@kerb

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Jul 17 22:33:39 2023
Version 19.17.0.0.0
Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Enter password: 
Last Successful login time: Mon Jul 17 2023 15:21:23 -03:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.17.0.0.0

SQL> show user 
USER is "DIOGO"


Podemos ver que o usuário "DIOGO" ainda esta autenticando pela forma padrão do Oracle, ou seja, usuário e senha.


Agora vamos fazer uma alteração no usuário para ele autenticar "externamente" ou seja, ele irá verificar se existe o token do usuário diogo.fernandes carregado na maquina Windows, caso sim, ele fechará conexão com o Oracle.


[oracle@databasenode1 ~]$ sqlplus / as sysdba


SQL*Plus: Release 19.0.0.0.0 - Production on Mon Jul 17 22:38:10 2023
Version 19.17.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.17.0.0.0


SQL> ALTER USER DIOGO IDENTIFIED  EXTERNALLY  AS 'DIOGO.FERNANDES@DATACOSMOS.COM.BR' ;

User altered.

Pronto, agora vamos pra maquina Windows "Client". Vamos fazer uma instalação rápida do Client 19C:


Sempre selecionar a opção Administrador neste caso.


Na pasta $ORACLE_HOME/network/admin temos os seguintes arquivos:


  1. krb5.conf

  2. sqlnet.ora

  3. tnsnames.ora


O arquivo krb5.conf tem as informações necessárias para obter as informações do AD, ele será mencionado no sqlnet.ora e é assim que o Oracle vai saber em qual AD buscar e validar as informações de token, segue o arquivo de configuração do krb5.conf

[libdefaults]
default_realm = DATACOSMOS.COM.BR
clockskew = 6000
passwd_check_s_address = false
noaddresses = true
forwardable = yes
[realms]
DATACOSMOS.COM.BR = {
kdc = DATACOSMOS.COM.BR:88
}
[domain_realm]
DATACOSMOS.COM.BR = DATACOSMOS.COM.BR
.DATACOSMOS.COM.BR = DATACOSMOS.COM.BR
datacosmos.com.br = DATACOSMOS.COM.BR
.datacosmos.com.br = DATACOSMOS.COM.BR
domainsecundario.com.com=DATACOSMOS.COM.BR
.domainsecundario.com.com=DATACOSMOS.COM.BR
domainsecundario.com.COM=DATACOSMOS.COM.BR
.domainsecundario.com.COM=DATACOSMOS.COM.BR

Agora vamos pro sqlnet.ora

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)


SQLNET.AUTHENTICATION_SERVICES= (KERBEROS5PRE,BEQ)
SQLNET.FALLBACK_AUTHENTICATION=TRUE
SQLNET.AUTHENTICATION_KERBEROS5_SERVICE=ORACLE
SQLNET.KERBEROS5_CONF=C:\Oracle\CLIENT19C\network\admin\krb5.conf
SQLNET.KERBEROS5_CLOCKSKEW=6000
SQLNET.KERBEROS5_CONF_MIT=TRUE


SQLNET.KERBEROS5_CC_NAME=OSMSFT://

Podemos perceber que a ultima linha do sqlnet.ora esta com o parâmetro "OSMSFT://" setado, isso significa que nesse caso, ele irá utilizar o token previamente carregado pelo AD, mas na pratica o que isso significa ?


No powerShell da maquina cliente...


Assim que conectamos em qualquer "estação" vinculada ao AD, de imediato o AD já fornece token kerberos para aquele usuário, ou seja, no momento que loguei com o meu usuário diogo.fernandes ele já carregou os token's devidos para eu poder autenticar não somente no Oracle mas em qualquer outro serviço que o kerberos também esteja configurado, isso permite que todos os acessos de usuário se limite apenas ao AD, assim, não precisando criar 20 senhas para um usuário.




Como dito anteriormente, não é mais necessário utilizar usuário/senha para conectar no usuário "DIOGO", no momento que passo a informação "/" no sqlplus, ele já entender que é uma autenticação "forte" e inicia a procura por tokens para realizar o handshake entre o servidor de AD e Banco de dados.


No proximo artigo, abordarei sobre usuários de "produção" utilizando strong authentication, como carregar vários tokens nas mesmas maquina, e como configurar o tnsnames propriamente dito para estes usuários.


Artigo baseado na nota Doc ID 1304004.1

Autor: Diogo Fernandes - diogo.fernandes@datacosmos.com.br

Linkedin: https://www.linkedin.com/in/diogo-sfg/

Link do artigo original: https://www.linkedin.com/pulse/oracle-autenticando-windows-ad-diogo-fernandes/


10 visualizações
bottom of page