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.
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.
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
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.
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:
CREATE USER "nuevo_admin" PASSWORD "clave_admin" GRANT DBA TO "nuevo_admin" CONNECT USER "nuevo_admin" PASSWORD "nuevo_admin" REVOKE DBA FROM "sa"
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.