hsm*_*ing 186 postgresql
当我创建一个新用户,但它无法登录数据库.
我这样做:
postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
Run Code Online (Sandbox Code Playgroud)
然后创建一个数据库:
postgres@Aspire:/home/XXX$ createdb -O dev test_development
Run Code Online (Sandbox Code Playgroud)
之后,我尝试psql -U dev -W test_development登录,但得到错误:
psql: FATAL: Peer authentication failed for user "dev"
Run Code Online (Sandbox Code Playgroud)
我试图解决问题但失败了.
mey*_*son 291
尝试:
psql user_name -h 127.0.0.1 -d db_name
Run Code Online (Sandbox Code Playgroud)
哪里
-h 是本地服务器的主机名/ IP,因此避免使用Unix域套接字-d 是要连接的数据库名称然后通过Postgresql而不是Unix域套接字连接将其评估为"网络"连接,因此不会将其评估为"本地"连接,如下所示pg_hba.conf:
local all all peer
Run Code Online (Sandbox Code Playgroud)
fla*_*usa 210
您的连接失败,因为默认情况下psql使用peer身份验证连接UNIX套接字,这要求当前UNIX用户具有相同的用户名psql.所以,你必须创建UNIX用户dev,然后登录,dev或用sudo -u dev psql test_development它们来访问数据库(和psql应该不要求输入密码).
如果您不想或不想创建UNIX用户,就好像您只想连接到数据库以进行即席查询一样,使用psql --host=localhost --dbname=test_development --username=dev(如@meyerson回答中指出的那样)强制套接字连接将解决您的直接问题.
但是,如果您打算通过Unix套接字而不是对等方法强制进行密码验证,请尝试更改以下pg_hba.conf*行:
从
# TYPE DATABASE USER ADDRESS METHOD
local all all peer
Run Code Online (Sandbox Code Playgroud)
至
# TYPE DATABASE USER ADDRESS METHOD
local all all md5
Run Code Online (Sandbox Code Playgroud)
peer意味着它将信任UNIX用户的身份(真实性).所以不要求密码.
md5意味着它将始终要求输入密码,并在散列后进行验证MD5.
当然,您还可以为特定数据库或用户创建更具体的规则,其中一些用户peer和其他用户需要密码.
更改后pg_hba.conf如果PostgreSQL正在运行,您需要通过重新加载(pg_ctl reload)或重新启动(sudo service postgresql restart)来重新读取配置.
*该文件pg_hba.conf最有可能是/etc/postgresql/9.x/main/pg_hba.conf
编辑: 来自@Chloe,@ JavierEH,@ Jonas Eicher,@ fccoelho,@ Joanis,@ Uphill的评论.评论纳入答案.
ste*_*hke 29
对等身份验证意味着postgres会向操作系统询问您的登录名,并将其用于身份验证.要使用postgres上的对等身份验证以"dev"用户身份登录,您还必须是操作系统上的用户"dev".
您可以在Postgresql文档中找到身份验证方法的详细信息.
提示:如果不再使用身份验证方法,请断开服务器与网络的连接,并使用"trust"方法"localhost"(并在启用方法"trust"时仔细检查您的服务器是否无法通过网络访问).
tym*_*mik 23
当您指定:
psql -U user
Run Code Online (Sandbox Code Playgroud)
它通过UNIX Socket连接,UNIX Socket默认使用peer身份验证,除非pg_hba.conf另有说明.
您可以指定:
host database user 127.0.0.1/32 md5
host database user ::1/128 md5
Run Code Online (Sandbox Code Playgroud)
获取指定database和的回送接口(IPv4和IPv6)上的TCP/IP连接user.
更改后,您必须重新启动postgres或重新加载它的配置.重新启动应该在现代RHEL/Debian发行版中工作:
service postgresql restart
Run Code Online (Sandbox Code Playgroud)
重新加载应该以下列方式工作:
pg_ctl reload
Run Code Online (Sandbox Code Playgroud)
但是命令可能因PATH配置而异 - 您可能必须指定绝对路径,这可能会有所不同,具体取决于安装postgres的方式.
然后你可以使用:
psql -h localhost -U user -d database
Run Code Online (Sandbox Code Playgroud)
用它登录user到指定database的TCP/IP.
md5代表加密密码,您也可以password在授权期间指定纯文本密码.只要数据库服务器只能在本地访问,没有网络访问权限,这两个选项就不应该是一件大事.
重要说明:pg_hba.conf事项中的
定义顺序- 规则从上到下读取,如iptables,因此您可能希望在规则之上添加建议规则:
host all all 127.0.0.1/32 ident
Run Code Online (Sandbox Code Playgroud)
mgo*_*ser 22
虽然@ flaviodesousa的答案可行,但它也强制要求所有用户(其他人)输入密码.
有时候为其他人保留对等身份验证是有意义的,但是为服务用户做出例外.在这种情况下,您需要在pg_hba.conf中添加一行,如下所示:
local all some_batch_user md5
Run Code Online (Sandbox Code Playgroud)
我建议您在注释标题行的正下方添加此行:
# TYPE DATABASE USER ADDRESS METHOD
local all some_batch_user md5
Run Code Online (Sandbox Code Playgroud)
您需要使用重启PostgreSQL
sudo service postgresql restart
Run Code Online (Sandbox Code Playgroud)
如果您使用的是9.3,那么您的pg_hba.conf很可能是:
/etc/postgresql/9.3/main/pg_hba.conf
最简单的解决方案:
CREATE USER dev WITH PASSWORD 'dev';
CREATE DATABASE test_development;
GRANT ALL PRIVILEGES ON DATABASE test_development to dev;
ALTER ROLE dev CREATEROLE CREATEDB;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
222801 次 |
| 最近记录: |