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 14-10-2014
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Poder: 21
ASAPLTDA Va por buen camino
Problema Seguridad usuarios

Buenos dias Foristas
Tengo un problema con firebird 2.1 en windows
Tengo un procedimiento que usa varias tablas las cuales se les ha otorgado seguridad mediante un Role
El role tiene el El procedimiento asignado
A cada usuario tiene el mismo rol asignado

La coneccion a la base de datos usa el mismo role pero cuando ejecuta el procedimiento informa que el usuario no esta autorizado. He borrado el procedimiento y he vuelto a ejecutar la delegación con role y autorización directa al mismo usuario pero sigue sin funcionar.
El mensaje es que el usuario no esta autorizado al procedimiento, o a una tabla los cuales si estan autorizado


Podrian darme una luz de dejo revisar
Responder Con Cita
  #2  
Antiguo 21-10-2014
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Poder: 21
ASAPLTDA Va por buen camino
Unhappy Continuo con el problema de seguridad

El usuario tiene asignado el role Usuarios
Pero sigue generado el error de usuario invalido, normalmente dice que no tiene autoridad sobre la tabla
DELETE FROM PEDRES_TOT_DESUBICAR_RECURSO_X;
pero otras veces lo da sobre el procedimiento
PEDRES_TOT_DESUBICAR_RECURSO_P1

La realidad estoy muy preocupado no se como encontrar el error, con el usuario SYSDbA funciona perfectamente
espero me den una luz



adjunto Procedimiento
Código SQL [-]
SET TERM ^ ;

create or alter procedure PEDRES_TOT_DESUBICAR_RECURSO_P1 (
    P_CONO CONO,
    P_WHSCOD WHSCOD)
returns (
    MSG varchar(100),
    RECURSO RECURSO,
    WHSLOC WHSLOC,
    QPENDIENTE QPENDIENTE,
    QTYDISTOTAL SALDO,
    QTYDISOTROSNVL SALDO,
    QTYDISNVL1 SALDO,
    QAREASURTIDO SALDO,
    QAREASURTIDOESTIBADA SALDO,
    QBACKORDER SALDO,
    NOESTIBAS NOESTIBAS,
    TIPOREGISTRO TIPOREGISTRO,
    CLFCOD CLFCOD,
    CONO CONO,
    CLIENTE CLIENTE,
    CLIENTESHP CLIENTESHP,
    QRESERVADA QRESERVADA,
    WHSCOD WHSCOD,
    DRECURSO DRECURSO,
    NOPEDIDO NOPEDIDO,
    PEDIDOCLIENTE PEDIDOCLIENTE,
    QTYXESTIBA QTYXESTIBA,
    CONUMERO CONUMERO,
    LOTE LOTE,
    ID ID,
    FECVEN FECVEN,
    W_MENSAJE MENSAJE60)
AS
--    W_QTYPDTEDEMOVER SALDO,
--    W_QAREASURTIDO SALDO,
--    W_QTYMAXAMOVER SALDO,
DECLARE VARIABLE W_QPENDIENTE SALDO = 0;
DECLARE VARIABLE W_QTYDISNETA SALDO = 0;
DECLARE VARIABLE W_QTYDISOTROSNVL SALDO = 0; /* EXISTENCIAS EN NIVELES SUPERIORES AL NIVEL 1 */
DECLARE VARIABLE W_QAREASURTIDO SALDO = 0; /* CANTIDAD REQUERIDA EN AREA DE SURTIDO */
DECLARE VARIABLE W_QASURTIR SALDO = 0;
DECLARE VARIABLE W_NOREGISTROS INTEGER = 0;
DECLARE VARIABLE W_DRECURSO DRECURSO;
DECLARE VARIABLE UNDMED UNDMED;
DECLARE VARIABLE W_UNDMEDUM UNDMED;
DECLARE VARIABLE W_NOESTIBAS NOESTIBAS;
DECLARE VARIABLE W_FLGAPROBADOCXC FLGAPROBADOCXC;
DECLARE VARIABLE W_INTEGER INTEGER;
DECLARE VARIABLE W_UUID UUID;
DECLARE VARIABLE W_ID ID;
DECLARE VARIABLE W_QTYPDTEDEMOVER SALDO;
DECLARE VARIABLE W_QTYMAXAMOVER SALDO;
BEGIN

  DELETE FROM PEDRES_TOT_DESUBICAR_RECURSO_X;
  --mensaje = 'borro archivo';
  --suspend;


