¿Es posible hacer ésto?
Comenzado por
TiammatMX
, jul 04 2013 08:55
5 respuestas en este tema
#1
Escrito 04 julio 2013 - 08:55
Buen día/tarde/noche, compañeros...
Yo sé que es posible AÑADIR un usuario y un perfil de usuario con sus GRANT's a una base de datos Firebird..., pero ¿es posible OBTENER los datos de UserID, password, nombre del perfil, GRANT's asegurados? ¿Cómo o con qué instrucciones?
¿Es posible MODIFICAR éstos datos? Igualmente, con qué instrucciones.
Yo sé que es posible AÑADIR un usuario y un perfil de usuario con sus GRANT's a una base de datos Firebird..., pero ¿es posible OBTENER los datos de UserID, password, nombre del perfil, GRANT's asegurados? ¿Cómo o con qué instrucciones?
¿Es posible MODIFICAR éstos datos? Igualmente, con qué instrucciones.
#2
Escrito 04 julio 2013 - 10:58
Firebird tiene 2 tablas de sistema en la que almacena este tipo de información (o parte de ella) que son RDB$USER_PRIVILEGES y RDB$ROLES
No obstante, la lista de usuarios/passwords no podrás conseguirla, no hay ninguna sentencia SQL que te la de y no se guardan en tablas de sistema.
No obstante, la lista de usuarios/passwords no podrás conseguirla, no hay ninguna sentencia SQL que te la de y no se guardan en tablas de sistema.
#3
Escrito 04 julio 2013 - 12:42
#4
Escrito 04 julio 2013 - 01:40
Firebird tiene 2 tablas de sistema en la que almacena este tipo de información (o parte de ella) que son RDB$USER_PRIVILEGES y RDB$ROLES
No obstante, la lista de usuarios/passwords no podrás conseguirla, no hay ninguna sentencia SQL que te la de y no se guardan en tablas de sistema.
Puedes modificar esos datos con estos comandos:
http://www.firebirds...-user-mgmt.html
Les platico mi idea (a ver en qué me pueden colaborar con sus ideas) y "sintonizarnos" para cumplimentar la pregunta. Es tener una serie de perfiles, tipo "administrador", "capturista", "reporteo" y asignarles "grants" a cada uno de ellos, ponerlos en una tabla que actuaría como catálogo y entonces, al añadir un usuario nuevo a la tabla correspondiente, generar un usuario dentro del motor de la base de datos y asignándole el rol que de acuerdo al perfil le corresponda, y así usar automáticamente los permisos correspondientes.
Ejemplo: Yo tengo tres roles dentro del motor, y en una tabla de mi base de datos, un catálogo de perfiles que permitirá o no una serie de acciones contra las tablas que integren la base de datos. En el momento que Pepe Pérez sea añadido como usuario de mi programa como usuario que solamente emite reportes, al mismo tiempo añadir al motor de la base de datos a un usuario "pepeperez" con el perfil "reporteo" (y sus consiguientes privilegios) y cada vez que se solicite la entrada de usuario, Pepe Pérez SIEMPRE podrá emitir sus reportes sin problemas.
Un subproducto de ésto es que quiero añadirle a mis desarrollos la capacidad de generar una bitácora de los movimientos de usuarios, horas, fechas, estaciones de trabajo y así.
Gracias por su apoyo y comprensión.
#5
Escrito 05 julio 2013 - 12:41
Pues creo que tú mismo te contestas :-)
Si ya tienes definidos los roles, sólo tienes que decirle a éstos qué acciones podrán hacer sobre qué tablas (select, delete, update, insert).
Al aplicarle el rol a un nuevo usuario, éste heredará los permisos del rol.
Para monitorear lo que hace cada usuario, puedes usar los triggers de las tablas. La función CURRENT_USER te devolverá el nombre de usuario que está realizando la acción.
La tabla de sistema MON$ATTACHMENTS te dará información de los usuarios conectados (creo que sólo en SuperServer, deberías de probar en Classic y SuperClassic), datos como usuario, IP,..... Dale un vistazo a ver qué datos pueden servirte para tu propósito.
Además, los componentes de acceso a Firebird, si son de acceso nativo, suelen tener algún componente que te da la lista de usuarios (no sé si sólo activos, tendría que probarlo). Por ejemplo, en FireDAC se hace a través de su componente TADIBSecurity y si propiedad Users (que devuelve un dataset). Un ejemplo de uso:
Con toda esta información ya puedes generar el log de accesos que quieras
En fin, no sé, creo que no se me ocurre nada más
Nos leemos
PD: me está gustando mucho FireDAC
Si ya tienes definidos los roles, sólo tienes que decirle a éstos qué acciones podrán hacer sobre qué tablas (select, delete, update, insert).
Al aplicarle el rol a un nuevo usuario, éste heredará los permisos del rol.
Para monitorear lo que hace cada usuario, puedes usar los triggers de las tablas. La función CURRENT_USER te devolverá el nombre de usuario que está realizando la acción.
La tabla de sistema MON$ATTACHMENTS te dará información de los usuarios conectados (creo que sólo en SuperServer, deberías de probar en Classic y SuperClassic), datos como usuario, IP,..... Dale un vistazo a ver qué datos pueden servirte para tu propósito.
Además, los componentes de acceso a Firebird, si son de acceso nativo, suelen tener algún componente que te da la lista de usuarios (no sé si sólo activos, tendría que probarlo). Por ejemplo, en FireDAC se hace a través de su componente TADIBSecurity y si propiedad Users (que devuelve un dataset). Un ejemplo de uso:
delphi
ADIBSecurity.DisplayUsers; ADMemTable1.AttachTable(ADIBSecurity.Users, nil); ADMemTable1.Open;
Con toda esta información ya puedes generar el log de accesos que quieras
En fin, no sé, creo que no se me ocurre nada más
Nos leemos
PD: me está gustando mucho FireDAC
#6
Escrito 05 julio 2013 - 06:13
Saludos.
Por lo regular esos permisos lo manejo a nivel de la aplicación mas no desde el motor, entiendo que es más fácil este método.
Tal como apunta @cadetill, los componentes que intervengan en la conexión por lo regular traen componentes para administración de usuarios y en las versiones modernas de Firebird tienen comandos "SQL" para obtener la información necesaria.
Con esta herramienta, es de pago, puedes generar los Logs:
IB LogManager
La versión full de IbExpert te permite también realizar esta tarea, puedes descargar la versión de prueba y hacer lo que necesitas.
Por lo regular esos permisos lo manejo a nivel de la aplicación mas no desde el motor, entiendo que es más fácil este método.
Tal como apunta @cadetill, los componentes que intervengan en la conexión por lo regular traen componentes para administración de usuarios y en las versiones modernas de Firebird tienen comandos "SQL" para obtener la información necesaria.
Con esta herramienta, es de pago, puedes generar los Logs:
IB LogManager
La versión full de IbExpert te permite también realizar esta tarea, puedes descargar la versión de prueba y hacer lo que necesitas.