Система проверки подлинности PostgreSQL находится в pg_hba.conf
. Множество authentication mechanisms может быть настроено в зависимости от того, как делается соединение, к какой базе данных и к какому пользователю.
Что может быть удивительным, исходя из фона MySQL - это настройка по умолчанию, часто используемая при установке Linux: для локальных подключений по умолчанию используется peer
.
Здесь значения по умолчанию на системе Debian/Ubuntu:
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
peer
выглядит для текущего пользователя Linux работает psql
(или любой другой клиент PostgreSQL). В этом случае аутентификация пароля не используется, но она зависит от ОС, предоставляющей имя пользователя. Это работает только локально, используя здесь Unix-сокет (который является значением по умолчанию, когда вы ничего не указываете psql
).
md5
запросит пароль, но он настроен только для сетевых подключений в этой конфигурации.
В результате, если я создаю пользователя и БД следующим образом (вход в качестве postgres
):
[email protected]:~$ createuser -S -D -R -P myuser
Enter password for new role:
Enter it again:
[email protected]:~$ createdb -E UTF-8 -O myuser mydb
Это будет пытаться подключиться, используя сокет UNIX, и не потому, что я м по-прежнему регистрируется в качестве postgres
, а не как myuser
(который может или не может даже существовать в этой системе):
[email protected]:~$ psql -U myuser mydb
psql: FATAL: Peer authentication failed for user "myuser"
(Если бы я вошел в систему как myuser
в этом Linux Shel Л., Он работал бы)
В отличие от этого, если я явно указать я хочу подключить через сеть (хотя 127.0.0.1
), я запрошен пароль, и я могу войти в систему:
[email protected]:~$ psql -U myuser -h 127.0.0.1 mydb
Password for user myuser:
psql (9.1.20)
SSL connection (cipher: DHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.
mydb=>
Механизм trust
- это тот, который представляет наибольшую угрозу безопасности, поскольку он ничего не проверяет, а режим подключения на этой линии.
Например:
# This will let any local user connect to any DB via the Unix socket
# without any authentication:
local all all trust
# This will let any user connect to any DB via 127.0.0.1
# without any authentication:
host all all 127.0.0.1/32 trust
# And worse (DO NOT USE):
# This will let any user connect to any DB from anywhere
# without any authentication:
host all all 0.0.0.0/0 trust
Там не много случаев, кроме сброса потерянной postgres
(администратор) пароля, где использование trust
оправданно.
В качестве примечания, вы говорите, вы использовали это, чтобы изменить пароль в psql
:
postgres=# ALTER USER flasktut WITH PASSWORD 'zx80xb1';
ALTER ROLE
Это действительно работает, но есть несколько побочных эффектов: пароль теперь вероятно, будет зарегистрирован в ящике ~/.psql_history
, и он также может быть зарегистрирован на стороне сервера (везде, где его журналы отправлены).
psql
В, как правило, лучше использовать \password
команду:
postgres=# \password flasktut
Enter new password:
Enter it again:
Это не оставит след пароля в незашифрованном виде в журналах или истории.
Когда вы создаете одного пользователя, вы должны дать ему разрешение на один бит, а затем, когда пользователь попытается войти в систему, он должен указать, какой db он пытается получить. Если он не суперпользователь. Как вы создаете пользователя? –
_Первая аутентификация_ происходит без пароля. См. Http: //www.postgresql.org/docs/current/static/auth-pg-hba-conf.html и адаптируйте свою конфигурацию к политике безопасности, которая наилучшим образом соответствует вашим потребностям. –
Как вы подключаетесь к серверу? Напишите команду psql, которую вы запускаете. Сервер работает на вашем локальном компьютере или удаленном? Если он находится на локальном хосте, вы подключаетесь через сокет или IP-адрес домена? Посмотрите файл pg_hba.conf. Здесь перечислены все схемы входа и методы проверки подлинности. – kliron