/***************************************************************************************************
* PARTE 1 GENERACION  CANTIDAD NETA A DESUBICAR SOLAMENTE PEDIDOS AUTORIZADOS
****************************************************************************************************  */
  TIPOREGISTRO = '0';
  W_ID         = 1;

  FOR SELECT  D.CONO ,
      D.WHSCOD , D.RECURSO , D.CLFCOD ,D.CLIENTE , '' ,
      SUM(D.QPENDIENTE)  
      FROM PEDDET D INNER JOIN PEDMST M ON M.NOPEDIDO = D.NOPEDIDO
      WHERE D.CONO = :P_CONO AND D.WHSCOD = :P_WHSCOD  AND  D.QPENDIENTE > 0
            AND M.FLGAPROBADOCXC = 'S'   -- AND RECURSO = '395016513940'
      GROUP BY D.CONO, D.WHSCOD, D.RECURSO, D.CLFCOD,  D.CLIENTE
            INTO :CONO, :WHSCOD, :RECURSO, :CLFCOD, :CLIENTE, :CLIENTESHP, :QPENDIENTE
      DO BEGIN
        W_NOREGISTROS= W_NOREGISTROS +1;
        QTYDISNVL1    =0;
        QTYDISOTROSNVL=0;
        QTYDISTOTAL   =0;
        QBACKORDER    =0;
        NOESTIBAS     =0;

        -- DATOS MAESTRO DE PRODUCTO NUMERO DE PRODUCTOS POR ESTIBA
         SELECT COALESCE(QTYXESTIBA,1), DRECURSO, UNDMED FROM RESMST WHERE RECURSO = :RECURSO
                 INTO :QTYXESTIBA, RECURSO, :UNDMED;
         IF (QTYXESTIBA<=0) THEN
             QTYXESTIBA=1;

        -- SUSPEND;

         -- LEER SALDO DE INVENTARIOS
         SELECT  COALESCE(SUM(CASE WHEN WHSNVL=1 THEN QTYDIS ELSE 0 END),0), COALESCE( SUM(QTYDIS),0)  FROM INSALDO S
           INNER JOIN WHSLOC L ON L.WHSLOC = S.WHSLOC AND L.WHSCOD = S.WHSCOD
           WHERE S.RECURSO = :RECURSO AND S.CLFCOD = :CLFCOD AND S.CLIENTE=:CLIENTE AND S.WHSCOD = :WHSCOD
           INTO :QTYDISNVL1, :QTYDISTOTAL;

        -- SUSPEND;

         CONO   = P_CONO ;
         WHSCOD = P_WHSCOD;

         W_QTYDISNETA   = QTYDISTOTAL - QTYDISNVL1;
         QTYDISOTROSNVL = QTYDISTOTAL - QTYDISNVL1;
         W_QPENDIENTE   = QPENDIENTE;
         QAREASURTIDO   = 0;



         -- LA CANTIDAD A MOVER ES LA QORDENADA - EXISTENCIA EN EL NIVEL 1
         W_QPENDIENTE = W_QPENDIENTE - QTYDISNVL1;
         

         -- NO SE REQUIERE RESURTIR AREA RESURTIDO TIENE EXISTECIAS
         IF (W_QPENDIENTE <= 0  )  THEN  BEGIN
             W_QPENDIENTE  = 0;
             QAREASURTIDO  = 0;
         END

         /*  */

         IF (W_QPENDIENTE > 0) THEN BEGIN
            IF (W_QPENDIENTE <= W_QTYDISNETA) THEN BEGIN
               QAREASURTIDO = QAREASURTIDO + W_QPENDIENTE;
               W_QPENDIENTE = 0;
            END
            ELSE BEGIN
                QAREASURTIDO = QAREASURTIDO + W_QTYDISNETA;
                QBACKORDER  =  W_QPENDIENTE - W_QTYDISNETA;
                W_QPENDIENTE = 0;
            END
         END

         /* AJUSTAR POR CANTIDAD ESTIBA */
         QAREASURTIDOESTIBADA =0;
         NOESTIBAS=0;
         W_QTYMAXAMOVER = QAREASURTIDO; -- CANTIDAD A MOVER A AREA
         WHILE  (W_QTYMAXAMOVER > 0) DO BEGIN
                 NOESTIBAS = NOESTIBAS+1;
                 W_QTYMAXAMOVER = W_QTYMAXAMOVER - QTYXESTIBA;
         END
                
         W_QTYMAXAMOVER = NOESTIBAS * QTYXESTIBA;   -- CANTIDAD A MOVER POR ESTIBAS
         IF (W_QTYMAXAMOVER > QTYDISOTROSNVL) THEN
            QAREASURTIDOESTIBADA  = QTYDISOTROSNVL;
         ELSE
            QAREASURTIDOESTIBADA = W_QTYMAXAMOVER;

      /* GRABAR */
       SELECT P_UUID FROM UUID_TOCHAR INTO :W_UUID;
       W_ID = W_ID + 1;
      INSERT INTO PEDRES_TOT_DESUBICAR_RECURSO_X(UUID,
             RECURSO, CLFCOD, WHSLOC, QTYDISTOTAL, QPENDIENTE, QTYDISOTROSNVL, QTYDISNVL1, QAREASURTIDO, QBACKORDER, NOESTIBAS,
             TIPOREGISTRO, CONO, CLIENTE, CLIENTESHP, QRESERVADA, WHSCOD, NOPEDIDO, PEDIDOCLIENTE, QTYXESTIBA, ID,
             QAREASURTIDOESTIBADA, DRECURSO, UNDMED) VALUES
             (:W_UUID, :RECURSO, :CLFCOD, :WHSLOC, :QTYDISTOTAL, :QPENDIENTE, :QTYDISOTROSNVL, :QTYDISNVL1, :QAREASURTIDO,
             :QBACKORDER, :NOESTIBAS,
             :TIPOREGISTRO, :CONO, :CLIENTE, :CLIENTESHP, :QRESERVADA, :WHSCOD, :NOPEDIDO, :PEDIDOCLIENTE,
              :QTYXESTIBA, :W_ID, :QAREASURTIDOESTIBADA, RECURSO, :UNDMED);

        
