Usando Banco de dados Oracle com Microsoft Active Directory

Por Thiago Sgobe, Bruno Reis da Silva, Cleber José Campos Martins
Publicado em Março 2018

Revisado por Fidel Andres Vargas Londono


Topologia


Kerberos Server (Microsoft KDC):

dbserver: ADSRV01.test.priv
Microsoft Windows Server 2003
Realm name: TEST.PRIV

Oracle Database:
Servidor:dbserver
Nome do banco de dados:orcl
Oracle Solaris 11.3 SPARC
Oracle Database Release 12.1.0.2.0

Oracle Client:
Red Hat Enterprise Linux Server release 6.6
Oracle Client Release 11.2.0.1.0



1. Pré-requisitos


Servidor de banco de dados e servidor cliente deve ter o pacote de Kerberos instalado.

Criação de usuário para o servidor de Oracle
- O “primeiro nome” é  o nome qualificado para o domínio da máquina onde o servidor Oracle está rodando. (i.e.: dbserver.test.priv)
- Use senha forte e mantenha isto com a configuração  “never expire” senão,  de outra forma, será requisitado a troca de senha a cada nova  “key table”


Crie as contas de usuários pessoais.




2. Configuração


Crie a tabela chave no Windows 2003


ktpass.exe -princ oracle/dbserver.test.priv@TEST.PRIV -mapuser dbserver
-pass Hello@2017 -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -out c:\dbserver_keytab
 

* Tentamos primeiro a criptografia DES-CBC-CRC, mas não funcionou apesar de ser documentado como tipo suportado. Nenhuma análise adicional foi feita.
Tipos de criptografia de tickets Kerberos suportados para clientes e controladores de domínio (Doc ID 1622846.1)

Copie o arquivo gerado para o servidor de banco de dados em um diretório onde você deseja manter seus arquivos de configuração do Kerberos


Configurando o banco de dados Oracle

Crie uma conta de domínio de usuário no banco de dados. Este nome de usuário deve ser criado em maiúsculas e deve ter o domínio (domínio do Active Directory) especificado:


SQL> create user "SGOBE@TEST.PRIV" identified externally;

SQL> grant create session to "SGOBE@TEST.PRIV";



Em seguida, confirme se as configurações do sistema remote_os_authent = false e os_authent_prefix = "" estão configuradas corretamente,


SQL> ALTER SYSTEM SET os_authent_prefix=' ' SCOPE=SPFILE;


O parâmetro REMOTE_OS_AUTHENT está obsoleto. Ele é retido somente para compatibilidade com versões anteriores, não configuramos esse parâmetro porque, por padrão, é FALSO. Caso contrário, assegure-se de configurá-lo para FALSO.



Configurando o SQLNET para Kerberos no servidor Oracle

Verifique se o adaptador kerberos5 está habilitado no nível do sistema operacional. Para este abrir / etc / services e verificar se está presente da seguinte maneira:


kerberos        88/tcp          kerberos5 krb5  # Kerberos v5
kerberos        88/udp          kerberos5 krb5  # Kerberos v5



Configure o arquivo sqlnet.ora para autenticação Kerberos.


SQLNET.KERBEROS5_KEYTAB=/u01/app/oracle/product/12.1.0/db_1/network/kerberos/dbserver_keytab
SQLNET.KERBEROS5_CONF=/u01/app/oracle/product/12.1.0/db_1/network/kerberos/krb5.conf
SQLNET.KERBEROS5_CONF_MIT=TRUE
SQLNET.AUTHENTICATION_KERBEROS5_SERVICE=oracle
SQLNET.AUTHENTICATION_SERVICES= (BEQ,TCPS,KERBEROS5PRE,KERBEROS5)

KERBEROS5PRE é a solução para o bug 19636771.

A configuração SQLNET.KERBEROS5_KEYTAB deve apontar para o arquivo keytab que foi transferido da máquina do Active Directory.

A configuração SQLNET.KERBEROS5_CONF refere-se a um arquivo de configuração Kerberos. Será criado manualmente na próxima etapa.

