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 12-12-2013
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
grant a nivel de campo

Hola amigos....

Fijense q estoy trabajando con Firebird 2.0 y quisiera saber si esta sentencia la soporta la version de firebird que uso:
Código SQL [-]
grant update (campo, campo, campo) on tabla to user

Lo anterior lo consulte en este foro, pero para Oracle....

De antemano les comento que hice algunas pruebas en un usuario que tenia asignado el privilegio UPDATE para todos los campos, pero necesito que algunos no los pueda modificar.

Para esto le quite el privilegio UPDATE al usuario, luego ejecute la instruccion:

Código SQL [-]
grant update (CAMPO1, CAMPO2, CAMPO3) on MI_TABLA to EL_USUARIO

Pero la aplicación me envía un mensaje diciendome que el data set no puede realizar UPDATE...o algo asi. El caso es que el grant por campo (columna) no lo esta realizando...me hara falta algo mas ???

Alguien me puede ayudar en esto?. GRACIAS !!!
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #2  
Antiguo 13-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mRoman.

Un script de ejemplo que crea el usuario "PEREZ", le da derechos de lectura, inserción y modificación sólo sobre el campo "FECHA" en la tabla "TABLA":
Código SQL [-]
CREATE USER PEREZ PASSWORD '123';
ALTER USER PEREZ FIRSTNAME 'JUAN' MIDDLENAME 'M.' LASTNAME 'PEREZ';
GRANT SELECT, INSERT, UPDATE(FECHA) ON TABLA TO PEREZ;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 13-12-2013
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Ok...agradezco tu ejemplo ecfisa. Estoy haciendo los mismo....pero como que algo no funciona bien, porque me sale un error. En fin probaré tu ejemplo. Por cierto que version de firebird usas?....
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #4  
Antiguo 13-12-2013
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Apartir de que version de Firebird se pueden ejecutar ese tipo de sentencias SQL ecfisa?
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #5  
Antiguo 13-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mRoman.
Cita:
Empezado por mRoman Ver Mensaje
Apartir de que version de Firebird se pueden ejecutar ese tipo de sentencias SQL ecfisa?
Te pido perdón por la confusión, leí mal. Ahora me percato que en el mensaje #1 mencionas que trabajas la versión 2.0 no la 2.5...

La sintáxis del ejemplo corresponde a la versión 2.5

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 13-12-2013 a las 04:28:10.
Responder Con Cita
  #6  
Antiguo 13-12-2013
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Te agradezco ecfisa que te hayas fijado.

Fijate que a pesar de que tengo la version 2.0 la sentencia se ejecuta y no marca error, pero obviamente no realiza lo que quiero.....probaré con la versión 2.5

Saludos
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #7  
Antiguo 13-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mRoman.

También podes crear roles, darles privilegios y luego asignárselo a uno o mas usuarios. Todos los usuarios pertenecientes al mismo rol, heredan los privilegios del mismo.

Ejemplo:
Código SQL [-]
CREATE ROLE CAJEROS;
GRANT SELECT, INSERT, DELETE, UPDATE(CODIGO, CANTIDAD) ON VENTAS TO CAJEROS;

Luego:
Código SQL [-]
CREATE USER PEREZ PASSWORD '123';
ALTER USER PEREZ FIRSTNAME 'JUAN' MIDDLENAME 'M.' LASTNAME 'PEREZ';
GRANT CAJEROS TO PEREZ;

CREATE USER DITULIO PASSWORD '123';
ALTER USER DITULIO FIRSTNAME 'GUSTAVO' MIDDLENAME 'ANTONIO' LASTNAME 'DITULIO';
GRANT CAJEROS TO DITULIO;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 13-12-2013
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Gracias ecfisa.

Probe con la versión 2.5 y no hace lo que quiero. Mejor explico el "ambiente" en el cual estoy trabajando (Creo que por aqui debí haber empezado):

Tengo un DATASET ligado a un DbGRID, aqui tengo algunas columnas habilitadas y otras no, pero es aqui donde NO QUIERO que el usuario modifque el campo en cuestion.

Ejecuto la siguiente sentencia SQL en el ScripExecutive del IbExpert:

Código SQL [-]
grant update (campo1,campo3,campoN) on TABLA to USUARIO

(Omito el "campo2", porque ese quiero que NO tenga el privilegio UpDate)

Lo ejecuto y NO me marca ningún error....

