top of page

Oracle autenticando no Windows Active Directory - Parte 1

Atualizado: 24 de abr.

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


Ao decorrer deste, utilizaremos o Oracle/Kerberos para se autenticar no Windows Active Directory 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.


oracle autenticação active directory

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.


oracle autenticação active directory

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.


oracle autenticação active directory

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:


oracle autenticação active directory

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...


oracle autenticação active directory

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.


oracle autenticação active directory


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/


44 visualizações0 comentário
datacosmos-botao-whats.png
bottom of page