Ver los permisos que tiene los usuarios sobre los objetos java

Select para recrear los permisos de un usuario sobre los objetos java:

select 'exec DBMS_JAVA.GRANT_PERMISSION('''||grantee||''', '''||type_name||''', '''||name||''', '''||action||''');' 
from DBA_JAVA_POLICY 
where grantee in ( select username from dba_users where username = ('<usuario>'));
Anuncios

Información sobre usuarios:

Para ver el usuario conectado en esa sesión:

Show user

Para obtener información básica del usuario conectado consulta la vista USER_USERS. Con el siguiente query se obtiene el nombre del usuario y sus tablespaces por defecto.
Para obtener información de todos los usuarios de la base de datos, utiliza la vista DBA_USERS.

select username, account_status, created
from dba_users
 order by 1;

Además de la tabla dba_user existe la función sys_contrext que te permite obtener información similar:

select sys_context('USERENV', 'CURRENT_USER') USUSARIO
    , sys_context ('USERENV', 'AUTHENTICATION_METHOD') AUTH_MTH
    , sys_context ('USERENV','HOST') HOSTS
    , sys_context ('USERENV','INSTANCE_NAME') INST
  FROM DUAL

Para obtener los usuarios conectados a la base de datos ese momento:

select count(*), username from v$session group by username;

En caso de un cluster:

select count(*), username from gv$session group by username;

Obtener las select que se están ejecutando en ese momento en la base de datos:

select  a.sid, a.username, b.sql_text
    from v$session a
     , v$sqltext_with_newlines b
     where a.sql_id = b.sql_id
     order by a.username, a.sid, b.piece;

La misma select que la anterior pero para Oracle 9 o versiones inferiores:

select  a.sid, a.username, b.sql_text
 from v$session a
  , v$sqltext_with_newlines b
   where a.sql_address= b.address
And  a.sql_hash_value = b.hash_value
  order by a.username, a.sid, b.piece;

Cómo ver los roles de un usuario

Para ver los roles del usuario conectado en ese momento:

select username, granted_role
   from user_role_privs;

La siguiente select muestra los roles asignados a un usuario en concreto:

select grantee, granted_role from dba_role_privs
  where grantee = upper ('&grantee')
  order by grantee;

Para ver los roles asignado a un rol:

select role, granted_role
 from role_role_privs;

Para ver los roles definidos en la base de datos:

select role from dba_roles;

Namespaces de los objetos

Normalmente se dice que el identificador unico de un objeto es el  nombre del objeto  más como prefijo el nombre del usuario.

Lo que normalmente es cierto, pero para entender un poco más cómo funciona el nombrado de objetos en oracle es necesario introducir el concepto de  namespace. Un namespace define un grupo de tipos de objetos, los cuales tienen que tener un nombre único dentro del mismo esquema. Los objetos de diferentes namespaces pueden compartir el nombre.

Los objetos que comparten el mismo namespace son:

  1. Tablas
  2. Vistas
  3. Secuencias
  4. Sinónimos privados
  5. Procedimientos funciones y paquetes
  6. Vistas materializadas
  7. Tipos definidos por el usuario

 Por lo tanto es imposible crear una vista con el mismo nombre que una tabla, salvo que este en esquemas diferentes.

El hecho de que tablas, vistas y sinónimos privados compartan el mismo namespace permite que se pueda establecer una capa con diferentes niveles de abtraccion entre lo que el usuario ve y lo que se almacena en las tablas

Estos objetos tienen su propio namespace en oracle:

  1. Indices
  2. Constraints
  3. Clusters
  4. Triggers de base de datos
  5. Links de base de datos privados
  6. Dimensiones

 Por lo tanto es posible que un índice tenga el mismo nombre que una tabla, incluso dentro del mismo esquema