Nuevos Privilegios Administrativos en Oracle Database 12.2

Por Jorge Zorrilla
Publicado en Agosto 2018

Revisado por Francisco Riccio



Introducción


En muchas empresas, las tareas de administración de base de datos no son asignadas completamente al equipo de DBAs. Por políticas de seguridad, se decide realizar separación de responsabilidades en tareas como backups de base de datos, configuración de encriptación de tablas y hasta administración de los ambientes de contingencia. Personalmente yo he trabajado con equipos dedicados enteramente a realizar backups de toda la infraestructura y equipos de seguridad, muy bien capacitados, que administraban los componentes de seguridad.

En versiones anteriores a 12c, la única manera de que estos equipos puedan cumplir con sus labores, es otorgándoles usuarios con el privilegio SYSDBA. Esto representa un riesgo de seguridad alto debido a que SYSDBA es el privilegio más poderoso que se puede asignar debido a que puede acceder a toda la información dentro de la base de datos.

En Oracle 12c este problema puede ser mitigado gracias a la introducción de nuevos privilegios administrativos y usuarios del mismo nombre:

  • SYSBACKUP
  • SYSDG
  • SYSKM
  • SYSRAC (Nuevo en 12cR2)

En este artículo quiero explicar en detalle las funcionalidades y características de cada uno de los privilegios.





Definición de Privilegios


SYSBACKUP

Privilegio utilizado para realizar operaciones de Backups y Recuperación con RMAN y SQLPlus.
Nos conectamos desde SQLPLUS para verificar la lista de privilegios asignados.

[oracle@oracle12c ~]$ sqlplus SYSBACKUP/oracle@cdb1 as sysbackup

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jul 17 15:13:35 2018
Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show user
USER is "SYSBACKUP"

SQL>  select * from session_privs;

PRIVILEGE
----------------------------------------
ALTER SYSTEM
ALTER SESSION
ALTER TABLESPACE
DROP TABLESPACE
UNLIMITED TABLESPACE
CREATE ANY TABLE
CREATE ANY CLUSTER
AUDIT ANY
ALTER DATABASE
CREATE ANY DIRECTORY
RESUMABLE
SELECT ANY DICTIONARY
SELECT ANY TRANSACTION
SYSBACKUP



Nos conectamos a través de RMAN y ejecutamos un backup de base de datos. Del mismo modo podemos conectarnos para realizar tareas de recuperación de información.

[oracle@oracle12c ~]$ rman target "'sysbackup/oracle@cdb1 as sysbackup'"

Recovery Manager: Release 12.2.0.1.0 - Production on Tue Jul 17 15:03:49 2018
Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

connected to target database: CDB1 (DBID=935741049)

RMAN> backup database plus archivelog;

Starting backup at 17-JUL-18




SYSDG

Privilegio que se utiliza para realizar operaciones de Dataguard.  Puedes utilizar este privilegio para uso de Dataguard Broker mediante el comando DGMGRL.

Verificamos los privilegios de SYSDG.

[oracle@oracle12c ~]$ sqlplus sysdg/oracle@orcl as sysdg

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jul 17 15:13:35 2018
Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show user
USER is "SYSDG"

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
ALTER SYSTEM
ALTER SESSION
ALTER DATABASE
SELECT ANY DICTIONARY
SYSDG



Nos conectamos a la configuración Dataguard Broker y realizamos la operación de Switchover.

[oracle@oracle12c ~]$ dgmgrl sysdg/oracle@orcl

DGMGRL> switchover to 'aqp'
Performing switchover NOW, please wait...
Operation requires a connection to instance "aqp" on database "aqp"
Connecting to instance "aqp"...
Connected as SYSDG.
New primary database "aqp" is opening...
Operation requires start up of instance "orcl" on database "orcl"
Starting instance "orcl"...
ORACLE instance started.
Database mounted.
Switchover succeeded, new primary is "aqp"




SYSKM

Privilegio responsable de administrar configuraciones de WALLET.  Utilizamos Wallet para hacer uso de Transparent Data Encryption (TDE).

Verificamos los privilegios de SYSKM.

[oracle@oracle12c ~]$  sqlplus syskm/oracle@PDBORCL as syskm

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jul 17 15:28:13 2018
Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show user
USER is "SYSKM"

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
SYSKM
ADMINISTER KEY MANAGEMENT



Nos conectamos como SYSKM y configuramos un KEYSTORE.  Una vez configurado el KEYSTORE podemos empezar a crear objetos utilizando Trasparent Data Encryption.

Las operaciones de encriptación si deben ser utilizadas por un usuario con privilegios sobre las tablas que se quiere encriptar.

[oracle@oracle12c wallet]$ sqlplus syskm/oracle@orcl as syskm

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/app/oracle/admin/orcl/wallet' 
IDENTIFIED BY "oracle";

keystore altered.

SQL>  ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "oracle" ;

keystore altered.

SQL>  ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "oracle" WITH BACKUP;

keystore altered.

SQL> select * from V$ENCRYPTION_WALLET;

