Rules und crypt Problem

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