rol - ver usuarios oracle
¿Cómo puedo encontrar el PROPIETARIO de un objeto en Oracle? (5)
Quiero encontrar las claves externas de una tabla, pero puede haber más de un usuario / esquema con una tabla con el mismo nombre. ¿Cómo puedo encontrar el que está viendo el usuario actualmente registrado? ¿Hay una función que le da su dueño? ¿Y si hay sinónimos públicos?
Encontré esta pregunta como el resultado principal mientras buscaba en Google cómo encontrar al propietario de una tabla en Oracle, así que pensé que contribuiría con una respuesta específica de la tabla para la conveniencia de los demás.
Para encontrar el propietario de una tabla específica en una base de datos Oracle, use la siguiente consulta:
select owner from ALL_TABLES where TABLE_NAME =''<MY-TABLE-NAME>'';
Las vistas de Oracle como ALL_TABLES y ALL_CONSTRAINTS tienen una columna de propietario, que puede usar para restringir su consulta. También hay variantes de estas tablas que comienzan con USER en lugar de ALL, que solo enumeran objetos a los que puede acceder el usuario actual.
Una de these vistas debería ayudar a resolver su problema. Siempre me funcionaron bien para problemas similares.
Para encontrar el nombre del usuario actual dentro de una sesión de Oracle, use la función USER
.
Tenga en cuenta que el propietario de la restricción, el propietario de la tabla que contiene la clave externa y el propietario de la tabla a la que se hace referencia pueden ser diferentes. Parece que es el propietario de la mesa lo que te interesa, en cuyo caso esto debería estar cerca de lo que quieres:
select Constraint_Name
from All_Constraints
where Table_Name = ''WHICHEVER_TABLE''
and Constraint_Type = ''R'' and Owner = User;
Pregunta interesante: no creo que exista ninguna función de Oracle que haga esto (casi como un comando "which" en Unix), pero puede obtener el orden de resolución para el nombre de:
select * from
(
select object_name objname, object_type, ''my object'' details, 1 resolveOrder
from user_objects
where object_type not like ''SYNONYM''
union all
select synonym_name obj , ''my synonym'', table_owner||''.''||table_name, 2 resolveOrder
from user_synonyms
union all
select synonym_name obj , ''public synonym'', table_owner||''.''||table_name, 3 resolveOrder
from all_synonyms where owner = ''PUBLIC''
)
where objname like upper(''&objOfInterest'')
Puede consultar la vista ALL_OBJECTS:
select owner
, object_name
, object_type
from ALL_OBJECTS
where object_name = ''FOO''
Para encontrar sinónimos:
select *
from ALL_SYNONYMS
where synonym_name = ''FOO''
Solo para aclarar, si la declaración SQL de un usuario hace referencia a un nombre de objeto sin calificación de esquema (por ejemplo, ''FOO''), Oracle FIRST verifica el esquema del usuario para un objeto con ese nombre (incluidos los sinónimos en el esquema de ese usuario). Si Oracle no puede resolver la referencia del esquema del usuario, Oracle busca un sinónimo público.
Si está buscando específicamente restricciones en un nombre de tabla en particular:
select c.*
from all_constraints c
where c.table_name = ''FOO''
union all
select cs.*
from all_constraints cs
join all_synonyms s
on (s.table_name = cs.table_name
and s.table_owner = cs.owner
and s.synonym_name = ''FOO''
)
HTH
- adición:
Si a su usuario se le otorga acceso a las vistas DBA_ (por ejemplo, si se le ha otorgado SELECT_CATALOG_ROLE), puede sustituir '' DBA_
'' en lugar de '' ALL_
'' en los ejemplos de SQL anteriores. Las vistas ALL_x
solo muestran los objetos a los que se le han otorgado privilegios. Las vistas DBA_x
mostrarán todos los objetos de la base de datos, tenga o no privilegios en ellos.