WRL_TYPE     STATUS       WALLET_TYPE      WALLET_OR FULLY_BAC 
------------ ------------ ---------------- --------- --------- 
FILE         OPEN         PASSWORD         SINGLE    NO        




SYSRAC (12cR2)

Privilegio que se introduce en la versión Oracle 12cR2 para la administración de Oracle Real Application Cluster (RAC). El rol es utilizado por el agente clusterware para poder conectarse a la base de datos al momento de ejecutar comandos como SRVCTL.

Verificamos los privilegios de SYSRAC.

[oracle@oraclerac2 ~]$ sqlplus / as sysrac

SQL*Plus: Release 12.2.0.1.0 Production on Sat Jul 28 21:29:45 2018
Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show user
USER is "SYSRAC"

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
SYSRAC
SET CONTAINER
CREATE RULE
CREATE RULE SET
CREATE EVALUATION CONTEXT
DEQUEUE ANY QUEUE
ENQUEUE ANY QUEUE
MANAGE ANY QUEUE
ALTER DATABASE
ALTER SESSION
CREATE SESSION
ALTER SYSTEM



Este Rol tiene la particularidad que no se le puede asignar directamente a un usuario de base de datos.  Solo el usuario con el mismo nombre puede utilizar el rol SYSRAC.

SQL> grant SYSRAC to RACDBA;
grant SYSRAC to RACDBA
*
ERROR at line 1:
ORA-28190: SYSRAC administrative privilege cannot be granted to other users



Esto se debe a que la mayoría de tareas de administración de clúster se realizan mediante comandos como CRSCTL, SRVCTL, OIFCFG, OCRCHECK. Estos comandos son ejecutados fuera de la base de datos.

Para poder realizar la separación de tareas creamos un usuario de sistema operativo (en todos los nodos) y le asignamos solamente el grupo de administración de RAC.  En mi caso el grupo se llama racdba y el usuario orarac.

[root@oraclerac1 ~]# su - orarac
[orarac@oraclerac1 ~]$ id
uid=501(orarac) gid=500(oinstall) groups=500(oinstall),504(asmdba), 509(racdba)

[root@oraclerac2 ~]# su - orarac
[orarac@oraclerac2 ~]$ id
uid=501(orarac) gid=500(oinstall) groups=500(oinstall),504(asmdba), 509(racdba)



A través de este usuario podemos ejecutar los comandos indicados anteriormente para la administración del clúster.

