Cuestiones sobre concesión de permisos y seguridad en Oracle
Cuestiones sobre concesión de permisos y seguridad en Oracle Carlos 24 Febrero, 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
Subido por wilber (no verificado) el 4 Julio, 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
Subido por Carlos el 5 Julio, 2007 - 18:04
En respuesta a q pasa si qiero dar los por wilber (no verificado)
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;
Subido por Jose (no verificado) el 24 Febrero, 2010 - 15:06
En respuesta a Para conceder permisos sobre por 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
Subido por Carlos el 24 Febrero, 2010 - 23:31
En respuesta a EN Oracle 10 no me deja GRANT SELECT_ANY_TABLE TO; por Jose (no verificado)
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
Subido por Anonimo (no verificado) el 24 Enero, 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
Subido por Carlos el 24 Enero, 2008 - 22:50
En respuesta a Hola, necesito crear una por Anonimo (no verificado)
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
Subido por Anonimo (no verificado) el 31 Octubre, 2016 - 10:06
En respuesta a Asignar permisos a otros esquemas por 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
Subido por Carlos el 31 Octubre, 2016 - 10:25
En respuesta a buen dia, necesito de su por Anonimo (no verificado)
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
Subido por Jose Antonio (no verificado) el 16 Septiembre, 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
Subido por Ryusaki (no verificado) el 24 Febrero, 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
Subido por Carlos el 24 Febrero, 2010 - 23:40
En respuesta a Saludos! como podria crear por Ryusaki (no verificado)
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
Subido por Ryusaki (no verificado) el 25 Febrero, 2010 - 02:57
En respuesta a Ryusaki, creo que me he por 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
Subido por Carlos el 25 Febrero, 2010 - 17:07
En respuesta a disculpa tienes razon por Ryusaki (no verificado)
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
Subido por Ryusaki (no verificado) el 26 Febrero, 2010 - 03:53
En respuesta a Creo que el problema que por 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
Subido por Carlos el 4 Marzo, 2010 - 12:38
En respuesta a Saludos. gracias de nuevo por por Ryusaki (no verificado)
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
Subido por katherine (no verificado) el 10 Junio, 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
Subido por Reynaldo (no verificado) el 29 Julio, 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
Subido por Carlos el 31 Julio, 2010 - 00:29
En respuesta a Saludos. Deseo dar por Reynaldo (no verificado)
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
Subido por Frank (no verificado) el 26 Noviembre, 2008 - 15:26
En respuesta a Gracias por la aportación, por 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
Subido por Carlos el 26 Noviembre, 2008 - 22:53
En respuesta a Privilegios de DBA por Frank (no verificado)
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
Subido por Frank (no verificado) el 28 Noviembre, 2008 - 16:28
En respuesta a Privilegios para crear comentarios por Carlos
Amigo Muchas Gracias por tu respuesta, me sirvio de gran ayuda...
Si me puede colaborar con
Subido por jado86 (no verificado) el 12 Abril, 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
Subido por Carlos el 13 Abril, 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
Subido por elfen (no verificado) el 27 Septiembre, 2013 - 07:53
buenas tardes Señores, Tengo
Subido por Paolandrea (no verificado) el 2 Octubre, 2013 - 21:44
hola necesito ayuda para
Subido por Claus (no verificado) el 17 Enero, 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
Subido por ANGELA (no verificado) el 20 Marzo, 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
Subido por Carlos el 21 Marzo, 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
Subido por Carlos el 11 Abril, 2014 - 09:53
Buena solución, eddy, gracias por compartirla!
Hola, Desde hace un par de
Subido por pepas (no verificado) el 15 Abril, 2014 - 00:59
Hola,
Desde hace un par de dias que estoy leiendoel foro, y hoy he pensado participar,
Un saludo.
Pues bienvenida, 'pepas',
Subido por Comunidad-Dataprix el 15 Abril, 2014 - 10:28
En respuesta a Hola, Desde hace un par de por pepas (no verificado)
Pues bienvenida, 'pepas', pero recuerda que si quieres abrir nuevos temas, y acumular puntos por participar, tienes que registrarte.
Saludos,
Buenas tardes solicito su
Subido por Galo Galarza (no verificado) el 21 Abril, 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
Subido por Carlos el 22 Abril, 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
Subido por santos12345 (no verificado) el 24 Febrero, 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
Subido por Yerly (no verificado) el 20 Abril, 2015 - 15:45
hola carlos un favor soy
Subido por Alvaro GC (no verificado) el 14 Enero, 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
Subido por Jesus (no verificado) el 5 Julio, 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
Subido por Diego M (no verificado) el 31 Octubre, 2016 - 10:08
ayuda con esto porfa
buen dia, necsito de su
Subido por Diego M (no verificado) el 31 Octubre, 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
Subido por Moi (no verificado) el 9 May, 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
Subido por Steven (no verificado) el 9 Julio, 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