Re: funcion para cambiar clave de un usuario

From: suso <jlcubas(at)terra(dot)es>
To: Julio Cesar Rodriguez Dominguez <jurasec(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: funcion para cambiar clave de un usuario
Date: 2009-09-15 21:55:28
Message-ID: 4AB00D50.801@terra.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Julio, no me dió error al compilarla desde pgadmin,pero sí al ejecutarla

ERROR: no existe el rol «antonio»
CONTEXT: sentencia SQL: «ALTER ROLE Antonio WITH PASSWORD 'carmel'»
PL/pgSQL function "cambiar" line 3 at sentencia EXECUTE

La funcion me ha quedado así
Antonio es el superusuario, o sea que, y es propietario tambien de la BD desde la que ejecuto la
funcion.

Tiene todos los derechos de acceso

CREATE OR REPLACE FUNCTION cambiar(clave character varying)
RETURNS boolean AS
$BODY$
BEGIN
execute 'ALTER ROLE '||current_user||' WITH PASSWORD '''||clave||'''';
RETURN true;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE

>
>
> El 15 de septiembre de 2009 16:11, suso <jlcubas(at)terra(dot)es
> <mailto:jlcubas(at)terra(dot)es>> escribió:
>
> Hola de nuevo, tenngo esta función para intentar cambiar el pass del
> usuario,pero me da error al intentar ejecutarla desde el mismo
> pgadmin, está mal escrita..
>
> El error me lo da en la línea del ALTER ROLE.
>
> CREATE OR REPLACE FUNCTION cambiar(clave character varying)
> RETURNS boolean AS
> $BODY$
> DECLARE
> nombre varchar;
> BEGIN
> nombre = current_user;
> ALTER ROLE nombre WITH PASSWORD clave;
> RETURN true;
> END;
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE
>
> He buscado info en el manual de postgres, en internet, y
> "supuestamente" esta bien puesto, pero no es así, por qué, qué estoy
> haciendo mal?.
>
> Muchas gracias
> Un saludo
> Suso
>
>
> Imagino que el error que te marca es que no encuentra el role nombre.
> Para hacer esto tendrias que armar la sentencia del alter role con execute.
>
> CREATE OR REPLACE FUNCTION cambiar(clave character varying)
> RETURNS boolean AS
> $BODY$
> DECLARE
> --nombre varchar;
> BEGIN
> --nombre = current_user;
> execute 'ALTER ROLE '||current_user ||' WITH PASSWORD
> '''||clave||'''';
> RETURN true;
> END;
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE;
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message suso 2009-09-15 21:57:30 Re: funcion para cambiar clave de un usuario
Previous Message ramirex 2009-09-15 21:52:36 Re: Rendimiento de postgres