[orarac@oraclerac1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr
               ONLINE  ONLINE       oraclerac1               STABLE
               ONLINE  ONLINE       oraclerac2               STABLE
ora.DG_DATA.dg
               ONLINE  ONLINE       oraclerac1               STABLE
               ONLINE  ONLINE       oraclerac2               STABLE
ora.DG_OCR.dg
               ONLINE  ONLINE       oraclerac1               STABLE
               ONLINE  ONLINE       oraclerac2               STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       oraclerac1               STABLE
               ONLINE  ONLINE       oraclerac2               STABLE
ora.chad
               ONLINE  ONLINE       oraclerac1               STABLE
               ONLINE  ONLINE       oraclerac2               STABLE
ora.net1.network
               ONLINE  ONLINE       oraclerac1               STABLE
               ONLINE  ONLINE       oraclerac2               STABLE
ora.ons
               ONLINE  ONLINE       oraclerac1               STABLE
               ONLINE  ONLINE       oraclerac2               STABLE
…

[orarac@oraclerac2 ~]$ srvctl config scan
SCAN name: oracle-scan.cccluster.gns.oracle.com, Network: 1
Subnet IPv4: 172.68.1.0/255.255.255.0/eth2, dhcp
Subnet IPv6:
SCAN 1 IPv4 VIP: -/scan1-vip/172.68.1.37
SCAN VIP is enabled.
SCAN VIP is individually enabled on nodes:
SCAN VIP is individually disabled on nodes:
SCAN 2 IPv4 VIP: -/scan2-vip/172.68.1.42
SCAN VIP is enabled.
SCAN VIP is individually enabled on nodes:
SCAN VIP is individually disabled on nodes:
SCAN 3 IPv4 VIP: -/scan3-vip/172.68.1.43
SCAN VIP is enabled.
SCAN VIP is individually enabled on nodes:
SCAN VIP is individually disabled on nodes:



[orarac@oraclerac1 ~]$ srvctl stop database -db cold

[orarac@oraclerac1 ~]$ srvctl status database -db cold
Instance cold1 is not running on node oraclerac1
Instance cold2 is not running on node oraclerac2

[orarac@oraclerac1 ~]$ srvctl start  database -db cold

[orarac@oraclerac1 ~]$ srvctl status database -db cold
Instance cold1 is running on node oraclerac1
Instance cold2 is running on node oraclerac2



Con el usuario orarac podemos conectarnos a la base de datos solo con el rol de SYSRAC.

[orarac@oraclerac2 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Sat Jul 28 21:35:08 2018
Copyright (c) 1982, 2016, Oracle.  All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied

Enter user-name: 


[orarac@oraclerac2 ~]$ sqlplus / as sysrac

SQL*Plus: Release 12.2.0.1.0 Production on Sat Jul 28 21:35:17 2018
Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>





Nuevos Grupos de sistema operativo.


Como hemos podido adelantar en la definición del privilegio SYSRAC, es posible realizar separación de tareas a nivel de sistema operativo mediante la definición de nuevos grupos para cada privilegio.

Estos grupos pueden ser definidos a cada privilegio en la instalación de la base de datos 12c.





Otra opción es modificando el archivo config.c del motor Oracle 12c ya instalado. Para este procedimiento es necesario realizar un relink

[oracle@oracle12c ~]$ cd $ORACLE_HOME/rdbms/lib
[oracle@oracle12c lib]$vi config.c

#define SS_DBA_GRP "dba"
#define SS_OPER_GRP "oper"
#define SS_ASM_GRP ""
#define SS_BKP_GRP "backupdba"
#define SS_DGD_GRP "dgdba"
#define SS_KMT_GRP "kmdba"
#define SS_RAC_GRP "racdba"

[oracle@oracle12c lib]$ mv config.o config.o.orig
[oracle@oracle12c lib]$ make -f ins_rdbms.mk ioracle





Esquema que utilizan los nuevos privilegios.


Cuando nos conectamos con alguno de los nuevos privilegios administrativos, el esquema que se le asigna es el esquema SYS.

SQL>  conn / as sysbackup
Connected.
SQL> select sys_context('userenv', 'current_schema') current_schema, 
sys_context('userenv', 'session_user') session_user from dual;

CURRENT_SCHEMA       SESSION_USER
-------------------- --------------------
SYS                  SYSBACKUP

SQL>  conn / as sysdg
Connected.
SQL>  select sys_context('userenv', 'current_schema') current_schema, 
sys_context('userenv', 'session_user') session_user from dual;

CURRENT_SCHEMA       SESSION_USER
-------------------- --------------------
SYS                  SYSDG

SQL> conn / as syskm
Connected.
SQL>  select sys_context('userenv', 'current_schema') current_schema, 
sys_context('userenv', 'session_user') session_user from dual;

CURRENT_SCHEMA       SESSION_USER
-------------------- --------------------
SYSKM                SYSKM

SQL> conn / as sysrac
Connected.
SQL>  select sys_context('userenv', 'current_schema') current_schema, 
sys_context('userenv', 'session_user') session_user from dual;

CURRENT_SCHEMA       SESSION_USER
-------------------- --------------------
SYS                  SYSRAC





Nuevo Password File


Con la inclusión de los nuevos privilegios administrativos, el Password File que conocemos ha tenido que modificarse para poder soportar los nuevos cambios. 
Para que un usuario pueda conectarse de manera remota con los privilegios SYSBACKUP, SYSDG, SYSKM o SYSRAC, debe de ser registrado en el Password File con los privilegios apropiados.

El utilitario orapwd contiene las siguientes nuevas opciones.

orapwd file=[fname] entries=[users] force=[y/n] asm=[y/n] dbuniquename=[dbname] 
format=[legacy/12] sysbackup=[y/n] sysdg=[y/n] syskm=[y/n] delete=[y/n] 
input_file=[input-fname] orapwd FILE='$ORACLE_HOME/dbs/orapwvstdb01' ENTRIES=10 
SYSBACKUP=y



Gracias a la vista V$PWFILE_USERS podemos identificar rápidamente los usuarios con privilegios administrativos.

SQL> select USERNAME, SYSDBA, SYSOPER, SYSASM, SYSBACKUP, SYSDG, SYSKM, ACCOUNT_STATUS, 
AUTHENTICATION_TYPE, COMMON
from V$PWFILE_USERS;

USERNAME             SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM ACCOUNT_STATUS  AUTHENTI COM
-------------------- ----- ----- ----- ----- ----- ----- --------------- -------- ---
SYS                  TRUE  TRUE  FALSE FALSE FALSE FALSE OPEN            PASSWORD YES
SYSDG                FALSE FALSE FALSE FALSE TRUE  FALSE OPEN            PASSWORD YES
SYSBACKUP            FALSE FALSE FALSE TRUE  FALSE FALSE OPEN            PASSWORD YES
SYSKM                FALSE FALSE FALSE FALSE FALSE TRUE  OPEN            PASSWORD YES





Conclusión


En este articulo hemos podido ver cómo se puede utilizar y administrar cada uno de los nuevos privilegios administrativos que ofrece Oracle 12cR2. Esta opción puede resultar muy útil para empresas que desean realizar la separación de tareas como Backups, Dataguard, RAC o Seguridad.




Ing. Jorge Zorrilla. Es un especialista IT en tecnologías Oracle e instructor de cursos oficiales de certificación Oracle. Con más de 9 años de experiencia en soluciones con tecnología Oracle como Alta Disponibilidad, Continuidad de negocios y Modernización de la infraestructura. Fue uno de los primeros especialistas en Latinoamérica con la certificación OCP Oracle12c y Oracle Maximum Availability 12c. 
En la actualidad Jorge Zorrilla se dedica a mantener relaciones estratégicas con sus clientes en Perú mediante su empresa IDB Consulting.

Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.