E se tu fizer, Renato, a na tua trigger o seguinte:

Trigger Function:
 DECLARE
v_senha varchar();
BEGIN
  select Md5(new.usu_senha) into v_senha;
   execute 'CREATE ROLE ' || new.usu_usuario || ' NOINHERIT LOGIN
UNENCRYPTED PASSWORD ' || quote_literal(v_senha) ;
  return new;
END;

A parte em vermelha eu mudei da que tu tinha colado.


2012/11/14 Joao Paulo Rieg <[email protected]>

> **
> Correto Renato!
>
> A senha que envio não é criptografada, pois na tela de cadastro que fiz
> não criptografo a mesma.
> Na verdade, a tabela de usuarios que fiz é para fins de obter informações
> mais detalhadas do mesmo.
> O login do sistema nao faço pela tabela e sim pela role. se a role existe
> e o usuario digitar a senha correta, ele loga no banco e terá acesso as
> tabelas de acordo com as permissões concedidas à role. Neste caso o próprio
> banco vai administrar essa questão das  permissões aos usuarios logados.
> Na questão de criptografia da senha,... o banco faz a
> criptografia automatica quando crio/modifico a role e também no login.
>
> Att. Rieg
>
>
>
>
>
> Olá João Paulo.. tudo bem?
> no meu caso, a senha já está criptografada em MD5.. se eu fizer como vc
> fez, eu penso que a senha será criptografada 2 vezes..
> Nos eu caso NEW.passwd não esta criptografado né? ou seja.. é um clear
> password. correto?
>
> valeu!
>
> Renato
>
>
> Em 14 de novembro de 2012 16:06, Joao Paulo Rieg 
> <[email protected]>escreveu:
>
>> **
>> Olá pessoal..
>>
>>
>> Tenho uma tabela de usuários onde armazeno o usuário e senha de acesso do
>> sistema. A senha já está criptografada com MD5.
>>
>> Eu preciso replicar esses usuários para a tabela nativa de usuários do
>> PostgreSQL através do comando create role e manter a mesma senha. Já tentei
>> o comando abaixo, mas sem sucesso:
>>
>> Trigger Function:
>>  DECLARE
>> v_senha varchar();
>> BEGIN
>> v_senha := 'md5' || (new.usu_senha);
>>   execute 'CREATE ROLE ' || new.usu_usuario || ' NOINHERIT LOGIN
>> UNENCRYPTED PASSWORD ' || quote_literal(v_senha) ;
>>   return new;
>> END;
>>
>> Alguma sugestão?
>>
>> Obrigado,
>> Renato
>>
>>
>> Tenho uma trigger que está assim:
>>
>> CREATE OR REPLACE FUNCTION gravar_role()
>>   RETURNS trigger AS
>> $BODY$
>> DECLARE
>>  SQL TEXT;
>>  BEGIN
>>   IF TG_OP = 'INSERT' THEN
>>    SQL = 'CREATE ROLE '||NEW.usuario||' LOGIN PASSWORD
>> '||quote_literal(NEW.passwd)||' INHERIT; ';
>>    EXECUTE SQL;
>>    RETURN NEW;
>>   ELSEIF TG_OP = 'UPDATE' THEN
>>    SQL = 'ALTER ROLE '||NEW.usuario||' PASSWORD
>> '||quote_literal(NEW.passwd)||'; ';
>>    EXECUTE SQL;
>>    RETURN NEW;
>>   ELSEIF TG_OP = 'DELETE' THEN
>>    SQL = 'DROP ROLE '||OLD.usuario||'; ';
>>    EXECUTE SQL;
>>    RETURN OLD;
>>   END IF;
>>  END;
>> $BODY$
>>   LANGUAGE plpgsql VOLATILE;
>>
>> CREATE TRIGGER gravar_role
>>   BEFORE INSERT OR UPDATE OR DELETE
>>   ON sis_user
>>   FOR EACH ROW
>>   EXECUTE PROCEDURE gravar_role();
>>
>>
>> A unica preocupação que tive que fazer na aplicação é de não permitir
>> modificar o nome do usuario.
>> Esta trigger modifica a senha e também remove a role caso seja removido
>> na tabela.
>>
>> Att. Rieg
>>
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>  ------------------------------
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a