Cómo configurar Oracle Centrally Managed Users (CMU) autenticando a Microsoft Active Directory mediante Kerberos en RAC. Parte 1


Creacion usuarios CMU autenticando por Kerberos Parte 2
Ya el propio título del post podría ser un post per se, pero veo necesario organizar los pasos, configuración y resolución de problemas si es la primera vez que os enfrentais a dicho escenario.
Empezamos con un poco de teoría.
¿Qué es CMU?
CMU es una nueva característica introducida desde Oracle DB 18c que permite una administración simplificada de usuarios de bases de datos a través de la integración con Microsoft Active Directory (AD), permitiendo que la base de datos Oracle realice la autenticación y autorización del usuario directamente contra AD.
Suena bien verdad? Pues complementamos con autenticación con Shared Schemas y autorización por global roles y ya tenemos el matrimonio perfecto. Con esto me refiero a que los usuarios de LDAP pueden acceder a través de un único usuario de BBDD y podremos definir los roles en base al grupo de AD al que pertenezcan.
Resumen: Me encanta.
Por qué me encanta? Porque tenemos centralizado en el AD la creación de usuarios, la autorización de éstos, control de contraseñas y en base de datos no tenemos que crear un usuario nominal por cada usuario que accede a la BBDD dentro de la empresa.
El artículo va dirigido a la configuración del título del post.
Pongamos en orden los conceptos a donde queremos llegar
Partimos de la premisa de autenticar los usuarios en el AD, sin ser intrusivos en éste. Me explico.
Las formas de autenticación que ofrece oracle contra el AD son:
Password authentication
Kerberos authentication
Public key infrastructure (PKI) authentication (certificate-based authentication)
Para una autenticación por password
You can use the Oracle
opwdintg.exe
executable on the Active Directory server to install the password filter and extend the Active Directory schema.You must install the Oracle password filter on every Windows domain controller in a domain, to ensure that Oracle password verifiers will be generated for Active Directory users in this domain if they need to use password authentication to log in Oracle database.
Por ésto decido ir por la vía de autenticación por Kerberos. Como detallaban en una Slide de Oracle: Keeps your Active Directory team happy. No seré yo la que les genere malestar.
Los pasos que seguiremos serán los siguientes:
Creación usuarios AD
Extraer la Key Table del servicio
Configuración del servidor de BBDD. En nuestro caso trabajamos con un RAC de 2 nodos 19c (19.19)
Configuración clientes
Trobleshooting
Comenzamos con los pasos a seguir.
Detalle configuración
Dominio | dominio.local | |
Servidores | nodotest001 | nodotest002 |
Oracle service directory | oracle_ractest-001 | oracle_ractest-002 |
Usuario conexión AD | usuario_bd | Grupo: acceso_bd |
Unidad organizativa (OU) AD | USUARIOS | |
BBDD | cdbtest | |
PDB | PDB_TEST | |
Active Directory (AD) | CA-PRUEBA-001 |
Creación usuarios AD
Oracle requiere la creación de un usuario que será el que va a interactuar entre la BBDD y el LDAP directory service realizando el bind a los controladores de dominio, actualizando la autenticación por Kerberos y consultando y actualizando los logins a éste. Este usuario se conoce como Oracle service directory.
Los permisos mínimos que precisamos para nuestra configuración a nivel de AD son Read properties
y Write lockoutTime
.
En nuestro caso vamos a crear dos usuarios para ficho fin ya que nos encontramos en una BBDD en RAC.
A mayores precisamos, obviamente, un usuario en AD para logarnos a la BBDD, el cual he denominado usuario_bd, y he creado un grupo al que pertenece a mayores denominado acceso_bd. Así podremos realizar pruebas posteriores con CMU.
La idea es una gestión por usuarios globales y roles globales mapeados a grupos del AD. El usuario tendrá asigandos los roles de BBDD en relación a los grupos del AD al que pertenezcan.
Extraer la Key Table del servicio
Extraemos la tabla de claves de servicio para Kerberos utilizando la utilidad ktpass de Windows. Esta tarea se lleva a cabo en la máquina del controlador de dominio de Active Directory.
C:\WINDOWS\system32>ktpass.exe -princ oracle_ractest-001/nodotest-001.dominio.local@DOMINIO.LOCAL -mapuser USUARIOS\oracle_ractest-001 -crypto all -pass password -out c:\keytab.rac-test-acn-001
C:\WINDOWS\system32>ktpass.exe -princ oracle_ractest-001/nodotest-002.dominio.local@DOMINIO.LOCAL -mapuser USUARIOS\oracle_ractest-002 -crypto all -pass password -out c:\keytab.rac-test-acn-002
Una vez creados los ficheros los copiamos a cada uno de los nodos del RAC.
-- Creamos directorio en cada nodo
mkdir -p /u01/app/kerberos/log/
-- Copiamos los ficheros a dicho directorio
scp keytab.rac-test-001 oracle@nodotest-001.dominio.local:/u01/app/kerberos
scp keytab.rac-test-002 oracle@nodotest-002.dominio.local:/u01/app/kerberos
Configuración del servidor de BBDD
Primero, debemos asegurarnos de que no se establezcan los siguientes parámetros relevantes de la base de datos:
. oraenv <<< cdbtest
alter system set os_authent_prefix='' scope=spfile sid='*';
srvctl stop database -d cdbtest
srvctl start database -d cdbtest
Creamos el fichero de configuración de kerberos:
[oracle@nodotest-001 ]$ cat /u01/app/kerberos/krb5.conf
[libdefaults]
default_realm = DOMINIO.LOCAL
[realms]
DOMINIO.LOCAL = {
kdc = DC-SERVIDOR-001.DOMINIO.LOCAL
}
[domain_realm]
.dominio.local = DOMINIO.LOCAL
dominio.local = DOMINIO.LOCAL
[logging]
default = FILE:/u01/app/kerberos/log/kdc.log
kdc = FILE:/u01/app/kerberos/log/kdc.log
kdc_rotate = {
period = 1d
versions = 10
}
[oracle@nodotest-001 ]$ scp /u01/app/kerberos/krb5.conf nodotest-002:/u01/app/kerberos
Y finalmente configuramos el sqlnet.ora en ambos nodos.
[oracle@nodotest-001 ~]$ echo "
SQLNET.KERBEROS5_KEYTAB=/u01/app/kerberos/keytab.rac-test-001
SQLNET.KERBEROS5_CONF=/u01/app/kerberos/krb5.conf
SQLNET.KERBEROS5_CONF_MIT=TRUE
SQLNET.AUTHENTICATION_KERBEROS5_SERVICE=oracle_ractest-001
SQLNET.AUTHENTICATION_SERVICES=(NONE,BEQ,KERBEROS5)
SQLNET.FALLBACK_AUTHENTICATION=TRUE
SQLNET.KERBEROS_CLOCKSKEW=6000
" >> ${ORACLE_HOME}/network/admin/sqlnet.ora
[oracle@nodotest-002 ~]$ echo "
SQLNET.KERBEROS5_KEYTAB=/u01/app/kerberos/keytab.rac-test-002
SQLNET.KERBEROS5_CONF=/u01/app/kerberos/krb5.conf
SQLNET.KERBEROS5_CONF_MIT=TRUE
SQLNET.AUTHENTICATION_KERBEROS5_SERVICE=oracle_ractest-002
SQLNET.AUTHENTICATION_SERVICES=(NONE,BEQ,KERBEROS5)
SQLNET.FALLBACK_AUTHENTICATION=TRUE
SQLNET.KERBEROS_CLOCKSKEW=6000
" >> ${ORACLE_HOME}/network/admin/sqlnet.ora
Realizamos pruebas de acceso, donde accederemos por cada uno de los nodos y por la scan. Así confirmamos las opciones de acceso.
---- Prueba
create user "USUARIO_BD@DOMINIO.LOCAL" identified externally;
grant create session to "USUARIO_BD@DOMINIO.LOCAL";
grant select on v_$database to "USUARIO_BD@DOMINIO.LOCAL";
grant select on v_$instance to "USUARIO_BD@DOMINIO.LOCAL";
[oracle@nodotest-002 kerberos]$ okinit USUARIO_BD
Kerberos Utilities for Linux: Version 19.0.0.0.0 - Production on 04-JAN-2024 17:28:13
Copyright (c) 1996, 2019 Oracle. All rights reserved.
Configuration file : /u01/app/kerberos/krb5.conf.
Password for USUARIO_BD@DOMINIO.LOCAL:
[oracle@nodotest-002 kerberos]$ oklist
Kerberos Utilities for Linux: Version 19.0.0.0.0 - Production on 04-JAN-2024 17:28:25
Copyright (c) 1996, 2019 Oracle. All rights reserved.
Configuration file : /u01/app/kerberos/krb5.conf.
Ticket cache: FILE:/tmp/krb5cc_54321
Default principal: USUARIO_BD@DOMINIO.LOCAL
Valid starting Expires Service principal
01/04/24 17:28:17 01/05/24 03:28:17 krbtgt/DOMINIO.LOCAL@DOMINIO.LOCAL
renew until 01/05/24 17:28:07
-- Prueba nodos
[oracle@nodotest-002 kerberos]$ sqlplus /@nodotest-001.dominio.local:1521/pdbtest.dominio.local
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jan 4 17:29:18 2024
Version 19.19.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Last Successful login time: Thu Jan 04 2024 17:28:31 +01:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0
[oracle@nodotest-001 admin]$ sqlplus /@rac-test-scan.dominio.local:1521/pdbtest.dominio.local
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Jan 8 13:03:04 2024
Version 19.19.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Last Successful login time: Mon Jan 08 2024 13:02:33 +01:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0
[oracle@nodotest-002 kerberos]$ sqlplus /@nodotest-002.dominio.local:1521/pdbtest.dominio.local
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jan 4 17:30:01 2024
Version 19.19.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Last Successful login time: Thu Jan 04 2024 17:29:18 +01:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0
USUARIO_BD@DOMINIO.LOCAL@nodotest-002.dominio.local:1521/pdbtest.dominio.local>
set lines 200
COLUMN sess_user FORMAT A20
COLUMN auth_identity FORMAT A20
COLUMN method FORMAT A20
COLUMN net_proto FORMAT A20
COLUMN ent_identity FORMAT A20
select sys_context('USERENV','NETWORK_PROTOCOL') net_proto,
sys_context('USERENV','SESSION_USER') sess_user,
sys_context('USERENV','AUTHENTICATED_IDENTITY') auth_identity,
sys_context('USERENV','AUTHENTICATION_METHOD') method,
sys_context('USERENV','ENTERPRISE_IDENTITY') ent_identity
from dual;
NET_PROTO SESS_USER AUTH_IDENTITY METHOD ENT_IDENTITY
-------------------- -------------------- -------------------- -------------------- --------------------
tcp USER_BD@DOMINIO.LOCAL user_bd@DOMINIO.LOCAL KERBEROS user_bd@PAYTEF.LOCAL
Hasta aquí ya hemos accedido como un usuario autenticado por Kerberos a nuestra BBDD.
Subscribe to my newsletter
Read articles from Carla Muñoz López directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Carla Muñoz López
Carla Muñoz López
Mi nombre es Carla y me defino como una apasionada de conocer, compartir ideas, divertirme y aprender todo lo relacionado con Oracle. Alegre y creativa, con un alto grado de autoexigencia, que busca, incluso sin querer, una forma diferente de ver un mismo problema o solución. Defensora del trabajo en equipo en todas las facetas de la vida y de disfrutar todo lo que haces, siempre con humildad. Actualmente cuento con más de 15 años de experiencia como administradora de Oracle, habiendo ocupado previamente posiciones como desarrolladora en la rama de Inteligencia de Negocios. Fue en ese momento que me di cuenta de que no quería centrarme en el desarrollo, sino participar en todas las capas que involucraban los datos, desde el despliegue de la base de datos hasta su explotación final. Siempre estoy dispuesta a ayudar y compartir conocimientos. Creo firmemente que con la tecnología hay que divertirse y no verla como una competencia. La persona con la que tienes que ser el mejor es contigo mismo.