Les mando de nuevo mi problema,......................
dado que todavía no encuentro  la causa,
creen que pueda ser un error de la versión 8.1 de postgres ???
No es extraño que a un superusuario le salga permiso denegado?????




Hola  amigos,

Tengo una base de datos que ha sido desarrollado por varios programadores , todos registrados como supersusurios y ahora que tengo la base datos en explotación, por seguridad estos desarrolladores ya no deben ser supersusurios,
 y les quites este privilegios

ALTER ROLE "vsoliz" NOSUPERUSER;
... etc


Pero después de quitar algunos supersusuarios,
cuando otros usuarios y yo (que soy superusuario todavia) accedemos a la base de datos
me sale  un error

#42501 - permiso denegado para la relación vad_partida_detalle


Pense que esto podría ser debido a que los usuarios desarrolladores son dueños de varias funciones, vistas y tablas y cree una función para asignar como dueño de todo los objetos al usuario "postgres" (esto en en base a una que encontré por la lista)
pero el problemas persiste y ya  no se  por donde más buscar el problemas
(a demas que me parece muy raro que a un superusuario le salga permiso denegado)


PARA ASIGNAR COMO DUEÑO AL p_user DE TODAS LAS VISTA Y TABLAS EN EL p_esquema
--------------------------------------------------------------

               DECLARE
                   objeto record;
                   x    varchar;
               BEGIN
                   FOR objeto IN
                      ( SELECT viewname as d FROM pg_views WHERE
               schemaname=p_esquema
                       UNION
                       SELECT tablename as d FROM pg_tables WHERE
               schemaname=p_esquema
                       UNION
                       SELECT relname as d FROM pg_statio_all_sequences
               WHERE schemaname=p_esquema)
                   LOOP

                    --  RAISE NOTICE 'Asignando  %   como dueño  %  en
               el esquema %', p_user,' objeto.d, p_esquema;
                    x='ALTER TABLE "'||p_esquema||'"."'|| objeto.d ||'"
                     OWNER TO '||p_user;
                     RAISE NOTICE  '%',x;
                      EXECUTE (x);

                   END LOOP;
               END;

  ------------------------------------------------




PARA ASIGNAR COMO DUEÑO AL   p_user    DE TODASFUNCIONES en el  p_esquema

-----------------------------------

       DECLARE
           objeto record;
           tipos_objeto record;

           x    varchar;
           tipos varchar;
           tam integer;
           contador integer;
           cuenta_funciones integer;
           tipo_dato varchar;
       BEGIN


          -- Consulta los datos de la función


          cuenta_funciones:=0;

           FOR objeto IN
              (

              SELECT p.proname AS name,
                     p.oid,
                     p.proargtypes AS args,
                     p.prorettype AS rettype,
                     n.nspname,
                     proargnames,
                     p.proargmodes,
                     p.proallargtypes,
                     p.pronargs
              FROM pg_proc p
                   INNER JOIN pg_namespace n ON p.pronamespace = n.oid
              WHERE  n.nspname = p_esquema
             )
           LOOP
                    -- Arma los atributos de la función

                              tipos:='(';
                              contador=1;

                              tam=objeto.pronargs;

                             WHILE contador <  tam or contador = tam LOOP


                                      SELECT
                                       typname
                                      into
                                       tipo_dato
                                      FROM pg_type t
                                      WHERE  t.oid=objeto.args[contador
       -1];

                                    IF (contador <>tam)THEN
                                       tipos =
       tipos||objeto.proargnames[contador]||' '||tipo_dato ||', ';
                                    ELSE
                                      tipos =
       tipos||objeto.proargnames[contador]||' '||tipo_dato;
                                    END IF;

                                    contador = contador +1;
                             END LOOP;
                          tipos = tipos||')';


         x=' ALTER FUNCTION
       "'||p_esquema||'"."'||objeto.name||'"'||tipos||'
                OWNER TO '||p_user;


           RAISE NOTICE  'OBJETO %   CONTADOR   % ,
       %',objeto.name,contador,x;

          -- Executa  la funcion de  asignacion de privilegios

              EXECUTE (x);

             cuenta_funciones:=cuenta_funciones+1;
           END LOOP;

            RAISE NOTICE  '%  FUNCIONES ASIGNADAS',cuenta_funciones;
       END;




---------------------------------------------------------------









---------------------------------------------------------------------------------
Este mensaje ha sido analizado automáticamente por el *MailScanner* de *ENDE*
y no han sido detectados virus ni otros contenidos peligrosos.



--
EMPRESA NACIONAL DE ELECTRICIDAD
www.ende.bo
Tel.: (591-4) 4520253 - 4520228
Fax: (591-4) 4520318
---------------------------------------------------------------------------------
Este mensaje ha sido analizado automaticamente por el MailScanner de ENDE
y no han sido detectados virus ni otros contenidos peligrosos.

Responder a