summaryrefslogtreecommitdiff
path: root/doc/src/sgml/chkpass.sgml
blob: 9aab5139c858ded94231357f3ec27dd9f0aaa405 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<!-- $PostgreSQL: pgsql/doc/src/sgml/chkpass.sgml,v 1.3 2010/08/17 04:37:20 petere Exp $ -->

<sect1 id="chkpass">
 <title>chkpass</title>

 <indexterm zone="chkpass">
  <primary>chkpass</primary>
 </indexterm>

 <para>
  This module implements a data type <type>chkpass</> that is
  designed for storing encrypted passwords.
  Each password is automatically converted to encrypted form upon entry,
  and is always stored encrypted.  To compare, simply compare against a clear
  text password and the comparison function will encrypt it before comparing.
 </para>

 <para>
  There are provisions in the code to report an error if the password is
  determined to be easily crackable.  However, this is currently just
  a stub that does nothing.
 </para>

 <para>
  If you precede an input string with a colon, it is assumed to be an
  already-encrypted password, and is stored without further encryption.
  This allows entry of previously-encrypted passwords.
 </para>

 <para>
  On output, a colon is prepended.  This makes it possible to dump and reload
  passwords without re-encrypting them.  If you want the encrypted password
  without the colon then use the <function>raw()</> function.
  This allows you to use the
  type with things like Apache's <literal>Auth_PostgreSQL</> module.
 </para>

 <para>
  The encryption uses the standard Unix function <function>crypt()</>,
  and so it suffers
  from all the usual limitations of that function; notably that only the
  first eight characters of a password are considered.
 </para>

 <para>
  Note that the <type>chkpass</type> data type is not indexable.
  <!--
  I haven't worried about making this type indexable.  I doubt that anyone
  would ever need to sort a file in order of encrypted password.
  -->
 </para>

 <para>
  Sample usage:
 </para>

<programlisting>
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)
</programlisting>

 <sect2>
  <title>Author</title>

  <para>
   D'Arcy J.M. Cain (<email>[email protected]</email>)
  </para>
 </sect2>

</sect1>