Newsletter – Enero 2014 Análisis de Privilegios en Oracle 12c Contenido Página: 1 Análisis de Privilegios en Oracle 12c 7 Conceptos SOA: XPATH Location Path 12 Instalando Oracle 12cR1 en Linux 64 bits Por Ing. Juan Luis Rodríguez jrodrigez@datum.com.gt Oracle 12c introduce una nueva característica llamada "Análisis de Privilegios", que permite fortalecer la seguridad en la aplicación al identificar privilegios y roles que no se usan. Esto le ayudará a definir y asignar sólo los privilegios y roles necesarios, dando más seguridad a la aplicación. El análisis de privilegios permite: 1. Producir un reporte de privilegios y roles usados en la base de datos. 2. Identificar privilegios y roles no utilizados por usuarios y aplicaciones. Editores Generales 5a. Ave. 5-55 Zona14,Edificio Euro Plaza Torre3. II, Nivel 12 Reducir riesgo, ya que fortalece el principio de asignar la menor cantidad de Teléfono: (502)2364-5300Fax: (502)2364-5311 privilegios a usuarios y aplicaciones. Francisco Barrundia Email.info@datum.com.gt Pagina 1/10 Alejandro Lau Debbie Morán Autores Contribuyentes Juan Luis Rodríguez Daniel Caciá Francisco Barrundia En este artículo se muestran los pasos para registrar los privilegios utilizados por los usuarios durante un período de tiempo, lo que ayudará a decidir cuáles será necesario revocar o mantener. 5a Av. 5-55 Zona14, Europlaza World Business Center, Torre II, Nivel 12 PBX (502) 2364-5300 Fax (502) 2364-5311 newsletter@datum.com.gt Página 1 Crear usuarios, roles y tablas para la asignación de privilegios y roles 1. Usuarios: create user jim identified by jim; create user tom identified by tom; create user ann identified by ann; 2. Roles: create role HR_MGR; create role SALES_CLERK; create role ANALYST; 3. Privilegios: grant create session to jim, tom, ann; grant select, update, delete, insert on hr.employees to HR_MGR; grant HR_MGR to jim; grant select on sh.sales to SALES_CLERK; grant SALES_CLERK to tom; grant select any table to ANALYST; grant ANALYST to ann; Definir la captura Proceso de captura de privilegios usados por todos los usuarios, con el paquete DBMS_PRIVILEGE_CAPTURE: exec SYS.DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE ( name => 'All_privs', description => 'Allprivsused', type => dbms_privilege_capture.g_database); Listar las capturas existentes Vista DBA_PRIV_CAPTURES: COL COL COL COL name type enabled roles FORMAT FORMAT FORMAT FORMAT A12 A16 A2 A40 SQL> select name, type, enabled, roles from dba_priv_captures; NAME TYPE EN ROLES ------------ ---------------- -- ---------------------------------------All_privs DATABASE N 5a Av. 5-55 Zona14, Europlaza World Business Center, Torre II, Nivel 12 PBX (502) 2364-5300 Fax (502) 2364-5311 newsletter@datum.com.gt Página 2 Iniciar captura de privilegios y analizar 1. Procedimiento ENABLE_CAPTURE: exec SYS.DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE (name => 'All_privs'); exit NOTA: Se debe salir de SQL*Plus e ingresar nuevamente antes de continuar con el siguiente paso, de otra manera se podrían ver resultados incorrectos en los siguientes pasos. 2. Los usuarios JIM, TOM y ANN ejecutan instrucciones SQL usando sus privilegios. JIM , y ANN seleccionan registros de la tabla HR.EMPLOYEES y TOM selecciona filas de la tabla SH.SALES. sqlplus jim/jim@localhost:1521/pdborcl.localdomain SQL> select employee_id, last_name from hr.employees where salary < 3000; EMPLOYEE_ID ----------116 117 118 119 126 127 128 130 131 132 134 LAST_NAME ------------------------Baida Tobias Himuro Colmenares Mikkilineni Landry Markle Atkinson Marlow Olson Rogers sqlplus tom/tom@localhost:1521/pdborcl.localdomain SQL> select * from sh.sales where amount_sold< 6.42 and cust_id = 6452; PROD_ID CUST_ID TIME_ID CHANNEL_ID PROMO_ID QUANTITY_SOLD AMOUNT_SOLD ---------- ---------- --------- ---------- ---------- ------------- ----------120 6452 29-SEP-00 2 999 1 6.4 120 6452 29-SEP-00 4 999 1 6.4 sqlplus ann/ann@localhost:1521/pdborcl.localdomain SQL> select employee_id, last_name from hr.employees where salary > 3000 and rownum<=5 order by salary desc; EMPLOYEE_ID ----------100 101 102 103 104 LAST_NAME ------------------------King Kochhar De Haan Hunold Ernst 5a Av. 5-55 Zona14, Europlaza World Business Center, Torre II, Nivel 12 PBX (502) 2364-5300 Fax (502) 2364-5311 newsletter@datum.com.gt Página 3 3. Detener captura con procedimiento DISABLE_CAPTURE: sqlplus system/Manager1#@localhost:1521/pdborcl.localdomain exec SYS.DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE (name => 'All_privs'); 4. Generar resultados de captura con procedimiento GENERATE_RESULT. exec SYS.DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT (name => 'All_privs'); 5. Consultar privilegios usados durante período de captura. COL COL COL COL username FORMAT A10 object_owner FORMAT A12 object_name FORMAT A30 obj_priv FORMAT A25 select from where and username, object_owner, object_name, obj_priv dba_used_objprivs username in ('JIM', 'TOM') object_name in ('SALES' , 'EMPLOYEES'); USERNAME ---------TOM JIM OBJECT_OWNER -----------SH HR OBJECT_NAME -----------------------------SALES EMPLOYEES OBJ_PRIV ----------------------SELECT SELECT 6. Mostrar los privilegios usados por ANN. ¿Necesitan realmente ANN y el role ANALYST el privilegio SELECT ANY TABLE? column used_role format a20 column sys_priv format a20 column object_name format a20 select username, used_role, sys_priv, object_name FROM dba_used_privs where username ='ANN' and object_name = 'EMPLOYEES'; USERNAME USED_ROLE SYS_PRIV OBJECT_NAME ---------- -------------------- -------------------- -------------------ANN ANALYST SELECT ANY TABLE EMPLOYEES 7. Los privilegios del sistema usados se obtienen consultado la vista DBA_USED_SYSPRIVS. select username, sys_priv FROM dba_used_sysprivs where username IN ('JIM', 'TOM', 'ANN'); USERNAME ---------JIM TOM ANN ANN SYS_PRIV -------------------CREATE SESSION CREATE SESSION CREATE SESSION SELECT ANY TABLE 8. Consultando la vistaDBA_USED_OBJPRIVS_PATHobtenemos los privilegio usados y si fueron otorgados por medio de roles (columna PATH). COL object_name FORMAT A12 COL path FORMAT A40 5a Av. 5-55 Zona14, Europlaza World Business Center, Torre II, Nivel 12 PBX (502) 2364-5300 Fax (502) 2364-5311 newsletter@datum.com.gt Página 4 COL obj_priv FORMAT A10 select username, obj_priv, object_name, path from dba_used_objprivs_path where username IN ('TOM','JIM','ANN') andobject_name IN ('SALES','EMPLOYEES'); USERNAME ---------JIM TOM OBJ_PRIV ---------SELECT SELECT OBJECT_NAME -----------EMPLOYEES SALES PATH -------------------------------GRANT_PATH('JIM', 'HR_MGR') GRANT_PATH('TOM', 'SALES_CLERK') 9. A través del role HR_MGR, JIM tiene asignados los privilegios select, update, delete, insert sobre la tabla HR.EMPLOYEES. Hasta ahora, JIM solo ha usado el privilegio SELECT. Consultando la vista DBA_UNUSED_PRIVS obtenemos los privilegios no usados, los cuales pueden ser revocados: select username, sys_priv, obj_priv, object_name, path from dba_unused_privs where username='JIM' and object_name = 'EMPLOYEES'; USERNAME OBJ_PRIV OBJECT_NAME PATH ---------- ---------- ------------ -------------------------------------------------JIM DELETE EMPLOYEES GRANT_PATH('SYSTEM', 'DBA', 'EM_EXPRESS_ALL', 'EM_ EXPRESS_BASIC', 'SELECT_CATALOG_ROLE') JIM DELETE EMPLOYEES GRANT_PATH('SYSTEM', 'DBA', 'EM_EXPRESS_ALL', 'EM_ EXPRESS_BASIC', 'SELECT_CATALOG_ROLE') JIM DELETE EMPLOYEES GRANT_PATH('SYSTEM', 'DBA', 'DATAPUMP_IMP_FULL_DAT ABASE', 'EXP_FULL_DATABASE', 'SELECT_CATALOG_ROLE' ) JIM DELETE EMPLOYEES GRANT_PATH('SYSTEM', 'DBA', 'DATAPUMP_IMP_FULL_DAT ABASE', 'IMP_FULL_DATABASE', 'SELECT_CATALOG_ROLE' ) JIM DELETE EMPLOYEES GRANT_PATH('SYSTEM', 'DBA', 'DATAPUMP_EXP_FULL_DAT ABASE', 'EXP_FULL_DATABASE', 'SELECT_CATALOG_ROLE' ) JIM DELETE EMPLOYEES GRANT_PATH('SYSTEM', 'DBA', 'IMP_FULL_DATABASE', ' SELECT_CATALOG_ROLE') JIM DELETE EMPLOYEES GRANT_PATH('SYSTEM', 'DBA', 'IMP_FULL_DATABASE', ' SELECT_CATALOG_ROLE') JIM DELETE EMPLOYEES GRANT_PATH('SYSTEM', 'DBA', 'EXP_FULL_DATABASE', ' SELECT_CATALOG_ROLE') JIM JIM JIM JIM DELETE UPDATE INSERT DELETE EMPLOYEES EMPLOYEES EMPLOYEES EMPLOYEES GRANT_PATH('SYSTEM', 'DBA', 'SELECT_CATALOG_ROLE') GRANT_PATH('JIM', 'HR_MGR') GRANT_PATH('JIM', 'HR_MGR') GRANT_PATH('JIM', 'HR_MGR') 12 rowsselected. 5a Av. 5-55 Zona14, Europlaza World Business Center, Torre II, Nivel 12 PBX (502) 2364-5300 Fax (502) 2364-5311 newsletter@datum.com.gt Página 5 Eliminando la captura Una vez finalizada la identificación de los privilegios no utilizados, detenemos el proceso de captura: exec SYS.DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE (name => 'All_privs'); Conclusión Con el uso de la nueva característica "Análisis de Privilegios", se puede determinar el conjunto de privilegios y roles requeridos para una función específica, agrupado dentro de un nuevo role de base de datos. Los privilegios no usados pueden ser auditados antes de revocarlos. En el sitio oficial de Oracle http://docs.oracle.com/cd/E16655_01/server.121/e17608/priv_analysis.htm#DVADM591 encontrará más información sobre la creación y manejo de las políticas del análisis de privilegios, análisis de privilegios con Cloud Control, análisis de privilegios de tipo ANY y análisis de privilegios de usuario que tiene asignado el role DBA, entre otros. 5a Av. 5-55 Zona14, Europlaza World Business Center, Torre II, Nivel 12 PBX (502) 2364-5300 Fax (502) 2364-5311 newsletter@datum.com.gt Página 6 Conceptos SOA: XPATH - Location Path Por Ing. Daniel Caciá dcacia@datum.com.gt El lenguaje XML Path o XPath es principalmente utilizado para direccionar nodos de un documento XML ya que permite identificar un documento XML como un árbol de nodos, e indicar la navegación a través de paths (direcciones) a partir de la estructura del mismo. Modelo XPath Para aprender a utilizar Xpath se debe visualizar el documento XML como un árbol de nodos muy al estilo de la estructura de directorios de un sistema de archivos. En la siguiente imagen se muestran los diferentes tipos de nodos: 1. 2. 3. 4. 5. Documento raíz, que es el padre de todos los nodos. Elemento raíz, por ejemplo <departments>. Elemento nodo, por ejemplo <department>, <deparment_id> y <deparment_name>. Atributos, por ejemplo num=“1”. El nodo texto, por ejemplo 10 o Administration. Para poder referenciar un nodo XML y obtener su información, se utiliza una expresión "location path" con sintaxis similar a la forma en la que se referencia un archivo. Por ejemplo, si quiero obtener el nodo employee_id del documento siguiente, debo utilizar la expresión /employees/employee/employee_id. 5a Av. 5-55 Zona14, Europlaza World Business Center, Torre II, Nivel 12 PBX (502) 2364-5300 Fax (502) 2364-5311 newsletter@datum.com.gt Página 7 Si consideramos el siguiente documento XML: <?xml version="1.0"?> <employees> <employee employee_id="100"> <name> <first_name>Steven</first_name> <last_name>King</last_name> </name> <salary>24000</salary> </employee> <employee employee_id="101"> <name> <first_name>Neena</first_name> <last_name>Kochhar</last_name> </name> <salary>18000</salary> </employee> Al utilizar los siguientes location paths se obtienen los resultados expuestos a continuación: </employees> Al utilizar la expresión text() se obtiene el valor del nodo. Para obtener el atributo de un nodo, utilizamos el símbolo @. Ejemplos de XPath /AAA Selecciona el elemento raíz AAA 5a Av. 5-55 Zona14, Europlaza World Business Center, Torre II, Nivel 12 PBX (502) 2364-5300 Fax (502) 2364-5311 newsletter@datum.com.gt Página 8 <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> /AAA/CCC Selecciona todos los elementos CCC que son hijos del elemento raíz AAA <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> /AAA/DDD/BBB Selecciona todos los elementos BBB que son hijos de DDD, que a su vez son hijos del elemento raíz AAA <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> //BBB Selecciona todos los elementos BBB 5a Av. 5-55 Zona14, Europlaza World Business Center, Torre II, Nivel 12 PBX (502) 2364-5300 Fax (502) 2364-5311 newsletter@datum.com.gt Página 9 <AAA> <BBB/> <CCC/> <BBB/> <DDD> <BBB/> </DDD> <CCC> <DDD> <BBB/> <BBB/> </DDD> </CCC> </AAA> /AAA/CCC/DDD/* Selecciona todos los elementos contenidos en el camino /AAA/CCC/DDD <AAA> <XXX> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </CCC> <CCC> <BBB> <BBB> <BBB/> </BBB> </BBB> </CCC> </AAA> /AAA/BBB[1] Selecciona el primer hijo BBB del elemento AAA 5a Av. 5-55 Zona14, Europlaza World Business Center, Torre II, Nivel 12 PBX (502) 2364-5300 Fax (502) 2364-5311 newsletter@datum.com.gt Página 10 <AAA> <BBB/> <BBB/> <BBB/> <BBB/> </AAA> /AAA/BBB[last()] Selecciona el último hijo BBB del elemento AAA <AAA> <BBB/> <BBB/> <BBB/> <BBB/> </AAA> Tip Técnico del Mes Consulta Oracle SQL que muestra los usuarios de Oracle conectados y el número de sesiones por usuario: select username Usuario_Oracle, count(username) Numero_Sesiones from v$session group by username order by Numero_Sesiones desc Por Lic. Francisco Barrundia fbarrundia@datum.com.gt 5a Av. 5-55 Zona14, Europlaza World Business Center, Torre II, Nivel 12 PBX (502) 2364-5300 Fax (502) 2364-5311 newsletter@datum.com.gt Página 11 Instalando Oracle 12cR1 en Linux 64 bits Por Lic. Francisco Barrundia fbarrundia@datum.com.gt Instalación de Binarios de Oracle Nota: Las capturas de pantalla han sido editadas o recortadas para minimizar el espacio del artículo y el tamaño del documento. 1. Como un prerrequisito, configuramos la variable de ambiente que indica la ruta donde se instalarán los binarios (ORACLE_HOME). Luego vamos al directorio donde está descomprimido el software de instalación Oracle; y ejecutamos runInstaller para iniciar la instalación: $ export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1 $ cd /stage/database $ ./runInstaller 2. Una vez que inicia el instalador, podemos deseleccionar la configuración con MOS (My Oracle Support). También se puede dejar en blanco el correo electrónico. 3. En la siguiente pantalla, escogemos omitir actualizaciones de software 5a Av. 5-55 Zona14, Europlaza World Business Center, Torre II, Nivel 12 PBX (502) 2364-5300 Fax (502) 2364-5311 newsletter@datum.com.gt Página 12 4. En la siguiente sección indicamos que queremos crear y configurar una base de datos. 5. Luego indicamos que es una instalación tipo Servidor. Si van a realizar pruebas o se tiene recursos limitados, seleccionar tipo Desktop. 6. Vamos con una instalación de instancia sencilla. 7. Seleccionamos instalación avanzada para más opciones de configuración. 5a Av. 5-55 Zona14, Europlaza World Business Center, Torre II, Nivel 12 PBX (502) 2364-5300 Fax (502) 2364-5311 newsletter@datum.com.gt Página 13 8. Dejamos el idioma inglés y opcionalmente agregamos otros idiomas. Recordemos que la configuración de idioma para aplicaciones cliente se hace en el ambiente del cliente. Luego escogemos el tipo de licenciamiento (Enterprise, Standard, Standard One). 9. Seguidamente, el instalador puede sugerir ubicaciones para ORACLE_BASE y ORACLE_HOME. 10. En esta parte del instalador seleccionamos la ubicación del Inventario de Oracle, así como el grupo primario para escribir en este directorio. 11. Procedemos ahora con configuración de una base de datos. Por ejemplo, podemos elegir una de uso general. 5a Av. 5-55 Zona14, Europlaza World Business Center, Torre II, Nivel 12 PBX (502) 2364-5300 Fax (502) 2364-5311 newsletter@datum.com.gt Página 14