Problema con privilegios

Hola, el tema es este: necesito crear un usuario en la DB que tenga privilegios solo sobre un objeto (ej una tabla) pero al darle permiso de coneccion (grant connect) obtiene todos los privilegios a todos los objetos porque fueron definidos en la creacion de la db asi:

grant select, insert, update, delete on aca_usuarios_ag to public;

ni siquiera puedo hacer un revoke de c/u de los objetos para ese usuario ya que fueron otorgados a public…

hay alguna forma de hacer lo que necesito?

Gracias

Marcelo:

La única que se me ocurre es revocar los privilegios sobre todas las tabla a public (public = todos los usuarios que tengan connect en esa base) y darle los privilegios a cada uno de los usuarios Guaraní sobre todas las tablas que la puedan usar, menos al usuario nuevo.

O sino investigar un poco el tema de roles. Es una tabla generada por el SIU o es una tabla personalizada?

Pueden haber otras alternativas rebuscadas, pero habría que pensarlo un poco …

Saludos

Gustavo

En realidad es para una vista personalizada la cual va a ser usada por una aplicacion externa para tomar datos del guarani. Por eso el inconveniente de los privilegios, ya que los utiliza un tercero.

En principio lo que voy a hacer es crear una nueva BD y correr un proceso periodico que actualice los datos necesarios, por lo menos hasta encontrar una mejor solucion.

Saludos

Hola Marcelo, fijate si sirve encarar el tema creando sinónimos. Con este concepto podrías tener 2 bases de datos: la base de datos de guaraní en producción y otra que sirva únicamente para almacenar sinónimos a objetos pertenecientes a la base de datos de guaraní. A simple vista solo darías permiso de conexión al usuario en la base de datos de sinónimos y no a la de guaraní. Fijate en http://publib.boulder.ibm.com/infocenter/idshelp/v117/topic/com.ibm.sqls.doc/ids_sqs_0505.htm
Con este concepto inclusive podes acceder a otra instancia si es necesario

Ahi estuve viendo el tema de los sinonimos, pintaba lindo pero los permisos se tienen que otorgar sobre la base original (la de produccion), o sea que sigo con el mismo problema del principio…

Saludos

En algun momento habia visto este tema realizando algunas modificaciones en la base como ser creando roles, asignar usuarios a diferentes roles, quitar/agregar permisos a los roles y cambiar la ventana de conexión para setear el rol correspondiente a cada usuario luego de la conexión a la base.
Lo busco y te lo paso si lo encuentro.

Creo que el hilo a que hace referencia Alejandro es:

http://foro.comunidad.siu.edu.ar/index.php?topic=584.msg11422

Saludos

Gustavo

Marcelo:

Estuve consultando con un instructor de cursos de Informix y el tema de los sinónimos debería funcionar, De hecho es lo que se usa en instalaciones importantes que él ha participado como miembro de una consultora y estuvimos haciendo pruebas y funciona bien.

No es como vos decís que los privilegios se tienen que dar en la base de produccion, sino que se dan solo en la base de sinonimos, e inclusive no es necesario darle permisos sobre los sinónimos sino que armando una vista sobre el sinónimo y dándole permisos solo sobre la vista funcionaría.

En cuanto tengamos armado el ejemplo te lo pasamos.

Saludos

Gustavo

Voy a ver el tema de los roles.

Con el tema de los sinonimos, la prueba que hice fue:

-Crear una base
-crear un usuario
-darle permisos de coneccion a la base nueva
-creo el sinonimo en la base nueva
(CREATE SYNONYM vw_vista FOR bd_guarani:vista_orig)

-me conecto con el usuario a la base y hago un select sobre la vista, el error que tira es " No connect permission"

-le doy permisos de coneccion a la base de guarani, hago el select y el error que tira es “No SELECT permission”

-por ultimo si le doy permisos de select a la vista personalizada en la base del guarani, ahi si me devuelve las filas ok.

Algo entonces me estoy perdiendo en el camino, voy a seguir probando

Con el tema de sinonimos lo que deberías hacer es:

-Crear una base nueva
-crear synonimos de cada una de las tablas que usa la vista en la base nueva

  • crear un usuario en la base nueva
  • darle permisos de coneccion SOLO a la base nueva
  • crear una vista en la base nueva haciendo selects sobre los sinonimos
  • darle permisos al usuario sobre la vista
  • conectar con el usuario a la base y hacer un select sobre la vista en la tabla de synonimos, que a su vez accede a los sinonimos de las tablas
  • no sé si tendrás que darle permisos de select sobre las tablas de sinonimos

De esta manera en ningún momento accede a tu base de producción el usuario directamente, ya que no tiene permisos de conexión. El que hace la conexión es el motor con los sinónimos

Saludos

Gustavo