编辑pg_hba.conf

时间:2017-05-15 21:13:03

标签: bash postgresql installer

所以,我正在尝试为我的应用程序创建一个安装脚本(针对Ubuntu 16)。它必须创建一个postgresql用户,授予该用户通过密码进行身份验证的权限,并授予该用户本地身份验证的权限。我只想授予在一个数据库(应用程序数据库)上执行此操作的权限。因此,我需要在拒绝未知连接的行上方插入行local databasename username md5,例如,在pg_hba.conf.的“在此处设置您的实际配置”部分(pg_hba.conf使用文件中的位置确定优先级:遇到匹配连接的第一个规则给出最终结果。)

要添加此行,我的脚本将运行:

sudo awk '
/# Put your actual configuration here/ {
    print "local databasename username md5"
}
{ print }
' /etc/postgresql/9.5/main/pg_hba.conf

# other setup

service postgresql restart

但这不是最佳的。首先,版本号将来会发生变化,所以硬编码目录很差。其次,这是在其他人的项目中评论配置文件的实际结构部分,从所有可能的宇宙中的所有可能的观点来看,这是一个可怕的想法。

所以我的问题是两个方面。首先,是否有一个良好,正确且可接受的方法来编辑pg_hba.conf ,我可以在安装脚本中使用它而不是使用文本编辑器进行kitbashing?

其次,如果对第一部分没有好的答案:有没有一种程序化的方式来询问postgresql从哪里拉出pg_hba?

2 个答案:

答案 0 :(得分:3)

  

有没有一种程序化的方式来询问postgresql它从哪里拉pg_hba?

show hba_file;
-- or
select current_setting('hba_file');

答案 1 :(得分:2)

Debian工具链

  

所以我的问题是两个方面。首先,是否有一个良好,正确且可接受的方法来编辑pg_hba.conf,我可以在安装脚本中使用它而不是使用文本编辑器进行kitbashing?

是的,但是,你可能会发现它不能令人满意。

Upstream,PostgreSQL不支持多个版本并使用其构建工具进行安装。 Debian的确如此。所以Debian发明了cluster的概念,它本质上是一个名称和一个版本号。

在Ubuntu或Debian上构建工具,您也应该使用名称和版本号。

  

第二,如果对第一部分没有好的答案:是否有一种程序化的方式来询问postgresql从哪里拉出pg_hba?

是的,有一个名为pg_conftool的工具。默认群集的名称为main。如果你想要9.5 /主群集。你可以这样做..

pg_conftool -s 9.5 main show hba_file
/etc/postgresql/9.5/main/pg_hba.conf

你可以看到conftool可以使用版本和名称,但严格来说可能不需要。

/usr/bin/pg_conftool [options] [<version> <cluster name>] [<configfile>] <command>

如果您想在此上下文中了解有关群集的更多信息,请查看以pg_*开头的所有二进制文件,但首先是pg_ctl和{{1 (debian包装器)