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 un 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.
No hay comentarios.:
Publicar un comentario