O SQLNET.AUTHENTICATION_KERBEROS5_SERVICE refere-se à parte 'oracle /' adicionada ao nome principal do servidor quando o ktpass.exe foi executado.


# krb5.conf

[libdefaults]
default_realm = TEST.PRIV
        dns_lookup_realm = false
        dns_lookup_kdc = false 
        default_realm = test.priv 

[realms]
TEST.PRIV = {
kdc = ADSRV01.test.priv:88
}

[domain_realm]
.test.priv = TEST.PRIV
test.priv = TEST.PRIV



Testando o login no servidor Kerberos:

Obtendo um ticket manual usando a ferramenta de linha de comando okinit:


dbserver[orcl](/export/home/oracle)$ okinit sgobe

Kerberos Utilities for Solaris: Version 12.1.0.2.0 - Production on 02-FEB-2017 09:31:46

Copyright (c) 1996, 2014 Oracle.  All rights reserved.

Password for sgobe@TEST.PRIV: 
dbserver[orcl](/export/home/oracle)$



Verificando o ticket usando a ferramenta de linha de comando oklist:


dbserver[orcl](/export/home/oracle)$  oklist

Kerberos Utilities for Solaris: Version 12.1.0.2.0 - Production on 02-FEB-2017 09:31:54

Copyright (c) 1996, 2014 Oracle.  All rights reserved.

Ticket cache: /tmp/krb5cc_54321
Default principal: sgobe@TEST.PRIV

   Valid Starting           Expires            Principal
02-Feb-2017 09:31:50  02-Feb-2017 17:31:46  krbtgt/TEST.PRIV@TEST.PRIV
dbserver[orcl](/export/home/oracle)$ 



Conecte-se ao banco de dados usando sqlplus:


dbserver[orcl](/export/home/oracle)$ sqlplus /@orcl

SQL*Plus: Release 12.1.0.2.0 Production on Thu Feb 2 09:32:04 2017

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

Last Successful login time: Wed Feb 01 2017 12:36:41 +01:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> show user
USER is "SGOBE@TEST.PRIV"
SQL>



Configure o arquivo sqlnet.ora para Kerberos no Cliente Oracle para um ticket manual.

Verifique se o adaptador kerberos5 está habilitado no nível do sistema operacional. Para este abrir /etc/services e verificar se está presente da seguinte maneira:


kerberos        88/tcp          kerberos5 krb5  # Kerberos v5
kerberos        88/udp          kerberos5 krb5  # Kerberos v5



Certifique-se de que o Oracle Client tenha o Oracle Advanced Security instalado:


$ORACLE_CLIENT_HOME/bin/adapters

Installed Oracle Net transport protocols are:

    IPC
    BEQ
    TCP/IP
    SSL
    RAW
    SDP/IB

Installed Oracle Net naming methods are:

    Local Naming (tnsnames.ora)
    Oracle Directory Naming
    Oracle Host Naming
    NIS Naming



As opções de Oracle Advanced Security instaladas são:


    RC4 40-bit encryption
    RC4 56-bit encryption
    RC4 128-bit encryption
    RC4 256-bit encryption
    DES40 40-bit encryption
    DES 56-bit encryption
    3DES 112-bit encryption
    3DES 168-bit encryption
    AES 128-bit encryption
    AES 192-bit encryption
    AES 256-bit encryption
    MD5 crypto-checksumming
    SHA-1 crypto-checksumming
    Kerberos v5 authentication
    RADIUS authentication



Em seguida, no cliente sqlnet.ora configure a autenticação Kerberos:


NAMES.DIRECTORY_PATH=(TNSNAMES, EZCONNECT)
SQLNET.KERBEROS5_CC_NAME=/home/sgobe/network/kerberos/cc
SQLNET.AUTHENTICATION_SERVICES= (BEQ,TCPS,KERBEROS5PRE,KERBEROS5)
SQLNET.KERBEROS5_CONF=/home/orakl/client/11201/network/kerberos/krb5.conf
SQLNET.KERBEROS5_CONF_MIT=true



O arquivo krb5.conf que foi criado no servidor Oracle também deve ser criado no cliente.



Testando o login no servidor Kerberos:

Obter um ticket manual usando a ferramenta de linha de comando okinit:


sgobe@CLientServer[09:47:50]:~>>okinit sgobe

Kerberos Utilities for Linux: Version 11.2.0.1.0 - Production on 02-FEB-2017 09:47:52

Copyright (c) 1996, 2009 Oracle.  All rights reserved.

Password for sgobe@TEST.PRIV: 
sgobe@CLientServer[09:47:56]:~>>



Verificando o ticket usando a ferramenta de linha de comando oklist:


sgobe@CLientServer[09:47:58]:~>>oklist

Kerberos Utilities for Linux: Version 11.2.0.1.0 - Production on 02-FEB-2017 09:48:19

Copyright (c) 1996, 2009 Oracle.  All rights reserved.

Ticket cache: /home/sgobe/network/kerberos/cc
Default principal: sgobe@TEST.PRIV

   Valid Starting           Expires            Principal
02-Feb-2017 09:47:57  02-Feb-2017 17:47:52  krbtgt/TEST.PRIV@TEST.PRIV
sgobe@CLientServer[09:48:19]:~>>



Conecte-se ao banco de dados usando sqlplus:


sgobe@CLientServer[09:48:36]:~>>sqlplus /@orcl

SQL*Plus: Release 11.2.0.1.0 Production on Thu Feb 2 09:48:37 2017

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> show user
USER is "SGOBE@TEST.PRIV"
SQL>




Notas:

- Se acostumar com as ferramentas okinit e oklist
- Os bilhetes manuais expiram após 8 horas e um novo deve ser criado para acessar o banco de dados:


sgobe@CLientServer[09:29:13]:~/network/admin>>sqlplus /@orcl

SQL*Plus: Release 11.2.0.1.0 Production on Thu Feb 2 09:29:26 2017

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

ERROR:
ORA-12687: Credentials expired.

Enter user-name: ^C
sgobe@CLientServer[09:29:15]:~/network/admin>>

sgobe@CLientServer[09:29:17]:~>>oklist

Kerberos Utilities for Linux: Version 11.2.0.1.0 - Production on 02-FEB-2017 09:48:19

Ticket cache: /home/sgobe/network/kerberos/cc
Default principal: SGOBE@TEST.PRIV

   Valid Starting           Expires            Principal
01-Feb-2017 11:09:55  01-Feb-2017 19:09:50  krbtgt/TEST.PRIV@TEST.PRIV
01-Feb-2017 11:10:11  01-Feb-2017 19:09:50  oracle/dbserver@TEST.PRIV


Usando membros do domínio do cliente do Windows seria evitado porque o Oracle poderia usar o cache interno de credenciais do Windows com o seguinte parâmetro no sqlnet.ora:


SQLNET.KERBEROS5_CC_NAME=OSMSFT://




Thiago Sgobe is Brazilian, Bachelor in Computer Science and Database Administrator with experience in managing large and complex enterprise environments. Certified professional, having already worked in several local and international customers  of the most varied  segments. For IBM, he was appointed in Europe where he integrated the team of the TAXUD project - European Union Taxation and Customs Union . Currently, Specialist in Oracle database for  IBM Mexico.

Bruno Reis da Silva is an Oracle Senior Cloud Database Administrator Consultant and professionally Certified Oracle Database Administrator who has worked on the South American continent and is now working on the European continent. His interests are in RDBMS, mainly Oracle, operating systems (Linux, AIX, HPUX and Solaris) and High Availability Solutions implementations. In his free time he enjoys playing sports , going to the gym and traveling. His blog www.techdatabasket.com is dedicated to his sister Laura Vitoria and the main reason for blogging is because he believes in the quote “giving back to get back” . He also enjoys continuous learning and the interaction with others who share his interest.

Cleber José Campos Martins is a Brazilian Oracle Database Administrator for over 15 years and a certified OCP certificate for 10g, 11g and 12c versions and Oracle RAC 11g Version 2 and Grid Infrastructure Administration. Moreover he has  professional experience from Oracle version 7 to 12c working in companies as IBM Brazil, Marisa and DPaschoal.

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.