Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-10-2003
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 21
jzginez Va por buen camino
Question permiso de acceso a usuarios

Hola a todos

Tengo un pequeño proble, cree una base de datos para un control escolar en la que existe 3 tablas:

1.- ALUMNOS que contiene la matricula, nombre del alumnos y demas datos personales de cada alumno.
2.- GRUPOS que contiene la matricula del alumno, grupo en el que esta, clave de la materia que cursa, asistencias, faltas y calificaciones (un registro por cada materia del alumno, en promedio 8 registros por alumno)
3.- MATERIAS un catálogo con la clave y la descripción de todas las materias que se imparten en la escuela asì como el año escolar en el que se imparten.

Ademas de tablas para pagos y control de profesores

actualmente un usuario tiene control total de estas bases (la capturista) y los demas solo de select y reference.

El problema consiste en que ahora quieren poner dos capturistas mas pero quieren que un capturista se encarge solo de 1º año, otra de 2º y 3º año, y la tercera de 4º y 5º año el numero de grupos va desde 5 grupos en primero y disminuye hasta llegar a solo 3 grupos en 5º.

mi duda es se pueden dar permisos de acceso total segun el grupo que le toca a cada usuario o como hago una consulta que me permita una captura directa de los datos o tengo que crear una tabla temporal (una base de datos de dbase) donde almacene el resultado de la consulta, modifique los datos y despues con esta tabla actualizó los datos de la tabla de interbase.

gracias


p.d. espero no haber enrredado mas las cosas con la explicación
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita
  #2  
Antiguo 05-10-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Primero, si solo van a acceder a los datos a través de tu aplicación, no es necesario que asignes derechos a la base de datos. Incluso puede entrar todo el mundo con el usuario SYSDBA, pero una vez conectado y validado un usuario (un usuario de Interbase, o por una tabla propia de usuarios), tu aplicación puede restringir los accesos. Puesto que a cada usuario le permites (mediante las consultas que lanza la aplicación) consultar solo los datos que debe ver.

Aunque si los usuarios pueden acceder directamente a la base de datos, mediante ODBC u otro sistema que escapa al control de tu aplicación, entonces si que debes obligatoriamente asignar derechos en la base de datos.

En este caso yo probaría de crear vistas. Cada vista solo muestra un año o un grupo de años : select * from tabla where extract(year from fecha) in (2002,2003)

Entonces a los capturistas les das derechos sobre la vista que les corresponda y no sobre la tabla. De forma que trabajen esa vista para las consultas, inserciones y modificaciones.

De esta forma te aseguras que solo modifican registros del año que te interesa (són los unicos registros que ven)

Aunque no impides que puedan añadir un registro nuevo, y asignarlo a un año sobre el que no tienen derecho. La vista les permitirá hacerlo, aunque una vez entrado el registro, desaparecerá de la vista y no podrán modificarlo (pero estará dado de alta en la base de datos). Para evitarlo tienes que poner triggers en la vista. Un trigger BeforeInsert debe comprobar que la fecha entrada está en los años que corresponden, en caso contrario debe lanzar una excepción (para que no se inserte el registro). Igualmente un trigger BeforeEdit tiene que comprovar que no modifican un registro y le asignan la fecha a un año sobre el que no tendrían que tocar.

Espero que te sirva.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).

Última edición por guillotmarc fecha: 05-10-2003 a las 00:48:00.
Responder Con Cita
  #3  
Antiguo 05-10-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

Cita:
Posteado originalmente por guillotmarc
Espero que te sirva.
pues no sé si le servirá al compañero jzginez, pero la solución "Vistas+Triggers" me parece brillante (sin menospreciar el control en lado cliente que comentas).

Enhorabuena por la solución propuesta y su exposición.

Saludos.
Responder Con Cita
  #4  
Antiguo 05-10-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Gracias. Me alegra que te haya gustado.

Un saludo.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 05-10-2003
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 21
jzginez Va por buen camino
Question

Si perdón porque soy más novato de lo que creyeron, para empezar creo que use mal el termino año no me refiero al año 2002, 2003, 2004, etc. Sino al año en que estudia es decir p/e: 1° año de secundaria, 2° año de secundaria, etc. Mas bien tenía que haber usado el termino grupo (1A, 1B, 1C, etc.), ok después de esto, la aplicación esta hecha en delphi y me conecto a la base de datos por BDE, donde estoy pensando el control de usuario que me sugieren puede ser con un filtro según el usuario que entro a la base es el filtro que se activa

Lo que me intereso es lo del view y los trigger BeforeInsert, trigger BeforeEdit, los cuales nunca he usado, por lo que encontré en la ayuda puedo crear el siguiente VIEW

CREATE VIEW GRUPOMATERIA AS
SELECT Alumnos.MATRICULA, Alumnos.APELLIDOSNOMBRE, Grupos.REGULAR, Grupos.GRUPO, Materias.CLAVEDESCRIPCION, Grupos.PARCIAL1, Grupos.PARCIAL2, Grupos.PARCIAL3
FROM ALUMNOS Alumnos
INNER JOIN GRUPOS Grupos
ON (Alumnos.MATRICULA = Grupos.ALUMNO)
INNER JOIN MATERIAS Materias
ON (Grupos.MATERIA = Materias.CLAVE)
WHERE (Grupos.GRUPO = '1A')
AND (Grupos.MATERIA = '1002')


Y según les entiendo puedo modificar los datos que tengo como resultado sin importar que sea la unión de 3 tablas y puedo cambiar las constantes 1A y 1002 por variables para poder ver diferentes grupos y diferentes materias, lo que si no encontré que es son los trigger me pueden ayudar en como se crean y su funcionamiento puesto que según les entendí esto me puede ayudar a optimizar mi código en otras partes de la aplicación.


Gracias
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita
  #6  
Antiguo 06-10-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

El tema de la definición de una política de segurida se ha hablado muchas veces (utilizar la seguridad de la base de datos, definir la seguridad en la propia aplicación, ...). Utiliza la opción de buscar en el Foro, para leer esos hilos.

Sobre la vista que pretendes crear, si es la unión de 3 tablas no va a ser actualizables. (Las que te propuese anteriormente eran actualizables porque eran sobre una sola tabla, su utilidad era simplemente para tener distintas definiciones de seguridad sobre la tabla).

Aunque puedes conseguir que una vista formada por la unión de varias tablas, sea actualizable mediante la utilización de triggers, nunca lo he hecho. Puedes conseguir el mismo resultado con una consulta en la aplicación.

Un trigger es un trozo de código PSQL que se ejecuta en la base de datos, al producirse una condición (añadir un registro en una tabla, modificarlo, ...).

Aunque puedes utilizar sentencias CREATE TRIGGER, te recomiendo que te hagas con un buen programa de Administración de la Base de Datos. IB-Expert por ejemplo, es muy bueno, y gratuito en la versión Personal. Desde estos programas es muy sencillo crear triggers, ....

http://www.hksoftware.net/download/i....0.61_full.exe

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #7  
Antiguo 06-10-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
En concreto, sobre la seguridad, me refería a este hilo :

http://www.clubdelphi.com/foros/show...&threadid=3708

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:12:45.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi