Oracle Exadata Database Machine: Seguridad a nivel de ASM y de Base de Datos (Parte 1)

Por Deiby Gómez Robles e Yenugula Venkata RaviKumar (OCM)
Publicado en marzo 2014


Indice:

  1. Oracle Exadata Database Machine: Seguridad a nivel de ASM y de Base de Datos (Parte 1)
  2. Oracle Exadata Database Machine: Seguridad a nivel de ASM y de Base de Datos (Parte 2)
  3. Oracle Exadata Database Machine: Seguridad a nivel de ASM y de Base de Datos (Parte 3)


Introducción:
La seguridad en el acceso a los datos es un tema muy importante que toda organización debería implementar y no descuidar. En un ambiente de "Oracle Exadata Database Machine" bien se sabe que se tienen varios servidores, unos dedicados a las instancias de base de datos (Database Servers) y otros dedicados al almacenamiento de la información (Storage Servers), por ejemplo, en un "Half Rack" se tiene 4 servidores para base de datos y 7 servidores para almacenamiento, esto da lugar a las preguntas: ¿Qué servidores de base de datos pueden acceder a cuales servidores de almacenamiento? ¿Cuales Clústeres de ASM pueden acceder qué discos? Pues bien, esa es la meta de este articulo, adentrarnos un poco más en el amplio camino que todo Administrador de Bases de Datos Oracle debe recorrer y de esta manera llegar a conocer cómo se implementa la seguridad dentro de un "Oracle Exadata Database Machine".

La seguridad en los "Exadata Cell"  se encarga de identificar quienes pueden acceder los "Exadata Cell" y sus respectivos "Grid Disks", esta seguridad puede ser implementada desde dos perspectivas:

  • Seguridad a nivel de ASM
  • Seguridad a nivel de Base de Datos

Como buena práctica se recomienda planificar la seguridad a nivel de ASM antes que la seguridad a nivel de base de datos.

Seguridad a nivel de ASM : Usando seguridad a nivel de ASM, todas las bases de datos usando el mismo clúster de ASM tendrán acceso a específicos "Grid Disk", esto es una manera de poder agrupar varias bases de datos.

Seguridad a nivel de base de datos: Usando Seguridad a nivel de base de datos, especificas bases de datos tienen acceso a determinados "Grid Disk".  Se debe usar un archivo "cellkey.ora" por cada una de las bases de datos. Este método provee una granularidad más fina de poder restringir el acceso a los "Grid Disk".

Por  defecto "Oracle Exadata Database Machine" permite que todos los clústeres de ASM y bases de datos en el sistema puedan acceder a todos los "Grid Disk" en cualquier "Exadata Cell", esto también es llamado por Oracle como "Seguridad Abierta".

¿Cuándo se debe implementar la seguridad en un "Oracle Exadata Database Machine"?

  • Cuando se requiere dividir el negocio entre varios departamentos y varios Clústeres de bases de datos y permitir que cada uno de esos Clústeres tengan acceso a determinados "Exadata Cell".
  • Cuando se tienen varios ambientes de TI dentro de un mismo "Oracle Exadata Database Machine" y el ciclo de vida afecta algunos "Exadata Cell".
  • Cuando se necesita prohibir que ambientes de prueba tengan acceso al almacenamiento de los sistemas de Producción.
  • Como buena práctica de seguridad.
  • Para evitar el mal uso o corrupción del almacenamiento por bases de datos que no son críticas.

Ejemplo de Seguridad a nivel de ASM y base de datos:

  • El Clúster de ASM "A" comparte dos  "Grid Disk" en cada "Exadata Cell" para almacenar una base de datos sencilla y otra en Clúster.
  • El Clúster de ASM "B" comparte un "Grid Disk" en cada "Exadata Cell" para almacenar una base de datos sencilla.
  • El Clúster de ASM "B" comparte otro conjunto de un solo "Grid Disk" por cada "Exadata Cell" para almacenar una base de datos de tipo RAC.
  • El Clúster de ASM "A" no tendrá acceso a los "Grid Disk" del Clúster de ASM "B" y viceversa.
  • La base de datos sencilla que utiliza el Clúster de ASM "A" sí podría tener acceso a todos los "Grid Disk" que utiliza el Clúster de ASM "A".
  • La base de datos Sencilla que utiliza el Clúster de ASM "B" no podría tener acceso a los "Grid Disk" que utiliza la base de datos en Clúster dentro del mismo Clúster de ASM y viceversa.

