Cuestiones sobre concesión de permisos y seguridad en Oracle
Cuestiones sobre concesión de permisos y seguridad en Oracle Carlos Wed, 02/24/2010 - 18:34Abro este tema a propósito del artículo Grants with grant option, la propiedad transitiva en la concesión de permisos para comentar cualquier cuestión sobre el mismo, o temas relacionados con la seguridad, los roles y la concesión de permisos en Oracle.
q pasa si qiero dar los
Submitted by wilber (not verified) on Wed, 07/04/2007 - 22:58
q pasa si qiero dar los rpivilegios pero no solo a una tabla si no a todas a la ves
Para conceder permisos sobre
Submitted by Carlos on Thu, 07/05/2007 - 18:04
In reply to q pasa si qiero dar los by wilber (not verified)
Para conceder permisos sobre todas las tablas de un usuario a otro usuario se puede utilizar la sentencia:
grant SELECT_ANY_TABLE to ;
Carlos Fernández
Analista de sistemas
EN Oracle 10 no me deja GRANT SELECT_ANY_TABLE TO;
Submitted by Jose (not verified) on Wed, 02/24/2010 - 15:06
In reply to Para conceder permisos sobre by Carlos
Buenas tardes,
En Oracle 10, desde el usuario "aplicacion1" ejecuto el comando --> grant SELECT_ANY_TABLE to aplicacionadmin ;
Y me devuelve:
ORA-01919: el rol 'SELECT_ANY_TABLE' no existe
La idea es que desde aplicacionadmin se pueda realizar tareas de mantenimiento sobre todas las tablas de aplicacion1 y aplicacion2 asi como poder importar y exportar el esquema de cada uno de ellos teniendo su contenido en un tablespace en comun (TB_APLICACION)
¿Como puedo hacer esto?
Gracias
Jose, seguramente el problema
Submitted by Carlos on Wed, 02/24/2010 - 23:31
In reply to EN Oracle 10 no me deja GRANT SELECT_ANY_TABLE TO; by Jose (not verified)
Jose, seguramente el problema es que el usuario 'aplicacion1' no tiene permisos de DBA.
Deberías hacer la concesión de permisos con el usuario SYS o SYSTEM, por ejemplo, o otorgar a 'aplicación1' privilegios para que a su vez pueda conceder permisos.
Hola, necesito crear una
Submitted by Anonimo (not verified) on Thu, 01/24/2008 - 15:08
Hola, necesito crear una tabla en una session, donde esta tabla hace referencias a otras tablas que estan en otra session, me tira un error: previlegios insuficientes
Asignar permisos a otros esquemas
Submitted by Carlos on Thu, 01/24/2008 - 22:50
In reply to Hola, necesito crear una by Anonimo (not verified)
Seguramente es porque el usuario User1 que quiere crear la tabla TabA no tiene permisos asignados sobre la tabla TabB del otro esquema User2 a la que se hace referencia.
Para solucionarlo deberías conectarte con el User2 o un usuario de sistema y asignar los permisos necesarios al User1:
GRANT SELECT ON User2.TabA TO User1;
Carlos Fernández
Analista de sistemas
buen dia, necesito de su
Submitted by Anonimo (not verified) on Mon, 10/31/2016 - 10:06
In reply to Asignar permisos a otros esquemas by Carlos
buen dia,
necesito de su colaboracion con los siguiente,
tengo tres usuarios y uno de ellos es un esquema (usuario1, usuario2, esq_usuario3),
como hago para crear roles y dar los siguientes privilegios:
1- el usuario1 puede consultar, actualizar, borrar, alterar, crear tablas o vistas en esq_usuario3
2- el usuario2 solo puede consultar las tablas y vistas del esquema esq_usuario3 tanto las actuales como las que se vayan creando, pero el usuario2 no puede actualizar, borrar, alterar ni crear tablas o vistas en esq_usuario3
3- el usuario1 no puede actualizar, borrar, alterar, crear tablas o vistas en ningun otro esquema diferente a esq_usuario3
Sobre el punto 1, en
Submitted by Carlos on Mon, 10/31/2016 - 10:25
In reply to buen dia, necesito de su by Anonimo (not verified)
Sobre el punto 1, en principio, con Oracle no puedes dar a un usuario permisos de creación sobre un esquema del que no es propietario, o crea tablas en su propio esquema, o le das permisos para crear tablas en todos los esquemas.
Lo que te podría servir es utilizar el sistema de autenticación proxy que permite a un usuario autenticarse, pero obteniendo los permisos de otro usuario. Es decir, podrías dar al usuario1 permisos para autenticarse con los permisos del propietario de esq_usuario3 con una sentencia como esta:
Entonces, al conectar con usuario1 tendrías permisos para crear tablas en el esquema del que usuario3 es OWNER.
Sobre el punto 2, ya sea con permisos directos o creando roles, que yo sepa no puedes definir en una sola sentencia que un usuario tenga sólo permisos de SELECT sobre todas las tablas y vistas de otro esquema, tienes que asignar los permisos específicamente para cada tabla o vista. No es complicado, pero te obliga a actualizar los permisos cada vez que se crea un objeto nuevo en el esquema, que es lo que entiendo que querías evitar.
Aqui comentábamos ya este tema, pero igualmente te copio un script para creación de un rol con permisos para los objetos de un usuario concreto que también te puede ser útil para la asignación de permisos. Recuerda revisarlo y adaptar los permisos para tus necesidades, como por ejemplo dejar sólo permisos de consulta para las tablas:
El punto 3 ya lo tienes resuelto si sólo asignas los permisos especificos sobre objetos a cada usuario.
Comentario
Submitted by Jose Antonio (not verified) on Wed, 09/16/2009 - 11:35
Gracias por el comentario.
Quisiera añadir que para que que 'U_CONSULTA' pueda trabajar sobre la VISTA sin que la base de datos le devuelva un ORA-00942, este procedimiento también daría resultado:
U_DATOS:
SQL> GRANT SELECT ON TABLA TO U_VISTA WITH GRANT OPTION;
U_VISTA:
SQL> GRANT SELECT ON VISTA TO U_CONSULTA;
U_CONSULTA:
SQL> SELECT * FROM VISTA;
Se elimina por tanto la sentencia de concesión de permisos de U_VISTA a U_CONSULTA sobre el objeto U_DATOS.TABLA:
-- U_VISTA:
-- SQL> GRANT SELECT ON U_DATOS.TABLA TO U_CONSULTA;
Con este procedimiento, se restringe aún mas los permisos del usuario U_CONSULTA, ya que este sólo podría realizar una consulta a la vista VISTA y no a la tabla TABLA.
Saludos! como podria crear
Submitted by Ryusaki (not verified) on Wed, 02/24/2010 - 22:07
Saludos!
como podria crear un usuario y brindarle el privilegio de crear tablas e indices
dentro del usuario system a otro usuario dentro de su sesion?
y que el primer usuario creado al dar privilegios al usuario que creara lo haga con with grant option
por que me marca error que solo con admin option
gracias de antemano
Ryusaki, creo que me he
Submitted by Carlos on Wed, 02/24/2010 - 23:40
In reply to Saludos! como podria crear by Ryusaki (not verified)
Ryusaki, creo que me he perdido, tendrás que explicarte mejor.
A lo mejor lo que quieres hacer es más complicado, pero de momento asegúrate de que al crear el usuario le asignas estos roles para poder conectarse y crear objetos en su propio esquema:
GRANT "CONNECT" TO "APP";
GRANT "RESOURCE" TO "APP";
disculpa tienes razon
Submitted by Ryusaki (not verified) on Thu, 02/25/2010 - 02:57
In reply to Ryusaki, creo que me he by Carlos
disculpa tienes razon tampoco me entendi muy bien,
pues en system debo crear a un usuario con privilegios restringidos
solo crear tablas, vistas e indices con la opcion with grant option, y dentro de ese usuario
crear otro que tambien pueda crear vistas e indices,
pero me marca error que solo con with admin option o que no tengo suficientes
privilegios.
gracias de antemano
Creo que el problema que
Submitted by Carlos on Thu, 02/25/2010 - 17:07
In reply to disculpa tienes razon by Ryusaki (not verified)
Creo que el problema que tenemos es de nomenclatura. No se puede crear un usuario dentro de otro usuario. A los usuarios se les asigna un tablespace por defecto, que es donde se crean todos sus objetos, si no se especifica lo contrario.
Por lo que dices yo entiendo que quieres crear un primer usuario que pueda crear objetos en el tablespace del usuario SYSTEM. Lo que ya no me queda tan claro es cómo quieres crear el segundo, a lo mejor te sirve simplemente crear otro que también pueda crear objetos en el mismo tablespace.
Comentarte también que no es muy habitual ni recomendable que un usuario cree objetos en el tablespace de SYSTEM, este espacio se suele reservar para objetos del sistema, a menos que esté muy justificado lo que quieres hacer, yo lo haría sobre otro tablespace.
Te recomiendo echarle un vistazo al post Cómo crear un nuevo esquema en Oracle paso a paso, y si sigues teniendo problemas, concretando ya con tablespaces y usuarios seguro que nos terminamos de aclarar.
Saludos. gracias de nuevo por
Submitted by Ryusaki (not verified) on Fri, 02/26/2010 - 03:53
In reply to Creo que el problema que by Carlos
Saludos.
gracias de nuevo por tu respuesta.
y pues lo del usuario dentro de otro usuario es condicion para mi tarea, asi k no tengo opcion.
y lo peor de todo es que no puedo dar privilegios de system al primer usuario con with grant option
de crear tablas o vistas, y eso tambien es una condicion indispensable para entregar mi tarea,
y ademas tengo que validar que cada usuario creado solo pueda insertar datod dentro de
una tabla (por ejemplo proyectos) pero que solo
pueda crear proyectos del departamento al que pertenece el usuario, como podria hacer eso?
con trigger, procedimientos, funciones?
Insisto en que no se puede
Submitted by Carlos on Thu, 03/04/2010 - 12:38
In reply to Saludos. gracias de nuevo por by Ryusaki (not verified)
Insisto en que no se puede crear un usuario dentro de otro usuario, puedes asignar a un usuario los mismos privilegios o los mismos roles que a otro, o que compartan el mismo tablespace, o que puedan hacer determinadas acciones sobre los mismos objetos, pero no hay usuarios dentro de otros.
Lo que sí hay, y a lo mejor te refieres a eso es que con la opción WITH GRANT OPTION puedes hacer que el usuario al que concedes privilegios sobre determinados objetos pueda a su vez concederlos a otros usuarios.
Por lo que comentas, seguramente lo que necesitas es conceder permisos de sistema en lugar de privilegios sobre objetos, y para ello, si quieres que el usuario 'autorizado' pueda a su vez conceder estos permisos has de utilizar la opción WITH ADMIN OPTION.
Sobre el control de los datos que un usuario inserta en una tabla, si se tratara de un control sencillo podrías utilizar un CHECK, pero por lo que comentas creo que lo más apropiado sería crear un TRIGGER del tipo BEFORE INSERT asociado a esta tabla que antes de cada INSERT haría la comprobación de que el usuario pertenezca al departamento.
buenas tardes yo voy hacer
Submitted by katherine (not verified) on Thu, 06/10/2010 - 19:20
buenas tardes yo voy hacer una base de datos en un solo computador q sentencia utilizo para q el resto de las computadoras tengan acceso a ella y poder ver todas las tablas como tambien agregar,eliminar y modificar registro?
gracisas
Saludos. Deseo dar
Submitted by Reynaldo (not verified) on Thu, 07/29/2010 - 14:36
Saludos.
Deseo dar privilegios a un usuario para que pueda acceder y modificar los datos y la estructura de los objetos de un esquema. Como puedo hacer esto sin necesidad de ejecutar un grant individual por cada objeto del esquema?
Gracias de antemano por la ayuda.
Si quieres darle los
Submitted by Carlos on Sat, 07/31/2010 - 00:29
In reply to Saludos. Deseo dar by Reynaldo (not verified)
Si quieres darle los privilegios sólo para un esquema creo que no te queda otro remedio que hacerlo objeto por objeto. La alternativa más parecida que se me ocurre es aplicar al usuario un grant de sistema, pero estos permisos los tendría para todos los esquemas:
De todas maneras, puedes utilizar el diccionario para crearte un script y 'automatizar' la concesión de permisos.
Puedes crear sinónimos para todos los objetos, para que el usuario no tenga que acceder con el formato 'esquema.tabla' a las tablas:
Y sacar las sentencias de asignación de los permisos:
Privilegios de DBA
Submitted by Frank (not verified) on Wed, 11/26/2008 - 15:26
In reply to Gracias por la aportación, by Carlos
Buenos Dias.
Soy nuevo en oracle y estube creando algunos roles especificamente para la creacion de objetos tales como tablas vista, secuencias entre otros mas y no consigo cual es el privilegio para crear los COMMENT en las tablas. agradeseria su maximo apoyo en esto.
Privilegios para crear comentarios
Submitted by Carlos on Wed, 11/26/2008 - 22:53
In reply to Privilegios de DBA by Frank (not verified)
Hola Frank
Si el usuario que utilizas es el propietario de las tablas no necesita ningún privilegio especial para crear comentarios en ellas.
Si, por ejemplo, el usuario miusuario ha creado la tabla mitabla podrás ejecutar sin problemas la sentencia:
COMMENT ON COLUMN mitabla.nombre IS 'mi comentario sobre el campo nombre';
Si el usuario que utilizas no es el owner de la tabla o vista que quieres comentar necesitará tener el privilegio COMMENT ANY TABLE y si se tratara de comentar en un índice necesitaría el COMMENT ANY INDEXTYPE.
Para concedérselo, con un usuario con privilegios de DBA (System, por ejemplo) ejecuta la sentencia:
GRANT COMMENT ANY TABLE TO miusuario;
Gratitud
Submitted by Frank (not verified) on Fri, 11/28/2008 - 16:28
In reply to Privilegios para crear comentarios by Carlos
Amigo Muchas Gracias por tu respuesta, me sirvio de gran ayuda...
Si me puede colaborar con
Submitted by jado86 (not verified) on Fri, 04/12/2013 - 22:54
Si me puede colaborar con lo siguiente
Desde un usuario con rol de administrador llamado “hr” el cual es propietario de dos tablas llamadas “employess” y “departments” he creado un usuario llamado “usuario1” y he creado un rol llamado “palma” con privilegios para hacer select a las dos tablas mencionadas, para crear vistas, para crear tablas y para crear sesión, este rol se lo he dado a “usuario1”, además he creado un sinónimo público para cada una de las tablas, las siguientes son las sentencias
Créate user usuario1 identified by clave
create role palma
grant select on employees to palma
grant select on departments to palma
grant create view to palma
grant create table to palma
grant create session to palma
grant palma to usuario1
create or replace public synonym departments
for hr.departments
create or replace public synonym employess
for hr.employess
Mi problema es que al iniciar sesión con “usuario1” y tratar de crear una vista llamada “vista1” con la siguiente sentencia, me dice que no tengo privilegios suficientes para crear la vista.
create or replace view vista1 as
select * from employees
le agradezco si me puede ayudar con este inconveniente.
Las sentencias son
Submitted by Carlos on Sat, 04/13/2013 - 11:03
Las sentencias son exactamente como las escribes? Porque al sinónimo le llamas 'employess', y la vista la creas sobre 'employees'
De todas maneras, para no liarte con el sinónimo puedes crear la vista haciendo referencia directa a la tabla, en lugar del sinónimo:
create or replace view vista1 as select * from hr.employeesHola!! Tengo una duda acerca
Submitted by elfen (not verified) on Fri, 09/27/2013 - 07:53
buenas tardes Señores, Tengo
Submitted by Paolandrea (not verified) on Wed, 10/02/2013 - 21:44
hola necesito ayuda para
Submitted by Claus (not verified) on Fri, 01/17/2014 - 19:38
hola necesito ayuda para hacer una modificacion de character set
estoy utilizando Oracle 11 y mi schema ya esta en producción
trato de alterar la tabla:
ALTER TABLE ESCOLARIDAD CHARACTER SET utf8;
pero me manda el siguiente error :
Informe de error:
Error SQL: ORA-01735: opción ALTER TABLE no válida
01735. 00000 - "invalid ALTER TABLE option"
pense que eran los privilegios del usuario pero ya tiene todos los privilegios hacia una tabla
y gracias de antemano =)
Hola a todos, tengo el
Submitted by ANGELA (not verified) on Thu, 03/20/2014 - 17:14
Hola a todos, tengo el siguiente problema, al iniciar la implementacion de un aplicativo sobre oracle 11g ,se le dio permisos de dba a un usuario, ahora la auditoria solicita quitar estos permios de dba, los quite pero empezaron a salir mensajes en el aplicativo al ejecutar algo como "no existen privilegios en tablespace USERS",revisé y hay muchas tablas creadas en el tablespace "users" por este usuario, pero el usuario tiene un tablespace asignado llamado PALMA. Q instruccion debo ejecutar para darle privilegios sobre este tablespace especificamente a esas tablas Y Puedo cambiar estas tablas al tablespaces Palma?
Sobre los permisos, los
Submitted by Carlos on Fri, 03/21/2014 - 08:12
Sobre los permisos, los usuarios tienen un tablespace definido por defecto, pero los permisos se definen más bien sobre las tablas, no sobre los tablespaces. Puede que el problema sea que al quitarle los privilegios de DBA necesites asignar algún permiso genérico. Te enlazo un artículo en el que se comenta cómo crear un nuevo esquema de usuario desarrollador de Oracle para que puedas revisar si tu usuario tiene los permisos básicos para trabajar.
Sobre mover las tablas a otro Tablespace, enlazo otro post en el que se explica cómo unificar tablespaces en Oracle 10g, ojo con esta operación, que no es complicada, pero es delicada, si lo haces prepáralo bien y te recomiendo que hagas antes una prueba con una tabla que no utilice nadie.
Buena solución, eddy, gracias
Submitted by Carlos on Fri, 04/11/2014 - 09:53
Buena solución, eddy, gracias por compartirla!
Hola, Desde hace un par de
Submitted by pepas (not verified) on Tue, 04/15/2014 - 00:59
Hola,
Desde hace un par de dias que estoy leiendoel foro, y hoy he pensado participar,
Un saludo.
Pues bienvenida, 'pepas',
Submitted by Comunidad-Dataprix on Tue, 04/15/2014 - 10:28
In reply to Hola, Desde hace un par de by pepas (not verified)
Pues bienvenida, 'pepas', pero recuerda que si quieres abrir nuevos temas, y acumular puntos por participar, tienes que registrarte.
Saludos,
Buenas tardes solicito su
Submitted by Galo Galarza (not verified) on Mon, 04/21/2014 - 00:42
Buenas tardes solicito su ayuda mi problema es el siguiente:
Desde el usuario system@xe; connect Normal, trato de compilar un pck que tiene en uno de sus cursores la vista v$process, pero obtengo como error: La tabla o vista no existe, pensé que era por permisos de administrador, pero me sigue saliendo el mismo error. Necesito compilar el pck pero con conexión Normal, porque en SYSDBA no me aparece este error, pero las tablas que se encuentran en el pck y otros prc, los tengo creados en modo de conexión normal, y al pasar a conexión SYSDBA las tablas creadas aparecen que no existen.
Prueba a poner delante de los
Submitted by Carlos on Tue, 04/22/2014 - 11:41
Prueba a poner delante de los objetos el nombre del propietario. Como SYSDBA has de tener acceso a todo, pero si la tabla la ha creado otro usuario y no hay ningún sinónimo público definido sobre la misma has de indicar delante de la misma el usario propietario.
Por ejemplo: SELECT * FROM usuario.tabla
hola buenas, tengo este
Submitted by santos12345 (not verified) on Tue, 02/24/2015 - 22:41
hola buenas, tengo este codigo para generar dos tablas y me da error el crearlas, me podrias decir en q fallo?
CREATE TABLE DIRECCIN(
IDDIRECCION NCHAR(7) NOT NULL CONSTRAINT PK_IDDIRECCION PRIMARY KEY,
CALLE VARCHAR2(30) NOT NULL,
NUMERO NCHAR(4),
PISO NCHAR(2),
LETRA CHAR(2),
CP NCHAR(5),
POBLACION NCHAR(15) NOT NULL
);
Buenas, Me gustaría que
Submitted by Yerly (not verified) on Mon, 04/20/2015 - 15:45
hola carlos un favor soy
Submitted by Alvaro GC (not verified) on Thu, 01/14/2016 - 17:02
hola carlos un favor soy nuevo en esto de los permisos mira este es mi problema
tengo un usuario 'sisalman' con varias tablas, lo que me piden es crear otro usuario 'basico' el cual pueda ver todas las tablas del usuario 'sisalman' pero que solo pueda ejecutar sentencias select, para esto estoy usando Oracle 10G y Toad 9, te agradesco mucho
Hola a todos Quisiera
Submitted by Jesus (not verified) on Tue, 07/05/2016 - 18:40
Hola a todos
Quisiera pedirles su apoyo.
Tengo una funcion que levanta un concurrente en oracle. Si la ejecuto en el esquema apps funciona bien pero si lo hago desde apex no levanta el concurrente.
Ya le di permisos al esquema para que vea la funcion, ya no me marca error en cuanto a que no la ve pero sigue sin levantar el concurrente.
Hay algo mas que deba hacer para apex pueda levantar el concurrente en oracle?
Saludos y gracias
ayuda con esto porfa
Submitted by Diego M (not verified) on Mon, 10/31/2016 - 10:08
ayuda con esto porfa
buen dia, necsito de su
Submitted by Diego M (not verified) on Mon, 10/31/2016 - 16:02
buen dia, necsito de su colaboracion con los siguiente, tengo tres usuarios y uno de ellos es un esquema (usuario1, usuario2, esq_usuario3), como hago para crear roles y dar los siguientes privilegios:
1- el usuario1 puede consultar, actualizar, borrar, alterar, crear tablas o vistas en esq_usuario3
2- el usuario2 solo puede consultar las tablas y vistas del esquema esq_usuario3 tanto las actuales como las que se vallan creando, pero el usuario2 no puede actualizar, borrar, alterar ni crear tablas o vistas en esq_usuario3
3- el usuario1 no puede actualizar, borrar, alterar, crear tablas o vistas en ningun otro esquema diferente a esq_usuario3;
Buenas, Quisiera que me
Submitted by Moi (not verified) on Tue, 05/09/2017 - 03:50
Buenas, Quisiera que me ayudara sobre un problema que tengo.
La Version de Oracle que uso es la versión 11.2.0.4. y bueno de lo que se trata el problema es que hay usuarios que no tienen permisos de actualización (update) sobre una determinada tabla pero al intentar el usuario hacer un “select for update” sobre esa tabla por más que le haya salido mensaje de que no tiene permisos, aun así logra bloquear la tabla y varios usuarios que si tienen permisos de update no puedan actualizar la tabla porque esta bloqueada debido al usuario que no tiene permisos de update y bloqueo la tabla y lo que se quiere es que por mas que intente hacer un "select for update", aparte de que no pueda hacerlo se desea que tampoco bloquee la tabla y no ocasione el problema.
He estado revisando y encontre una solución pero para la version 12c y no para la 11g en la que a un usuario se le quita los privilegios de select y se le otorga privilegio de read:
SQL> revoke select on sh.solo_lectura from usuario_solo_lectura; Revoke succeeded. SQL> grant read on sh.solo_lectura to usuario_solo_lectura; Grant succeeded.Como podria otorgar permisos de lectura a un usuario para una determinada tabla para que no ocasione esos problemas mas o menos como el privilegio READ en la version 12c.
Gracias de Antemano.
Buenas tengo una duda con un
Submitted by Steven (not verified) on Sun, 07/09/2017 - 04:58
Buenas tengo una duda con un script en oracle 12c soy nuevo utilizado oracle Como genero un script que me autogenere el bloqueo de todos los usuarios de la base de datos excluyendo SYS - SYSTEM