Me voy a la aplicación, y trato de modificar en el DbGrid en el campo, pero al momento que habro el DataSet (DataSet1.Open), me envia el siguiente mensaje:
Código Delphi [-]
Project MI_EJECUTABLE.exe raised exception class EIBInterBaseRoleError with message 'no permission for update/write access to COLUMN MI_TABLA.MI_CAMPO'. Proccess stoped. Use step or Run to continue

El mensaje anterior me lo envia desde Delphi, porque ejecuto desde ahi la aplicación....y este otro mensaje ejecutando directamente desde el EXE:

Código Delphi [-]
Project MI_EJECUTABLE.exe raised exception class EIBClientError with message 'Cannot update. (No update query)'. Proccess stopped. Use step or Run to continue

En otras palabras, parece ser que TODA la tabla no la puedo modificar !!!....y de hecho si, no puedo modificar otras columnas del grid, que obviamente están habilitadas para ser modificadas directamente....

Creen que hace falta algo ?.....

Saludos.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #9  
Antiguo 13-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mRoman.

En este caso el problema no lo ocasiona Firebird sino el componente, que cuando aplica el update lo hace sobre todo el registro. De ese modo incluye aquellos campos sobre los que el usuario no posee el privilegio de la acción y de allí que se eleva la excepción.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 13-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo.

Para demostrar con un ejemplo lo que te menciono arriba, supongamos una hipotética tabla:
Código SQL [-]
CREATE TABLE VENTAS (
    ID         INTEGER,
    PRODUCTO   VARCHAR(30),
    CANTIDAD   INTEGER,
    PRECIO     NUMERIC(18, 6),
    FECHA      DATE,
    FECHAHORA  TIMESTAMP
);
y que el excelente y nunca bién ponderado empleado "PEREZ", ha iniciado sesión con estos privilegios:
Código SQL [-]
GRANT SELECT, INSERT, UPDATE(CANTIDAD) ON VENTAS TO PEREZ;

Si ejecuta esta consulta:
Código Delphi [-]
...
begin
  with IBQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE VENTAS SET CANTIDAD = :PCANT');
    SQL.Add('WHERE ID = 1');  // una condición de ejemplo
    IBQuery1.ParamByName('PCANT').AsInteger := StrToInt(Edit1.text);
    ExecSQL;
  end;
end;
No va a tener ningun problema.

pero si intenta hacer:
Código Delphi [-]
...
begin
  with IBQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE VENTAS SET PRECIO = :PPREC');
    SQL.Add('WHERE ID = 1'); // una condición de ejemplo
    IBQuery1.ParamByName('PPREC').AsCurrency:= StrToFloat(Edit1.text);
    ExecSQL;
  end;
end;
va a obtener un bonito mensaje: "No permission for update/write access to column VENTAS.PRECIO"

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 18-12-2013
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Sql

Gracias ecfisa por tus respuestas y una disculpa por no haber contestado antes tus post.

Me queda claro con tus ejemplos lo que esta pasando. Entonces quiere decir que si a tu primer query (el cual lo reescribo nuevamente), le agrego el campo de PRECIO....que pasaria?

Si ejecuta esta consulta:
Código Delphi [-]
...
begin
  with IBQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE VENTAS SET CANTIDAD = :PCANT, PRECIO = :PPREC');
    SQL.Add('WHERE ID = 1');  // una condición de ejemplo
    IBQuery1.ParamByName('PCANT').AsInteger := StrToInt(Edit1.text);
    IBQuery1.ParamByName('PPREC').AsInteger:=StrToInt(Edit2.text);
    ExecSQL;
  end;
end;


AHORA SI HABRÁ PROBLEMA!?...QUE OTRA SOLUCION PUDIERA EXISTIR....un componente IBQuery por cada campo?....ups....
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!

Última edición por mRoman fecha: 18-12-2013 a las 05:57:25.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
trigger a nivel de campo carlomagno Firebird e Interbase 19 23-06-2011 17:39:49
¿En que nivel estoy? - ¿En que nivel estas? movorack Varios 46 20-06-2008 21:19:26
jedi cvs: manejar versiones a nivel módulo y a nivel proyecto pvizcay Varios 3 17-04-2007 16:17:59
grant / revoke en oracle a nivel columna avmm2004 Oracle 5 14-10-2006 17:55:33
Validación a nivel de campo Luis Conexión con bases de datos 3 25-07-2004 13:48:53


La franja horaria es GMT +2. Ahora son las 15:23:11.


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