Uso de cookies

Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continúa navegando, consideramos que acepta su uso. Para obtener más información o bien conocer cómo cambiar la configuración lea nuestra Política de cookies

Gestión de permisos de usuario en OpenOffice Base

¿Es posible asegurar el acceso a una o más tablas con una contraseña? ¿Es posible dotar o vetar a los usuarios de permisos para editar, modificar, borrar o crear tablas?

Base permite la creación de usuarios y dotarlos de una contraseña. Cada usuario, a su vez, puede ser dotado de permisos de selección, inserción, actualización y borrado de registros en las correspondientes tablas.

No existe un diálogo desde el cual se pueda realizar este proceso. Pero sí se puede gestionar mediante sentencias SQL lanzadas desde el menú Herramientas > SQL

Veamos cómo podemos gestinar los derechos de los usuarios en Apache OpenOffice Base.

El usuario sa

Todas las bases de datos embebidas en documentos ODB (Base) se generan con un usuario administrador genérico por defecto, llamado sa (posiblemente por standard administrator o super administrator), y que carece de contraseña.

El usuario sa tiene asignados por defecto todos los permisos y por lo tanto, puede hacer cualquier cosa con las tablas.

Señal Nota.png

No es buena idea asignar una contraseña al administrador.
Si lo haces, al abrir el documento de base verás que se ha perdido la conexión con la base de datos y toda posibilidad de acceder a su contenido

Crear un nuevo usuario

La sentencia que podemos utilizar para crear un nuevo usuario en nuestra base de datos es la siguiente

 CREATE USER "nombre_usuario" PASSWORD "contraseña" 

Es conveniente no utilizar letras acentuadas ni caracteres como la ñ o la ç en el nombre del usuario. Tanto el nombre del usuario como la contraseña deben escribirse encerrados entre comillas dobles.

Como administrador puedes crear nuevos usuarios, asignarles o revocarles permisos, o eliminar los usuarios creados.

Crear nuevos usuarios

Para crear nuevos usuarios utilizaremos la siguiente sentencia:

 CREATE USER "nombre_usuario" PASSWORD "contraseña" 

Es necesario encerrar entre comillas dobles tanto el nombre y la contraseña. No es recomendable utilizar letras acentuadas, la letra ñ o la ç en el nombre del usuario.

Adjudicar permisos sobre tablas

Una vez creado un usuario, y si eres administrador, puedes adjudicar permisos sobre las tablas utilizando la sentencia GRANT TO.

Su sintaxis es la siguiente:

 GRANT tipo_permiso ON "nombre_tabla" TO "nombre_usuario" 

Existen cuatro tipos de permiso que se pueden adjudicar:

  • SELECT: permite seleccionar registros de una tabla y visualizarlos
  • INSERT: permite insertar o añadir registros a una tabla
  • UPDATE: permite modificar registros de una tabla
  • DELETE: permite eliminar registros de una tabla

Por ejemplo, para asignar el permiso UPDATE al usuario JUAN sobre la tabla CLIENTES utilizaremos una sentencia como la siguiente:

 GRANT UPDATE ON "CLIENTES" TO "JUAN" 

No se puede asignar nuevos permisos al administrador, ya que por defecto los posee todos.

Revocar permisos sobre tablas

Si eres administrador, puedes revocar permisos sobre las tablas utilizando la sentencia REVOKE FROM.

Su sintaxis es la siguiente:

 REVOKE tipo_permiso ON "nombre_tabla" FROM "nombre_usuario" 

Por ejemplo, para revocar el permiso UPDATE al usuario JUAN sobre la tabla CLIENTES utilizaremos una sentencia como la siguiente:

 REVOKE UPDATE ON "CLIENTES" FROM "JUAN" 

No se pueden revocar permisos al administrador, ya que por defecto los tiene siempre todos asignados.

Adjudicar o revocar todos los permisos

Puedes utilizar la cláusula ALL para asignar o revocar todos permisos a un usuario.

La sintaxis para asignar todos los permisos es la siguiente:

 GRANT ALL ON "nombre_tabla" TO "nombre_usuario" 

La sintaxis para revocar todos los permisos a un usuario es la siguiente

 REVOKE ALL ON "nombre_tabla" FROM "nombre_usuario" 

Adjudicar o revocar permisos a todos los usuarios

Puedes utilizar la cláusula PUBLIC para asignar o revocar permisos a todos los usuarios.

La sintaxis para asignar permisos a todos los usuarios es la siguiente:

 GRANT tipo_permiso ON "nombre_tabla" TO PUBLIC 

La sintaxis para revocar permisos a todos los usuarios es la siguiente

 REVOKE tipo_permiso ON "nombre_tabla" FROM PUBLIC 

La cláusula PUBLIC no va encerrada entre dobles comillas.

Conectarse a la base de datos

En cualquier momento puedes conectarte a la base de datos como usuario o como administrador.

Para conectarte como usuario la orden sigue la siguiente sintaxis:

 CONNECT USER "nombre_usuario" PASSWORD "contraseña" 

Para conectarse como administrador, la orden es la siguiente

 CONNECT USER "sa" PASSWORD "" 

Recordemos que el administrador carece de contraseña.

Abrir la base de datos con control de usuario

