首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有密码提示的情况下设置具有特定角色的postgres数据库

问在没有密码提示的情况下设置具有特定角色的postgres数据库
EN

Database Administration用户
提问于 2020-03-18 15:55:19
回答 1查看 1.2K关注 0票数 0

上下文

我有一个PostgreSQL服务器(localhost:5432),它保存一个名为my_database的数据库。

我很久以前就创建了一个简单的角色,拥有这个数据库;my_user,不同于postgres角色;

代码语言:javascript
复制
                                   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文件);

代码语言:javascript
复制
#!/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文件;

代码语言:javascript
复制
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文件;

代码语言:javascript
复制
*:*:*:my_user:my_user_password

它工作(它停止要求一个密码)。

而是用数据库的名称;

代码语言:javascript
复制
*:*:my_database:my_user:my_user_password

它没有(它一直要求一个密码)。

EN

回答 1

Database Administration用户

发布于 2020-03-18 17:06:23

你删掉了这个问题。

在您的评论中,您说数据库实际上是projATX_db。至少你是这么想的。但是PostgreSQL将所有未引用的文本转换为小写,所以当您运行

代码语言:javascript
复制
CREATE DATABASE projATX_db;

这个数据库实际上叫做projatx_db

现在,密码文件中的条目不受这种小写转换(特定于SQL)的限制,因此密码文件中的projATX_db与您的数据库不匹配。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/262208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档