Ayuda con Query para consultar los privilegios que tiene asignado un grupo de PACKAGE (Oracle)

Buenos Días. Saludos a todos.

Me encuentro con un problema, necesito saber si existe alguna vista o tabla que me permita saber que privilegios tiene asignado un grupo de paquetes. Son 450 paquetes y necesito saber cual de ellos no tiene permisos de Ejecución.

Consultar Permisos de paquetes Oracle

Gracias de antemano.

Saludos.

Por ejemplo, para ver los privilegios de un grupo de tablas, se puede usar la (dba_tab_privs) pero en el caso de los paquetes cual tabla o vista puedo usar? Gracias

En respuesta a por Erik Olave

En realidad no vas mal encaminado, la vista DBA_TAB_PRIVS es la que contiene los privilegios asignados a los objetos de la base de datos, aunque la nomenclatura es un poco engañosa, ya que lo de TAB no se refiere sólo a las tablas, es para todos los objetos, y el campo TABLE_NAME mejor debería llamarse OBJECT_NAME.

Una manera rápida de localizar los PACKAGES es seleccionar los registros con permisos de ejecución:

select * from dba_tab_privs
where privilege = 'EXECUTE';

 

Aprovecho para recordar algunas sentencias útiles para consultar los roles y privilegios generales del usuario que tiene abierta la sesión:

select * from user_role_privs;
select * from user_sys_privs;

 

También te pueden ser muy útiles estas sentencias obtenidas de esta web para listar recursivamente los privilegios de los usuarios de la base de datos:

Listado de roles y privilegios de sistema de los usuarios

select
  lpad(' ', 2*level) || granted_role "User, his roles and privileges"
from
  (
  /* THE USERS */
    select 
      null     grantee, 
      username granted_role
    from 
      dba_users
    where
      username like upper('%&enter_username%')
  /* THE ROLES TO ROLES RELATIONS */ 
  union
    select 
      grantee,
      granted_role
    from
      dba_role_privs
  /* THE ROLES TO PRIVILEGE RELATIONS */ 
  union
    select
      grantee,
      privilege
    from
      dba_sys_privs
  )
start with grantee is null
connect by grantee = prior granted_role;

 

Privilegios de sistema para roles y usuarios 

select
  lpad(' ', 2*level) || c "Privilege, Roles and Users"
from
  (
  /* THE PRIVILEGES */
    select 
      null   p, 
      name   c
    from 
      system_privilege_map
    where
      name like upper('%&enter_privliege%')
  /* THE ROLES TO ROLES RELATIONS */ 
  union
    select 
      granted_role  p,
      grantee       c
    from
      dba_role_privs
  /* THE ROLES TO PRIVILEGE RELATIONS */ 
  union
    select
      privilege     p,
      grantee       c
    from
      dba_sys_privs
  )
start with p is null
connect by p = prior c;

 

Privilegios asignados a los objetos

select
  case when level = 1 then 
     own || '.' || obj || ' (' || typ || ')' else
  lpad (' ', 2*(level-1)) || obj || nvl2 (typ, ' (' || typ || ')', null)
  end
from
  (
  /* THE OBJECTS */
    select 
      null          p1, 
      null          p2,
      object_name   obj,
      owner         own,
      object_type   typ
    from 
      dba_objects
    where
       owner not in 
        ('SYS', 'SYSTEM', 'WMSYS', 'SYSMAN','MDSYS',
         'ORDSYS','XDB', 'WKSYS', 'EXFSYS', 
         'OLAPSYS', 'DBSNMP', 'DMSYS','CTXSYS',
         'WK_TEST', 'ORDPLUGINS', 'OUTLN')
      and object_type not in ('SYNONYM', 'INDEX')
  /* THE OBJECT TO PRIVILEGE RELATIONS */ 
  union
    select
      table_name p1,
      owner      p2,
      grantee,
      grantee,
      privilege
    from
      dba_tab_privs
  /* THE ROLES TO ROLES/USERS RELATIONS */ 
  union
    select 
      granted_role  p1,
      granted_role  p2,
      grantee,
      grantee,
      null
    from
      dba_role_privs
  )
start with p1 is null and p2 is null 
connect by p1 = prior obj and p2 = prior own;

 

Muchísimas muchísimas graciassss.

De verdad esto es justo lo que estaba buscando.

Mil gracias hermano, Dios lo siga bendiciendo en grande.

Saludos cordiales.

 

Hola amigos.

Tengo una consulta. Quisiera saber a que objetos(tables, procedure, functions. etc) tiene acceso un rol determinado. Estaré atento.

En respuesta a por Carlos

Estimado, por conultar con cierto usuario Oracle 12c en una tabla no puede ver la data completa en una tabla (se tiene *********1234), pero con otro usuario si lo puedo todo el dato. Segun lo explicado son privilegios. Me podrian ayudar indicando como se otorta esto previlegios en Oracle 12C


Libros de Administración Oracle (DBA) y PL/SQL

¿Quieres profundizar más en PL/SQL de Oracle o en administración de bases de datos Oracle? Puedes hacerlo consultando alguno de estos libros de Oracle.

Los libros que ves a continuación son una selección de los que a mi me parecen más interesantes para aprender administración y desarrollo PL/SQL, teniendo en cuenta precio y temática, espero que te puedan ser de utilidad:

  • eBooks de Oracle gratuítos para la versión Kindle, o muy baratos (menos de 4€):
  • Libros recomendados de Oracle

Hola Espero me puedan ayudar. Tengo 2 consultas. Tengo un esquema con mucha información tablas de mas de 5 millones de registros en ciertos casos y veo que se me han creado automaticamente supongo porque yo no las he creado tablas que empiezan con EPC_..,SMP_..,VBZ_..,VDK_..,VMQ_..' , la consulta seria porque se crearon estas tablas La segunda consulta, cree un esquema a partir de ese esquema muy grande en el nuevo esquema limpie todas las tablas,y le hice un drop a todas las tablas que empezaban con el nombre EPC_..,SMP_..,VBZ_..,VDK_..,VMQ_..' , pero tengo algunas tablas que no las puedo eliminar porque revisando tienen dependencia con otras tablas del esquema original por ejemplo la tabla NUEVOESQUEMA.SMP_VDN_TARGET_TYPE_DEFN tiene dependencia con VIEJOESQUEMA.SMP_VDN_TARGET_LIST como borro esa dependencia para poder hacer el DROP y porque se creo esta dependencia ?