Cuando se abre la base de datos por el procedimiento habitual, siempre se hace utilizando el usuario administrador. Para abrir la base de datos utilizando otro usuario deberemos escribir una macro que solicite el nombre del usuario y su contraseña, y una vez obtenidos, se conecte a la base de datos utilizando esta información.

La macro implementada se asignará al evento Abrir documento, ya que este evento se lanza justo cuando se abre el documento y antes de conectar con la base de datos.

OpenOffice.Base.permisos.usuario.02.png

Veamos un ejemplo sencillo de esta macro que utiliza sentencias InputBox en lugar de diálogos.

Sub ConectaUsuario(Event As Object)
  Dim sUser As String
  Dim sPass As String
  Dim sSQL As String
  Dim oStat As Object
 
  With ThisDatabaseDocument.CurrentController
    If Not .IsConnected Then .Connect
    oStat=.ActiveConnection.CreateStatement
  End With
 
  On Error Goto ErrorConecta
 
  Do While sUser="" Or sPass=""
    sUser=InputBox("Usuario")
    sPass=InputBox("Contraseña")
    sSQL="CONNECT USER """ & sUser & """ PASSWORD """ & sPass & """"
    oStat.ExecuteUpdate(sSQL)
  Loop
 
  Exit Sub
 
  ErrorConecta:
    sUser=""
    Resume Next
 
End Sub
Señal Nota.png

Base no distinque mayúsculas de minúsculas ni en el nombre del usuario ni en su contraseña. Aunque tampoco son necesarias las comillas, recomendamos su uso

Puede ser buena idea implementar el código necesario para que esta macro se conecte como administrador cuando se indica un determinado nombre de usuario y contraseña.

Cambiar la contraseña de un usuario

Para cambiar la contraseña de un usuario hay que conectarse como tal y luego utilizar una orden con la siguiente sintaxis:

 SET PASSWORD "nueva_contraseña" 

Si estás conectado como administrador puedes modificar su contraseña con la siguiente sintaxis:

 ALTER USER "nombre_usuario" SET PASSWORD "nueva_contraseña" 

Blindar la base de datos

Cada vez que se abre la base de datos es, por defecto, abierta por el administrador sa, y éste no puede tener contraseña. Por ello es difícil blindar nuestra base de datos.

Una buena idea para blindarla consistiría por un lado en restringir los derechos al administrador por defecto, y por otro, crear un nuevo usuario con contraseña al que asignaremos los derechos de administrador.

Si revocamos todos los permisos del administrador sa a excepción de SELECT nos aseguramos que tan sólo pueda consultar la base de datos, sin que pueda agregar, modificar o borrar nada.

Para conseguir esta blindaje no queda más remedio que realizar un proceso muy peligroso, que podría arruinar la base de datos.

Si quieres intentar este proceso, asegúrate de disponer de varias copias de seguridad para reestablecer la base de datos en caso de que se pierda.

Señal Nota.png

Por supuesto, si olvidas el nombre del nuevo administrador, o su contraseña, olvídate de poder realizar cambios en la base de datos, por lo que es pueda ser adecuado que anotes estos datos en lugar seguro

El proceso requiere los siguientes pasos:

1.- Verifica que ningún usuario se pueda conectar a tu base de datos mientras estás realizando el proceso.

2.- Crea una o dos copias de tu base de datos en distintos soportes, y verifica que puedes reestablecerla.

3.- Abre la base de datos.

4.- Desde el menú Herramientas > SQL ejecuta las siguientes instrucciones:

OpenOffice.Base.permisos.usuario.00.png

 CREATE USER "nuevo_admin" PASSWORD "clave_admin"   GRANT DBA TO "nuevo_admin"   CONNECT USER "nuevo_admin" PASSWORD "nuevo_admin"   REVOKE DBA FROM "sa" 

OpenOffice.Base.permisos.usuario.01.png

5.- Desde el menú Herramientas > SQL ejecuta la siguiente orden SQL para cada una de las tablas de la base de datos:  REVOKE ALL ON "nombre_tabla" FROM "sa" 

6.- Desde el menú Herramientas > SQL ejecuta la siguiente orden SQL para cada una de las tablas de la base de datos que quieres que pueda consultar el usuario sa:  GRANT SELECT ON "nombre_tabla" TO "sa" 

7.- Utiliza desde Archivo > Guardar como... para guardar los cambios y cierra la base de datos.

La base de datos deberá está lista para usar. En caso contrario, repón la copia de seguridad.

En algunas ocasiones, al abrir de nuevo la base de datos presenta inicialmente un error, pero tras ser recuperada automáticamente funciona correctamente.

En este caso no es necesario la macro que vimos en el punto anterior, ya que por defecto la base de datos se abre con el usuario sa al que hemos dejado con permisos limitados.

Este procedimiento puede provocar que a veces no se elimine automáticamente el archivo LCK (que gestiona los bloqueos de registros) al cerrar la base de datos. Sin embargo, es un problema menor que no impide volver a abrirla.

Créditos y reconocimientos

Este minitutorial se basa en una pregunta formulada en el Foro Oficial de Apache OpenOffice en Español y su correspondiente respuesta realizada por el usuario Cascabel, al que agradecemos compartir con todos nosotros sus conocimientos.

Modificada el 30 ago 2015 00:34.   Visitas: 22 675