Если вы, пользователь arvind
, установите пароль на secret
, пароль фактический будет установлен на
'md5' || md5('secret' || 'arvind')
то есть md50624d6c2e831004efb7f4173699a1775
. Это то, что вы найдете в системном каталоге pg_authid
.
Теперь установление соединения работает следующим образом:
клиент к серверу: Я хочу подключиться к базе данных mydb
как пользователь arvind
.
сервер-клиент: Хорошо, я хочу аутентификацию MD5. Ваша соль g73j
.
Клиенту присвоено secret
в качестве пароля.
Во-первых, он использует приведенную выше формулу для получения реального пароля (первое хеширование).
Затем клиент хэширует пароль второй раз, используя
'md5' || md5('0624d6c2e831004efb7f4173699a1775' || 'g73j')
клиент на сервер: хешированный пароль md573ae1f550fb4bcd28411cefb24b800bc
.
Сервер вычисляет тот же хэш и сравнивает результат с тем, что он получил от клиента.
Если это то же самое, сервер знает, что у клиента должен быть настоящий пароль, иначе он не смог бы вычислить правильный хеш.
Сам пароль не передается, поэтому он не может быть украден перехватчиком.
сервер-клиент: Хорошо, вы в сети.
Реальные сообщения, конечно, выглядят по-разному, но это все в документации .