F.8. chkpass
ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ ÑеализÑÐµÑ Ñип даннÑÑ
chkpass, пÑедназнаÑеннÑй Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÑиÑÑованнÑÑ
паÑолей. ÐаждÑй паÑÐ¾Ð»Ñ Ð°Ð²ÑомаÑиÑеÑки пÑеобÑазÑеÑÑÑ Ð² заÑиÑÑованнÑй вид пÑи вводе и вÑегда Ñ
ÑаниÑÑÑ Ð·Ð°ÑиÑÑованнÑм. ÐÐ»Ñ Ð¿ÑовеÑки паÑÐ¾Ð»Ñ ÐµÐ³Ð¾ нÑжно ÑÑавниÑÑ Ñ Ð¿Ð°Ñолем в оÑкÑÑÑом виде, коÑоÑÑй бÑÐ´ÐµÑ Ñакже заÑиÑÑован пеÑед ÑÑавнением.
Ркоде пÑедÑÑмоÑÑена возможноÑÑÑ Ð²ÑдаваÑÑ Ð¾ÑибкÑ, еÑли вводимÑй паÑÐ¾Ð»Ñ Ð¾ÐºÐ°Ð·ÑваеÑÑÑ ÑлиÑком пÑоÑÑÑм. Ðднако в наÑÑоÑÑее вÑÐµÐ¼Ñ ÑÑо пÑоÑÑо заглÑÑка, коÑоÑÐ°Ñ Ð½Ð¸Ñего не делаеÑ.
ÐÑли Ð²Ð²Ð¾Ð´Ð¸Ð¼Ð°Ñ ÑÑÑока наÑинаеÑÑÑ Ñ Ð´Ð²Ð¾ÐµÑоÑиÑ, пÑедполагаеÑÑÑ, ÑÑо ÑÑо Ñже заÑиÑÑованнÑй паÑÐ¾Ð»Ñ Ð¸ он ÑÐ¾Ñ ÑанÑеÑÑÑ Ð±ÐµÐ· дополниÑелÑного ÑиÑÑованиÑ. ÐÑо позволÑÐµÑ ÑÐ¾Ñ ÑанÑÑÑ Ñанее заÑиÑÑованнÑе паÑоли.
ÐÑÐ²Ð¾Ð´Ð¸Ð¼Ð°Ñ ÑÑÑока ÑÑого Ñипа пÑедваÑÑеÑÑÑ Ð´Ð²Ð¾ÐµÑоÑием. ÐÑо позволÑÐµÑ Ð²ÑгÑÑжаÑÑ Ð¸ заново загÑÑжаÑÑ Ð¿Ð°Ñоли, не ÑаÑÑиÑÑовÑÐ²Ð°Ñ Ð¸Ñ
. ÐÑли Ð²Ñ Ñ
оÑиÑе полÑÑиÑÑ ÑÑÑÐ¾ÐºÑ Ð·Ð°ÑиÑÑованного паÑÐ¾Ð»Ñ Ð±ÐµÐ· двоеÑоÑиÑ, можно иÑполÑзоваÑÑ ÑÑнкÑÐ¸Ñ raw(). ÐлагодаÑÑ ÑÑомÑ, даннÑй Ñип можно пÑименÑÑÑ, напÑимеÑ, Ñ Ð¼Ð¾Ð´Ñлем Auth_PostgreSQL Ð´Ð»Ñ Apache.
ÐÐ»Ñ ÑиÑÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ ÑÑандаÑÑÐ½Ð°Ñ ÑÑнкÑÐ¸Ñ Unix crypt(), Ñак ÑÑо на даннÑÑ ÑеализаÑÐ¸Ñ ÑаÑпÑоÑÑÑанÑÑÑÑÑ Ð²Ñе обÑÑнÑе огÑаниÑÐµÐ½Ð¸Ñ ÑÑой ÑÑнкÑии; в ÑаÑÑноÑÑи, ÑÑиÑÑваÑÑÑÑ ÑолÑко пеÑвÑе воÑÐµÐ¼Ñ Ñимволов паÑолÑ.
ÐамеÑÑÑе, ÑÑо Ñип даннÑÑ
chkpass не ÑвлÑеÑÑÑ Ð¸Ð½Ð´ÐµÐºÑиÑÑемÑм.
ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑзованиÑ:
test=# create table test (p chkpass);
CREATE TABLE
test=# insert into test values ('hello');
INSERT 0 1
test=# select * from test;
p
----------------
:dVGkpXdOrE3ko
(1 row)
test=# select raw(p) from test;
raw
---------------
dVGkpXdOrE3ko
(1 row)
test=# select p = 'hello' from test;
?column?
----------
t
(1 row)
test=# select p = 'goodbye' from test;
?column?
----------
f
(1 row)F.8.1. ÐвÑоÑ
Ð'ÐÑÑи Ðж. Ð. Ðаин (<darcy@druid.net>)