我有一个PostgreSQL服务器(localhost:5432),它保存一个名为my_database的数据库。
我很久以前就创建了一个简单的角色,拥有这个数据库;my_user,不同于postgres角色;
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
my_user | Superuser, Create role, Create DB | {}
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}这个手动创建的角色没有与postgres相同的操作系统用户。
我有一个bash脚本来用一组模式和表重新初始化my_database (来自create_db.sql文件);
#!/bin/bash
set -e
dropdb -U my_user my_database || true
createdb -U my_user my_database --owner=my_user
psql -U my_user -d my_database -h localhost -v ON_ERROR_STOP=1 -a -f create_db.sql从几天以来,这个脚本问我my_user的密码是3倍。我想每行一次。
在此之前,我可以在没有提示输入任何密码的情况下运行它。真是太酷了。
我之间唯一改变的就是这个;
我通常使用pgadmin3与postgres用户连接到此服务器,以查看表中的内容。
在pgadmin3中,我曾经将此服务器凭据设置为my_user及其密码,以便与postgres登录签出一些不同之处。
然后,总是在pgadmin3中,我像以前一样将凭证切换回postgres。
我不明白为什么这会破坏从那以后我的脚本要求密码的东西.
可能和别的事有关,但我真的不知道是什么?
我还尝试用这行设置一个.pgpass文件;
localhost:5432:my_database:my_user:my_user_password并更改对0600的访问权限,如文档中所述。
但是它似乎没有被识别;bash脚本仍然要求3次my_user密码。
而且,由于我(与拥有my_user的角色my_database不一样的ubuntu用户)拥有这个文件,我想知道是否应该为postgres OS用户设置该文件的权限?
无论如何,这个.pgpass文件以前是空的,当时我可以在没有任何密码提示的情况下重置my_database。因此,如果我能够恢复以前的行为,那将是很好的,除非这不是一个好的做法。
任何线索都将不胜感激,因为我不太习惯数据库管理。
"PostgreSQL 10.12 (Ubuntu10.12-0ubuntu0.18.04.1) on x86_64-pc-linux-gnu,由gcc (Ubuntu7.4.0-1ubuntu1~18.04.1) 7.4.0,64位编写“
我刚刚注意到,如果我用这个内容设置.pgpass文件;
*:*:*:my_user:my_user_password它工作(它停止要求一个密码)。
而是用数据库的名称;
*:*:my_database:my_user:my_user_password它没有(它一直要求一个密码)。
发布于 2020-03-18 17:06:23
你删掉了这个问题。
在您的评论中,您说数据库实际上是projATX_db。至少你是这么想的。但是PostgreSQL将所有未引用的文本转换为小写,所以当您运行
CREATE DATABASE projATX_db;这个数据库实际上叫做projatx_db
现在,密码文件中的条目不受这种小写转换(特定于SQL)的限制,因此密码文件中的projATX_db与您的数据库不匹配。
https://dba.stackexchange.com/questions/262208
复制相似问题