Lists: | pgsql-de-allgemein |
---|
From: | Oliver Kamzol <itsok(at)okamzol(dot)de> |
---|---|
To: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Rules und crypt Problem |
Date: | 2008-10-25 09:59:08 |
Message-ID: | 4902EDEC.1030300@okamzol.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
Hallo zusammen,
ich hab ein kleines Problem (oder ich seh den Wald vor lauter Bäumen nicht mehr...) mit der crypt Funktion, bzw. ihrem Gebrauch in Rules.
Wenn ich eine Tabelle tt habe und einen regulären Insert mache, funktioniert auch der Gebrauch von crypt:
= create table tt (un varchar(10), pw varchar(128));
CREATE TABLE
= insert into tt values ('me', crypt('pass',gen_salt('bf')));
INSERT 0 1
mitarbeiterideen= select * from tt;
un | pw
----+--------------------------------------------------------------
me | $2a$06$RHCI.brrz/UedPhDokDgTumljCvbG1QBofLWNaQfkaii6KzLFAO0y
(1 Zeile)
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...
Vielen Dank und Gruß
Oliver
Attachment | Content-Type | Size |
---|---|---|
unknown_filename | text/html | 1.7 KB |
itsok.vcf | text/x-vcard | 256 bytes |
From: | Andreas Kretschmer <akretschmer(at)spamfence(dot)net> |
---|---|
To: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Re: Rules und crypt Problem |
Date: | 2008-10-26 15:54:22 |
Message-ID: | 20081026155422.GA7344@tux |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
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.
Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly." (unknown)
Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°
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 |
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 |
From: | "A(dot) Kretschmer" <andreas(dot)kretschmer(at)schollglas(dot)com> |
---|---|
To: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Re: Rules und crypt Problem |
Date: | 2008-10-27 06:15:00 |
Message-ID: | 20081027061500.GB28041@a-kretschmer.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
am Sat, dem 25.10.2008, um 11:59:08 +0200 mailte Oliver Kamzol folgendes:
> Hallo zusammen,
>
> ich hab ein kleines Problem (oder ich seh den Wald vor lauter BÀumen nicht
> mehr...) mit der crypt Funktion, bzw. ihrem Gebrauch in Rules.
Die Liste hat mal wieder ein Zeitloch, ich weiß, daß Du noch mal
geantwortet hast und es mit einem TRIGGER versucht hast, und wieder eine
Rekursion. (die Liste wird diese Mail sicher auch noch sehen...)
In Deiner Triggerfuntion rufst Du INSERT auf. Nun rate mal, was
passiert, wenn ein INSERT einen TRIGGER auslöst, der wieder ein INSERT
macht? Nein, so geht das nicht.
Was ich meinte:
In Deiner Triggerfunktion prüfen, ob NEW.pw ein bereits gecryptetes
Passwort enthält (Stringlänge prüfen oder so.). Falls nein, die Variable
NEW.pw passend behandeln. Das ganze als ein before insert - Trigger.
Andreas
--
Andreas Kretschmer
Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net
From: | Mailings <mailings(at)vainsworld(dot)de> |
---|---|
To: | "A(dot) Kretschmer" <andreas(dot)kretschmer(at)schollglas(dot)com> |
Cc: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Re: Rules und crypt Problem |
Date: | 2008-10-27 13:35:17 |
Message-ID: | 4905C395.9080203@vainsworld.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-de-allgemein |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-15"
http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Hi Andreas,<br>
<br>
Danke! Ich hab den Wald vor lauter Bäumen tatsächlich nicht mehr
gesehen ;-)<br>
Hab den Trigger jetzt umgebaut und bin mit dem Ergebnis sehr zufrieden.<br>
<br>
Danke und Gruß<br>
Oliver<br>
<br>
<br>
A. Kretschmer schrieb:
<blockquote cite="mid:20081027061500(dot)GB28041(at)a-kretschmer(dot)de"
type="cite">
<pre wrap="">am Sat, dem 25.10.2008, um 11:59:08 +0200 mailte Oliver Kamzol folgendes:
</pre>
<blockquote type="cite">
<pre wrap="">Hallo zusammen,
ich hab ein kleines Problem (oder ich seh den Wald vor lauter BÀumen nicht
mehr...) mit der crypt Funktion, bzw. ihrem Gebrauch in Rules.
</pre>
</blockquote>
<pre wrap=""><!---->
Die Liste hat mal wieder ein Zeitloch, ich weiß, daß Du noch mal
geantwortet hast und es mit einem TRIGGER versucht hast, und wieder eine
Rekursion. (die Liste wird diese Mail sicher auch noch sehen...)
In Deiner Triggerfuntion rufst Du INSERT auf. Nun rate mal, was
passiert, wenn ein INSERT einen TRIGGER auslöst, der wieder ein INSERT
macht? Nein, so geht das nicht.
Was ich meinte:
In Deiner Triggerfunktion prüfen, ob NEW.pw ein bereits gecryptetes
Passwort enthält (Stringlänge prüfen oder so.). Falls nein, die Variable
NEW.pw passend behandeln. Das ganze als ein before insert - Trigger.
Andreas
</pre>
</blockquote>
<br>
</body>
</html>
Attachment | Content-Type | Size |
---|---|---|
unknown_filename | text/html | 1.5 KB |