END



/*-----------------------------------------------------------------------------------------------------
* PARTE 2 GENERACION UBICACIONES A DESCARGAR  BASE DE LECTURA ARCHIVO PARTE1
----------------------------------------------------------------------------------------------------- */

  TIPOREGISTRO = '1';


  FOR SELECT CONO, CLIENTE, WHSCOD, RECURSO, CLFCOD, QAREASURTIDO, QTYXESTIBA, DRECURSO, UNDMED
      FROM PEDRES_TOT_DESUBICAR_RECURSO_X R
      WHERE TIPOREGISTRO = '0' AND QAREASURTIDO > 0
      INTO  :CONO, :CLIENTE, :WHSCOD, :RECURSO, :CLFCOD, :QAREASURTIDO, :QTYXESTIBA,
            RECURSO, :UNDMED
      DO BEGIN

      W_QTYPDTEDEMOVER = QAREASURTIDO;

      -- BUSCAR UBICACIONES SUPERIOR AL NIVEL 1
      FOR SELECT S.WHSLOC, S.QTYDIS, S.CONUMERO
      --, S.LOTE, Z.FECVEN
      FROM INSALDO S
            INNER JOIN WHSLOC L ON L.WHSLOC = S.WHSLOC AND L.WHSCOD = S.WHSCOD AND L.WHSNVL > 1
           -- LEFT OUTER JOIN INLOTES Z ON Z.LOTE = S.LOTE AND Z.RECURSO = S.RECURSO
            WHERE S.RECURSO = :RECURSO AND S.CLFCOD = :CLFCOD AND S.WHSCOD = :WHSCOD AND S.CONO = S.CONO AND S.CLIENTE = :CLIENTE
                  AND S.QTYDIS > 0
            ORDER BY
            -- Z.FECVEN,
            S.QTYDIS, S.CONUMERO, S.WHSLOC
            INTO :WHSLOC, :W_QTYDISOTROSNVL, :CONUMERO
            --, :LOTE, :FECVEN
            DO BEGIN

            W_QASURTIR  = 0;
            NOESTIBAS = 0;
            QTYDISTOTAL = W_QTYDISOTROSNVL;
            QAREASURTIDOESTIBADA =0;




