| From: | Rensi Arteaga Copari <rarteaga(at)ende(dot)bo> | 
|---|---|
| To: | pgsql-es-ayuda(at)postgresql(dot)org | 
| Subject: | Fwd: problemas con supersusuario | 
| Date: | 2010-03-15 12:22:54 | 
| Message-ID: | 4B9E269E.8080605@ende.bo | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-es-ayuda | 
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.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Edilberto Arteaga Lopez | 2010-03-15 13:52:23 | RE: problemas con supersusuario | 
| Previous Message | Martin Li Causi | 2010-03-15 11:05:44 | Pg 8.4.2 + Pgpool-II |