Re: Rules und crypt Problem

From: Oliver Kamzol <itsok(at)okamzol(dot)de>
To: Andreas Kretschmer <akretschmer(at)spamfence(dot)net>
Cc: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: Rules und crypt Problem
Date: 2008-10-26 22:02:20
Message-ID: 4904E8EC.9030002@okamzol.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Andreas Kretschmer schrieb:

Oliver Kamzol itsok(at)okamzol(dot)de schrieb:


Funktioniert. Aber ich möchte jetzt gerne, daß das pw Feld per crypt
verschlüsselt wird, auch wenn die Applikation nur plain übergibt, also
nur 'me' und 'pass'. Also dachte ich, ich kann das mit einer Regel lösen:

= CREATE RULE pw_tt AS ON INSERT TO tt
- DO INSTEAD
- INSERT INTO tt VALUES (NEW.un, crypt(NEW.pw, gen_salt('bf')));
CREATE RULE

= insert into tt values ('me', 'pass');
FEHLER: unendliche Rekursion entdeckt in Regeln für Relation »tt«

Kann mir bitte jemand erklären, wo hier der Fehler liegt? Ich schein
betriebsblind zu sein, aber ich weiß nicht, woher er die Rekursionen holt...


Die RULE macht bei insert ein instead insert. Die Rule für das Insert
ist wieder ein... richtig, insert.

Ich würde das eher als TRIGGER machen.

Das hab ich auch schon versucht, leider bekomme ich hierbei auch einen Fehler...

Etwas anders gestaltet, aber doch ähnlich.

=CREATE OR REPLACE FUNCTION makePwd() returns trigger AS

$ $$

$ BEGIN

$ IF TG_OP = 'INSERT' THEN

$ INSERT INTO tt VALUES (NEW.un, crypt(NEW.pw, gen_salt('bf')));

$ RETURN NEW;

$ END IF;

$ END;

$ $$ LANGUAGE 'plpgsql';

CREATE FUNCTION

= create trigger pwdtest before insert on tt for each row execute procedure makePwd();

CREATE TRIGGER

= insert into tt values ('me', 'pass');

-- hier passiert erstmal einige Sekunden nichts und dann:

FEHLER: Grenze für Stacktiefe überschritten

TIP: Erhöhen Sie den Konfigurationsparameter »max_stack_depth«, nachdem Sie sichergestellt haben, dass die Stacktiefenbegrenzung Ihrer Plattform ausreichend ist.

KONTEXT: SQL-Anweisung »INSERT INTO tt VALUES ( $1 , crypt( $2 , gen_salt('bf')))«

PL/pgSQL function "makepwd" line 3 at SQL statement

SQL-Anweisung »INSERT INTO tt VALUES ( $1 , crypt( $2 , gen_salt('bf')))«

PL/pgSQL function "makepwd" line 3 at SQL statement

SQL-Anweisung »INSERT INTO tt VALUES ( $1 , crypt( $2 , gen_salt('bf')))«

[...]

das ganze dann zig Mal.

Ich verstehe nicht, warum das mit der Stacktiefe zu tun hat - die übrigens auf dem Default steht.

Gruß Danke

Oliver

Andreas

--

its ok :: it service oliver kamzol

Oliver Kamzol

Heiligenbaumstr. 15

47249 Duisburg

email: itsok(at)okamzol(dot)de

mobile: +49 151 226 324 84

Attachment Content-Type Size
unknown_filename text/html 3.5 KB
itsok.vcf text/x-vcard 245 bytes

In response to

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message A. Kretschmer 2008-10-27 06:15:00 Re: Rules und crypt Problem
Previous Message Andreas Kretschmer 2008-10-26 15:54:22 Re: Rules und crypt Problem