Excluir los usuarios por defecto en Oracle
Las bases de datos tienen varios usuarios por defecto, por ejemplo el más conocido es SYSTEM y otros que se crean al activar o instalar una opción adicional como “Oracle Application Express”. En muchas ocasiones no estamos interesados en conocer los detalles de ellos cuando hacemos consultas al diccionario de la base de datos. Por ejemplo si quieres conocer un resumen por tipo de objetos pero solo te interesan los usuarios propios del negocio, entonces debemos excluir los esquemas que crea Oracle por defecto o para sus funcionalidades.
Revisando la documentación en línea de Oracle se pueden conseguir varios ejemplos de los usuarios que deberíamos excluir en nuestras consultas sino queremos verlos.
A continuación les muestro la lista de los usuarios que excluyo en mis consultas de monitoreo:
Por ejemplo para conocer cuántos tipos de objetos tengo en mi base de datos.
¿Tienes una forma más sencilla de excluir los usuarios por defecto de Oracle? Compártela con nosotros en los comentarios.
Fuentes:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/tdpsg/securing-the-database-installation-and-configuration.html
https://docs.oracle.com/cd/B28359_01/server.111/b28337/tdpsg_user_accounts.htm
https://docs.oracle.com/cd/A97630_01/win.920/a95490/username.htm
https://docs.oracle.com/database/121/ADMIN/secure.htm
Revisando la documentación en línea de Oracle se pueden conseguir varios ejemplos de los usuarios que deberíamos excluir en nuestras consultas sino queremos verlos.
A continuación les muestro la lista de los usuarios que excluyo en mis consultas de monitoreo:
owner not in ('ANONYMOUS','AUDSYS','CTXSYS','DBSNMP','LBACSYS','MDSYS','OLAPSYS','ORDDATA','ORDPLUGINS','ORDSYS','SI_INFORMTN_SCHEMA',
'SYS','SYSBACKUP','SYSDG','SYSKM','SYSTEM','WMSYS','XDB','DIP','MDDATA','ORACLE_OCM','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR',
'XS$NULL','HR','OE','PM','IX','SH','SCOTT','PERFSTAT','SYSMAN','WKSYS','FLOWS_FILES','PUBLIC','OUTLN','DMSYS','EXFSYS','APPQOSSYS','APEX_PUBLIC_USER')
and owner not like 'APEX_%'
Por ejemplo para conocer cuántos tipos de objetos tengo en mi base de datos.
set lin 180
set pages 200
col owner for a24 heading "Owner"
col object_type FORMAT A36 heading "Object Type"
col total for 9999999
col invalid for 9999999
col size_mb for 9999999
select a.owner, a.object_type,a.invalid, a.total, b.size_mb
from
(select owner,translate(object_type,' ','_') object_type, nvl(SUM(DECODE(STATUS,'INVALID',1)),0) INVALID, COUNT(1) TOTAL
from dba_objects
WHERE OWNER NOT IN ('ANONYMOUS','AUDSYS','CTXSYS','DBSNMP','LBACSYS','MDSYS','OLAPSYS','ORDDATA','ORDPLUGINS','ORDSYS','SI_INFORMTN_SCHEMA',
'SYS','SYSBACKUP','SYSDG','SYSKM','SYSTEM','WMSYS','XDB','DIP','MDDATA','ORACLE_OCM','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR',
'XS$NULL','HR','OE','PM','IX','SH','SCOTT','PERFSTAT','SYSMAN','WKSYS','FLOWS_FILES','PUBLIC','OUTLN','DMSYS','EXFSYS','APPQOSSYS','APEX_PUBLIC_USER')
and owner not like 'APEX_%'
group by owner, object_type) a,
(SELECT owner, translate(segment_type,' ','_') segment_type, round(sum(bytes/1024/1024),2) size_mb
FROM dba_segments
WHERE OWNER NOT IN ('ANONYMOUS','AUDSYS','CTXSYS','DBSNMP','LBACSYS','MDSYS','OLAPSYS','ORDDATA','ORDPLUGINS','ORDSYS','SI_INFORMTN_SCHEMA',
'SYS','SYSBACKUP','SYSDG','SYSKM','SYSTEM','WMSYS','XDB','DIP','MDDATA','ORACLE_OCM','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR',
'XS$NULL','HR','OE','PM','IX','SH','SCOTT','PERFSTAT','SYSMAN','WKSYS','FLOWS_FILES','PUBLIC','OUTLN','DMSYS','EXFSYS','APPQOSSYS','APEX_PUBLIC_USER')
and owner not like 'APEX_%'
group by owner,segment_type) b
where a.owner=b.owner(+) and a.object_type=b.segment_type(+)
ORDER BY owner,object_type;
La consulta anterior nos da resultados más limpios y sencillos de leer. Sin embargo, debemos recordar que a veces algún operador descuidado puede crear objetos en esquemas como SYS o SYSTEM, muchas veces he conseguido que un operador ejecuta un control de cambio para crear unos índices y sin definir el usuario de aplicativo, por lo tanto los índices se crean con el esquema que se ejecutó el cambio, esto es transparente para el aplicativo pero afectaría el resultado de nuestras consultas de monitoreo. ¿Tienes una forma más sencilla de excluir los usuarios por defecto de Oracle? Compártela con nosotros en los comentarios.
Fuentes:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/tdpsg/securing-the-database-installation-and-configuration.html
https://docs.oracle.com/cd/B28359_01/server.111/b28337/tdpsg_user_accounts.htm
https://docs.oracle.com/cd/A97630_01/win.920/a95490/username.htm
https://docs.oracle.com/database/121/ADMIN/secure.htm
Comments
Post a Comment