--             SALDO < REQUERIDO
            IF (W_QTYDISOTROSNVL <= W_QTYPDTEDEMOVER ) THEN BEGIN
                W_QASURTIR        =  W_QTYDISOTROSNVL;
                W_QTYPDTEDEMOVER  =  W_QTYPDTEDEMOVER - W_QASURTIR;
            END
            ELSE BEGIN
                W_QTYMAXAMOVER = W_QTYPDTEDEMOVER; 
                WHILE  (W_QTYMAXAMOVER > 0 ) DO BEGIN
                     NOESTIBAS      = NOESTIBAS+1;
                     W_QTYMAXAMOVER = W_QTYMAXAMOVER - QTYXESTIBA;
                  END

                  W_QTYMAXAMOVER = NOESTIBAS * QTYXESTIBA;   -- CANTIDAD A MOVER POR ESTIBAS
                  IF (W_QTYMAXAMOVER > W_QTYDISOTROSNVL) THEN
                     QAREASURTIDOESTIBADA  = W_QTYDISOTROSNVL;
                  ELSE
                   QAREASURTIDOESTIBADA = W_QTYMAXAMOVER;

                   
                  W_QASURTIR     = QAREASURTIDOESTIBADA;
                  W_QTYPDTEDEMOVER =  W_QTYPDTEDEMOVER -  W_QASURTIR;
             END
           --**********************************

-- SUSPEND;
       /* EXISTE CANTIDAD A SURTIR GRABE EL REGISTRO */
               IF (W_QASURTIR > 0 ) THEN BEGIN
                    SELECT P_UUID FROM UUID_TOCHAR INTO :W_UUID;
                    W_ID = W_ID + 1;
                   INSERT INTO PEDRES_TOT_DESUBICAR_RECURSO_X(UUID, 
                       RECURSO, CLFCOD, WHSLOC, QAREASURTIDO, QTYDISTOTAL,
                       TIPOREGISTRO, CONO, CLIENTE, WHSCOD, QTYXESTIBA, NOESTIBAS, CONUMERO, QPENDIENTE, ID
                       , DRECURSO, UNDMED) VALUES
                       (:W_UUID, :RECURSO, :CLFCOD, :WHSLOC, :W_QASURTIR, :QTYDISTOTAL,
                      :TIPOREGISTRO, :CONO, :CLIENTE, :WHSCOD, :QTYXESTIBA, :W_NOESTIBAS, :CONUMERO, :W_QTYPDTEDEMOVER, :W_ID,
                      RECURSO, :UNDMED);
               END



               -- DEJAR DE LEER SALDO INVENTARIOS
              IF (W_QTYPDTEDEMOVER=0) THEN LEAVE ;


     
    END     -- FINLECTURA DE INSALDO

    
  END


--EXIT; -- *** QUITAR **********


