Rules und crypt Problem
am 25.10.2008 11:59:08 von Oliver Kamzol
This is a multi-part message in MIME format.
--------------030202090703000505040808
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
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:
=3D> create table tt (u=
n
varchar(10), pw varchar(128));
CREATE TABLE
=3D> insert into tt values ('me', crypt('pass',gen_salt('bf')));
INSERT 0 1
mitarbeiterideen=3D> select * from tt;
 un |         =C2=A 0=C2=
           Â=A0=
      pw
----+------------------------------------------------------- -------
 me | $2a$06$RHCI.brrz/UedPhDokDgTumljCvbG1QBofLWNaQfkaii6KzLFAO0y
r>
(1 Zeile)
Funktioniert. Aber ich möchte jetzt gerne, daà das pw Feld per =
crypt
verschlüsselt wird, auch wenn die Applikation nur plain übergib=
t, also
nur 'me' und 'pass'. Also dachte ich, ich kann das mit einer Regel
lösen:
=3D> 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
=3D> insert into tt values ('me', 'pass');
FEHLER: unendliche Rekursion entdeckt in Regeln für Relation =C2=
=BBtt«
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
--------------030202090703000505040808
Content-Type: text/x-vcard; charset=utf-8;
name="itsok.vcf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="itsok.vcf"
YmVnaW46dmNhcmQNCmZuOk9saXZlciBLYW16b2wNCm46S2Ftem9sO09saXZl
cg0Kb3JnOk9saXZlciBLYW16b2w7aXRzIG9rIDo6IGl0IHNlcnZpY2Ugb2xp
dmVyIGthbXpvbA0KYWRyOjs7SGVpbGlnZW5iYXVtc3RyLiAxNTtEdWlzYnVy
Zzs7NDcyNDk7RA0KZW1haWw7aW50ZXJuZXQ6aXRzb2tAb2thbXpvbC5kZQ0K
dGVsO3dvcms6KzQ5IDE1MSAyMjYgMzI0IDg0DQp4LW1vemlsbGEtaHRtbDpU
UlVFDQp2ZXJzaW9uOjIuMQ0KZW5kOnZjYXJkDQoNCg==
--------------030202090703000505040808
Content-Type: text/plain
Content-Disposition: inline
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
--------------030202090703000505040808--
Re: Rules und crypt Problem
am 26.10.2008 16:54:22 von Andreas Kretschmer
Oliver Kamzol schrieb:
> Funktioniert. Aber ich möchte jetzt gerne, daß das pw Feld per cryp=
t
> verschlüsselt wird, auch wenn die Applikation nur plain übergibt, a=
lso
> nur 'me' und 'pass'. Also dachte ich, ich kann das mit einer Regel lö=
sen:
>=20
> =3D> 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
>=20
> =3D> insert into tt values ('me', 'pass');
> FEHLER:=A0 unendliche Rekursion entdeckt in Regeln für Relation =BBtt=
=AB
>=20
>=20
> 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
--=20
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=
°
--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
Re: Rules und crypt Problem
am 26.10.2008 23:02:20 von Oliver Kamzol
This is a multi-part message in MIME format.
--------------090804010009030907040701
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Andreas Kretschmer schrieb:
Oliver Kamzol 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
--
style="font-family: verdana,sans-serif; font-weight: bold; font-size: 8px;">its
ok :: it service oliver kamzol
style="font-family: verdana,sans-serif; font-weight: normal; font-size: 8px;">
Oliver Kamzol
Heiligenbaumstr. 15
47249 Duisburg
email:
mobile: +49 151 226 324 84
--------------090804010009030907040701
Content-Type: text/x-vcard; charset=utf-8;
name="itsok.vcf"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="itsok.vcf"
begin:vcard
fn:Oliver Kamzol
n:Kamzol;Oliver
org:Oliver Kamzol;its ok :: it service oliver kamzol
adr:;;Heiligenbaumstr. 15;Duisburg;;47249;D
email;internet:itsok@okamzol.de
tel;work:+49 151 226 324 84
x-mozilla-html:TRUE
version:2.1
end:vcard
--------------090804010009030907040701
Content-Type: text/plain
Content-Disposition: inline
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
--------------090804010009030907040701--
Re: Rules und crypt Problem
am 27.10.2008 07:15:00 von andreas.kretschmer
am Sat, dem 25.10.2008, um 11:59:08 +0200 mailte Oliver Kamzol folgendes=
:
> Hallo zusammen,
>=20
> ich hab ein kleines Problem (oder ich seh den Wald vor lauter Bäum=
en 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 Var=
iable
NEW.pw passend behandeln. Das ganze als ein before insert - Trigger.
Andreas
--=20
Andreas Kretschmer
Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net
--=20
Sent via pgsql-de-allgemein mailing list (pgsql-de-allgemein@postgresql.o=
rg)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein
Re: Rules und crypt Problem
am 27.10.2008 14:35:17 von mailings
http-equiv=3D"Content-Type">
Hi Andreas,
Danke! Ich hab den Wald vor lauter Bäumen tatsächlich nicht mehr
gesehen ;-)
Hab den Trigger jetzt umgebaut und bin mit dem Ergebnis sehr zufrieden.
r>
Danke und Gruß
=A0Oliver
A. Kretschmer schrieb:
type=3D"cite">
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 Var=
iable
NEW.pw passend behandeln. Das ganze als ein before insert - Trigger.
Andreas