exadata-seguranca-01

Configuración de Seguridad a nivel de ASM

  1. Bajar el servicio de Base de Datos y ASM. Notar que en un ambiente de "Exadata Database Machine" se necesita realizar estos pasos en cada Servidor dentro del Clúster de ASM.
  2. Utilizar el usuario root (Esto bajará todos los servicios):

    [root@exadb01  ~]# crsctl stop crs

    Utilizar el usuario oracle (Si no se tiene acceso al usuario root):

    [oracle@exadb01 ~]$ ps -ef |  grep pmon
    oracle    3490     1  0 04:49 ?        00:00:00 asm_pmon_+ASM oracle    3739     1  0 04:50 ?        00:00:00 ora_pmon_xdbvm oracle    3912  3392  0 04:50 pts/2    00:00:00 grep pmon
    [oracle@exadb01 ~]$ srvctl stop database -d xdbvm
    [oracle@exadb01 ~]$ ps -ef | grep pmon oracle    3490     1  0 04:49 ?        00:00:00 asm_pmon_+ASM oracle    4139  3392  0 04:51 pts/2    00:00:00 grep pmon
    [oracle@exadb01 ~]$ srvctl stop diskgroup -g DATA [oracle@exadb01 ~]$ srvctl stop diskgroup -g RECO [oracle@exadb01 ~]$ srvctl stop asm
    [oracle@exadb01 ~]$ ps -ef | grep pmon oracle    4215  3392  0 04:52 pts/2    00:00:00 grep pmon

  3. Generar una llave de seguridad usando el comando de CellCLI "CREATE KEY". Ejecutar este comando una sola vez en cualquier "Exadata Cell".
  4. Exadata Cell Cell01:

    login as: celladmin
    celladmin@192.168.56.101's  password:
    Last login: Tue Dec  3 04:41:31 2013
    [celladmin@cell01 ~]$  service celld status
    Password:
    rsStatus:               running
    msStatus:               running
    cellsrvStatus:          running
    [celladmin@cell01 ~]$  cellcli
    CellCLI: Release 11.2.3.2.1  - Production on Tue Dec 03 04:53:25 GMT+00:00 2013
    Copyright (c) 2007, 2012,  Oracle.  All rights reserved.
    Cell Efficiency Ratio: 510 CellCLI> create key 8804b0e5bb8f6a4d10a0e17843e60c1

    Exadata Cell Cell02:

    login  as: celladmin
    celladmin@192.168.56.102's  password:
    Last login: Tue Dec  3 04:42:17 2013
    [celladmin@cell02 ~]$  service celld status
    Password:
    rsStatus:               running
    msStatus:               running
    cellsrvStatus:          running

  5. Utilizar el comando  "ASSIGN KEY" para asignar la llave de seguridad al Clúster de ASM que se requiere que  tenga acceso a los  "Exadata Cell" elegidos.
  6. Exadata Cell Cell01:

    CellCLI> alter  cell realmName=my_realm
    Cell cell01  successfully altered
    CellCLI>  assign key for +ASM='8804b0e5bb8f6a4d10a0e17843e60c1'
    Key for +ASM  successfully created

    Exadata Cell Cell02:

    CellCLI> alter  cell realmName=my_realm
    Cell cell02  successfully altered
    CellCLI>  assign key for +ASM='8804b0e5bb8f6a4d10a0e17843e60c1'
    Key for +ASM successfully created

    Nota: También se puede usar comandos de  DCLI para ejecutar la sentencia en todos los "Exadata Cell" requeridos:

    dcli -c  cell01,cell02 "cellcli -e assign key for +ASM='8804b0e5bb8f6a4d10a0e17843e60c1'

  7. Revisar los "Grid Disk" disponibles en el "Exadata Cell Cell01"
  8. CellCLI> list griddisk
             DATA_CD_disk01_cell01   active
             DATA_CD_disk02_cell01   active
             DATA_CD_disk03_cell01   active
             DATA_CD_disk04_cell01   active
             DATA_CD_disk05_cell01   active
             DATA_CD_disk06_cell01   active
             DATA_CD_disk07_cell01   active
             DATA_CD_disk08_cell01   active
             DATA_CD_disk09_cell01   active
             DATA_CD_disk10_cell01   active
             DATA_CD_disk11_cell01   active
             DATA_CD_disk12_cell01   active
             RECO_CD_disk01_cell01   active
             RECO_CD_disk02_cell01   active
             RECO_CD_disk03_cell01   active
             RECO_CD_disk04_cell01   active
             RECO_CD_disk05_cell01   active
             RECO_CD_disk06_cell01   active
             RECO_CD_disk07_cell01   active
             RECO_CD_disk08_cell01   active
             RECO_CD_disk09_cell01   active
             RECO_CD_disk10_cell01   active
             RECO_CD_disk11_cell01   active
             RECO_CD_disk12_cell01   active 

  9. Usar el comando "CREATE GRIDDISK" o "ALTER GRIDDISK" para configurar la seguridad en los "Grid Disk" en los cuales se permitirá el acceso desde ASM.
  10. [oracle@exadb01 ~]$ dcli -g  ./cell_group "cellcli -e \alter griddisk all availableTo=\'+ASM\'"
    The authenticity of host  'cell01 (192.168.56.101)' can't be established.
    RSA key fingerprint is  39:e3:37:14:23:4c:6e:eb:08:9f:c6:07:d7:55:7e:e0.
    Are you sure you want to  continue connecting (yes/no)? The authenticity of host 'cell02  (192.168.56.102)' can't be established.
    RSA key fingerprint is  39:e3:37:14:23:4c:6e:eb:08:9f:c6:07:d7:55:7e:e0.
    Are you sure you want to  continue connecting (yes/no)? yes
    Warning: Permanently added 'cell01,192.168.56.101'  (RSA) to the list of known hosts.
    celladmin@cell01's password:  Please type 'yes' or 'no':
    Warning: Permanently added  'cell02,192.168.56.102' (RSA) to the list of known hosts.
    celladmin@cell02's password:
    cell01: GridDisk DATA_CD_disk01_cell01  successfully altered
    cell01: GridDisk  DATA_CD_disk02_cell01 successfully altered
    cell01: GridDisk  DATA_CD_disk03_cell01 successfully altered
    cell01: GridDisk  DATA_CD_disk04_cell01 successfully altered
    cell01: GridDisk  DATA_CD_disk05_cell01 successfully altered
    cell01: GridDisk  DATA_CD_disk06_cell01 successfully altered
    cell01: GridDisk  DATA_CD_disk07_cell01 successfully altered
    cell01: GridDisk  DATA_CD_disk08_cell01 successfully altered
    cell01: GridDisk  DATA_CD_disk09_cell01 successfully altered
    cell01: GridDisk  DATA_CD_disk10_cell01 successfully altered
    cell01: GridDisk  DATA_CD_disk11_cell01 successfully altered
    cell01: GridDisk  DATA_CD_disk12_cell01 successfully altered
    cell01: GridDisk  RECO_CD_disk01_cell01 successfully altered
    cell01: GridDisk  RECO_CD_disk02_cell01 successfully altered
    cell01: GridDisk  RECO_CD_disk03_cell01 successfully altered
    cell01: GridDisk  RECO_CD_disk04_cell01 successfully altered
    cell01: GridDisk  RECO_CD_disk05_cell01 successfully altered
    cell01: GridDisk  RECO_CD_disk06_cell01 successfully altered
    cell01: GridDisk  RECO_CD_disk07_cell01 successfully altered
    cell01: GridDisk  RECO_CD_disk08_cell01 successfully altered
    cell01: GridDisk  RECO_CD_disk09_cell01 successfully altered
    cell01: GridDisk  RECO_CD_disk10_cell01 successfully altered
    cell01: GridDisk  RECO_CD_disk11_cell01 successfully altered
    cell01: GridDisk  RECO_CD_disk12_cell01 successfully altered
    cell02: GridDisk  DATA_CD_disk01_cell02 successfully altered
    cell02: GridDisk  DATA_CD_disk02_cell02 successfully altered
    cell02: GridDisk  DATA_CD_disk03_cell02 successfully altered
    cell02: GridDisk  DATA_CD_disk04_cell02 successfully altered
    cell02: GridDisk  DATA_CD_disk05_cell02 successfully altered
    cell02: GridDisk  DATA_CD_disk06_cell02 successfully altered
    cell02: GridDisk  DATA_CD_disk07_cell02 successfully altered
    cell02: GridDisk  DATA_CD_disk08_cell02 successfully altered
    cell02: GridDisk  DATA_CD_disk09_cell02 successfully altered
    cell02: GridDisk  DATA_CD_disk10_cell02 successfully altered
    cell02: GridDisk  DATA_CD_disk11_cell02 successfully altered
    cell02: GridDisk  DATA_CD_disk12_cell02 successfully altered
    cell02: GridDisk  RECO_CD_disk01_cell02 successfully altered
    cell02: GridDisk  RECO_CD_disk02_cell02 successfully altered
    cell02: GridDisk  RECO_CD_disk03_cell02 successfully altered
    cell02: GridDisk  RECO_CD_disk04_cell02 successfully altered
    cell02: GridDisk  RECO_CD_disk05_cell02 successfully altered
    cell02: GridDisk  RECO_CD_disk06_cell02 successfully altered
    cell02: GridDisk  RECO_CD_disk07_cell02 successfully altered
    cell02: GridDisk  RECO_CD_disk08_cell02 successfully altered
    cell02: GridDisk  RECO_CD_disk09_cell02 successfully altered
    cell02: GridDisk  RECO_CD_disk10_cell02 successfully altered
    cell02: GridDisk  RECO_CD_disk11_cell02 successfully altered
    cell02: GridDisk RECO_CD_disk12_cell02  successfully altered

  11. Revisar el estado y la disponibilidad de los "Grid Disk" en el "Exadata Cell Cell01"
  12. CellCLI> list griddisk  attributes name, availableTo
             DATA_CD_disk01_cell01   +ASM
             DATA_CD_disk02_cell01   +ASM
             DATA_CD_disk03_cell01   +ASM
             DATA_CD_disk04_cell01   +ASM
             DATA_CD_disk05_cell01   +ASM
             DATA_CD_disk06_cell01   +ASM
             DATA_CD_disk07_cell01   +ASM
             DATA_CD_disk08_cell01   +ASM
             DATA_CD_disk09_cell01   +ASM
             DATA_CD_disk10_cell01   +ASM
             DATA_CD_disk11_cell01   +ASM
             DATA_CD_disk12_cell01   +ASM
             RECO_CD_disk01_cell01   +ASM
             RECO_CD_disk02_cell01   +ASM
             RECO_CD_disk03_cell01   +ASM
             RECO_CD_disk04_cell01   +ASM
             RECO_CD_disk05_cell01   +ASM
             RECO_CD_disk06_cell01   +ASM
             RECO_CD_disk07_cell01   +ASM
             RECO_CD_disk08_cell01   +ASM
             RECO_CD_disk09_cell01   +ASM
             RECO_CD_disk10_cell01   +ASM
             RECO_CD_disk11_cell01   +ASM
             RECO_CD_disk12_cell01   +ASM

  13. Revisar el estado y disponibilidad de los "Grid Disk" en el "Exadata Cell Cell02"
  14. CellCLI> list griddisk  attributes name, availableTo
             DATA_CD_disk01_cell02   +ASM
             DATA_CD_disk02_cell02   +ASM
             DATA_CD_disk03_cell02   +ASM
             DATA_CD_disk04_cell02   +ASM
             DATA_CD_disk05_cell02   +ASM
             DATA_CD_disk06_cell02   +ASM
             DATA_CD_disk07_cell02   +ASM
             DATA_CD_disk08_cell02   +ASM
             DATA_CD_disk09_cell02   +ASM
             DATA_CD_disk10_cell02   +ASM
             DATA_CD_disk11_cell02   +ASM
             DATA_CD_disk12_cell02   +ASM
             RECO_CD_disk01_cell02   +ASM
             RECO_CD_disk02_cell02   +ASM
             RECO_CD_disk03_cell02   +ASM
             RECO_CD_disk04_cell02   +ASM
             RECO_CD_disk05_cell02   +ASM
             RECO_CD_disk06_cell02   +ASM
             RECO_CD_disk07_cell02   +ASM
             RECO_CD_disk08_cell02   +ASM
             RECO_CD_disk09_cell02   +ASM
             RECO_CD_disk10_cell02   +ASM
             RECO_CD_disk11_cell02   +ASM
             RECO_CD_disk12_cell02   +ASM

  15. Construir un archivo "cellkey.ora" usando la clave de seguridad generada. Copiar el archivo "cellkey.ora" dentro el directorio "/etc/oracle/cell/network-config/" en cada servidor del clúster de ASM.
  16. [oracle@exadb01 ~]$ pwd
    /home/oracle
    [oracle@exadb01 ~]$ touch  cellkey.ora
    [oracle@exadb01 ~]$ vi  cellkey.ora
    [oracle@exadb01 ~]$ cat  cellkey.ora
    key=8804b0e5bb8f6a4d10a0e17843e60c1
    asm=+ASM
    #realm=my_realm
    [oracle@exadb01 ~]$

    Copiar al directorio deseado (/etc/oracle/cell/network-config/)

    [oracle@exadb01 ~]$ cp  cellkey.ora /etc/oracle/cell/network-config/
    [oracle@exadb01 ~]$ cd  /etc/oracle/cell/network-config
    [oracle@exadb01  network-config]$ chmod 640 cellkey.ora
    [oracle@exadb01  network-config]$ vi cellkey.ora
    [oracle@exadb01  ~]$ cat cellkey.ora
    key=8804b0e5bb8f6a4d10a0e17843e60c1
    asm=+ASM
    realm=my_realm

  17. Iniciar la instancia de ASM y la instancia de Base de Datos.
  18. [oracle@exadb01 ~]$ ps -ef |  grep pmon
    oracle   32175   3392  0 06:20 pts/2    00:00:00 grep pmon
    [oracle@exadb01 ~]$ srvctl  start asm
    [oracle@exadb01 ~]$ ps -ef |  grep pmon
    oracle   32261      1  0 06:20 ?        00:00:00 asm_pmon_+ASM
    oracle   32346   3392  0 06:20 pts/2    00:00:00 grep pmon
    [oracle@exadb01 ~]$ srvctl  start diskgroup -g DATA
    [oracle@exadb01 ~]$ srvctl  start diskgroup -g RECO
    [oracle@exadb01 ~]$ srvctl  start database -d xdbvm
    [oracle@exadb01 ~]$ ps -ef |  grep pmon
    oracle     423   3392  0 06:24 pts/2    00:00:00 grep pmon
    oracle   32261      1  0 06:20 ?        00:00:00 asm_pmon_+ASM
    oracle   32520      1  0 06:21 ?        00:00:00 ora_pmon_xdbvm
    [oracle@exadb01  ~]$

  19.  Realizar "Login" a la base de datos y revisar el inicio correcto de la misma.
  20. [oracle@exadb01 ~]$ sqlplus  /nolog
    SQL*Plus: Release 11.2.0.3.0  Production on Tue Dec 3 06:25:25 2013
    
    Copyright (c) 1982, 2011,  Oracle.  All rights reserved.
    
    SQL> connect  sys/welcome1@xdbvm as sysdba
    Connected.
    
    SQL> select  open_mode,database_role from v$database;
    
    OPEN_MODE            DATABASE_ROLE
    -------------------  ----------------
    READ WRITE           PRIMARY

  21. Revisar la clave desde los "Exadata Cell"
  22. Exadata Cell Cell01:

    CellCLI> list key
    +ASM    8804b0e5bb8f6a4d10a0e17843e60c1 


    Exadata Cell Cell02:

    CellCLI>  list key
    +ASM     8804b0e5bb8f6a4d10a0e17843e60c1


Deiby Gómez es un DBA con experiencia en Oracle Exadata Database Machine y Soluciones de Alta Disponibilidad. Frecuentemente da conferencias en distintos eventos de Oracle en Guatemala tales como "Oracle Technology Network Tour", "Java Day", "Primer Simposio de Oracle" y en varias Universidades de su país de residencia (Guatemala). Deiby es el primer Oracle ACE de Guatemala. Deiby es "Oracle RAC 11g and Grid Infraestructure Administrator" y "Exadata Database Machine X3 Administrator". Constantemente publica artículos en su blog www.oraclefromguatemala.com.gt.

Yenugula Venkata RaviKumar es un DBA con más de 13 años de experiencia, especializado en ambientes de Alta Disponibilidad de Bases de Datos (RAC, Data Guard, Golden Gate, entre otras),  afinación del rendimiento para Bases de Datos, Migraciones y Respaldos, Oracle Exadata X2 y X3, experto en Sistemas operativos como AIX, HP-UX y Linux . Ha participado como conferencista en varios eventos Oracle en la India donde actualmente reside. Obtuvo el título de Oracle Certified Master 10g en el año 2009. Constantemente publica artículos en su blog http://yvrk1973.blogspot.in.