/***************************************************************************************************
* PARTE  RETORNAR DATOS GENERADOS
****************************************************************************************************  */


  FOR SELECT  RECURSO, CLFCOD, WHSLOC, QTYDISTOTAL, QPENDIENTE, QTYDISNVL1, QAREASURTIDO, QBACKORDER, NOESTIBAS, TIPOREGISTRO, CONO,
       CLIENTE, CLIENTESHP, QRESERVADA, WHSCOD, NOPEDIDO, PEDIDOCLIENTE, QTYXESTIBA, CONUMERO, LOTE, UUID, ID, QTYDISOTROSNVL, QAREASURTIDOESTIBADA,
       DRECURSO
       FROM PEDRES_TOT_DESUBICAR_RECURSO_X ORDER BY
       RECURSO,  TIPOREGISTRO,   ID INTO
       :RECURSO, :CLFCOD, :WHSLOC, :QTYDISTOTAL, :QPENDIENTE, :QTYDISNVL1, :QAREASURTIDO, :QBACKORDER, :NOESTIBAS, :TIPOREGISTRO, :CONO,
       :CLIENTE, :CLIENTESHP, :QRESERVADA, :WHSCOD, :NOPEDIDO, :PEDIDOCLIENTE, :QTYXESTIBA , :CONUMERO, :LOTE,  :W_UUID, :ID, :QTYDISOTROSNVL, :QAREASURTIDOESTIBADA,
       RECURSO
       DO BEGIN
         SUSPEND;
       END



/* FIN PRCEDURE */
END^

SET TERM ; ^

/* Following GRANT statetements are generated automatically */

GRANT SELECT,INSERT,DELETE ON PEDRES_TOT_DESUBICAR_RECURSO_X TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;
GRANT SELECT ON PEDDET TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;
GRANT SELECT ON PEDMST TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;
GRANT SELECT ON RESMST TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;
GRANT SELECT ON INSALDO TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;
GRANT SELECT ON WHSLOC TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;
GRANT EXECUTE ON PROCEDURE UUID_TOCHAR TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;

/* Existing privileges on this procedure */

GRANT EXECUTE ON PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1 TO SYSDBA;
GRANT EXECUTE ON PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1 TO USUARIOS;
Responder Con Cita
  #3  
Antiguo 24-10-2014
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Poder: 21
ASAPLTDA Va por buen camino
Exclamation Posible Bug firebird 2.1 Por numero de caracteres objectos de 31 caracteres

El problema de seguridad fue solucionado cambiando el nombre del archivo que tenia un nombre parecido al procedimiento

GRANT SELECT,INSERT,DELETE ON PEDRES_TOT_DESUBICAR_RECURSO_X TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;
GRANT SELECT ON PEDDET TO PROCEDURE PEDRES_TOT_DESUBICAR_RECURSO_P1;

PROCEDURE: PEDRES_TOT_DESUBICAR_RECURSO_P1 = 31 CARACTERES
TABLA : PEDRES_TOT_DESUBICAR_RECURSO_X = 31 CARECTERES
se cambio el nombre de la tabla a: PEDRES_WRK_DESUBICAR_RECURSO_X y se soluciono el problema, con este problema donde firebird emite un error que no existe recomiento evitar usar nombres muy largos
Responder Con Cita
  #4  
Antiguo 24-10-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es que está limitado a 32 caracteres máximo, lo pone en el manual
Creo que hay una opción de configuración para cambiarlo, pero nunca la he usado, me parece que 32 caracteres es una longitud excesiva y siempre uso muchos menos.

Por cierto, se te olvidó usar las etiquetas para el código, vas a tener que cumplir una penitencia
Responder Con Cita
  #5  
Antiguo 25-10-2014
ASAPLTDA ASAPLTDA is offline
Miembro
 
Registrado: jun 2003
Ubicación: COLOMBIA-CALI
Posts: 639
Poder: 21
ASAPLTDA Va por buen camino
Nombres Largos

Gracias Casimiro, revise mel punto de longitud a ver que encuentro, sobre la penitencia lo meresco, pero despues de gastar como 10 dias en el problema que no fue posible hallar el problema documentado se me olvido
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
Permisos de Usuarios y seguridad Firebird mjjj Firebird e Interbase 2 05-07-2012 22:32:52
Problema de seguridad JosepGA Firebird e Interbase 11 04-12-2008 17:53:49
Usuarios y seguridad en Firebird dango Firebird e Interbase 4 11-07-2006 18:13:26
Como Puedo Crear un Sistema de Seguridad de Usuarios basado en los Roles de Interbase hromero Firebird e Interbase 3 16-05-2003 21:57:28


La franja horaria es GMT +2. Ahora son las 23:22:46.


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