使用Navicat连接群晖的PostgreSQL数据库

  群晖的类似 Moments、Audio station、Video Station 等套件都是使用群晖内置的一个 PostgreSQL 数据库,记录一下连接这个数据库的方法。温馨提示: 群晖多个套件均依赖此数据库,没有一定基础的同学,请做好备份,自行评估操作风险。

创建数据库用户并授权

  打开ssh 连接并群晖获取 root 权限,切换到 posgres 用户,进入 psql 交互命令行,创建新用户并授权:

1
2
3
4
5
# 切换到postgres用户
su - postgres

# 进入posql交互
psql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建用户
CREATE USER 用户名 PASSWORD '密码';

# 授权所有权限
ALTER USER 用户名 WITH SUPERUSER CREATEDB;
ALTER USER 用户名 WITH CREATEDB;
ALTER USER 用户名 WITH CREATEROLE;
ALTER USER 用户名 WITH REPLICATION;

# 查看用户列表 看是否执行成功
\du

# 退出psql
\q
1
2
# 退出postgres用户,回到root下
exit

  修改 pg_hba.conf,将新建的用户授权登陆:

1
vi /etc/postgresql/pg_hba.conf

  原始内容为:

1
2
3
4
# TYPE  DATABASE        USER            ADDRESS                 METHOD

local all postgres peer map=pg_root
local all all peer

  我们新增一行,host all 用户名 127.0.0.1/0 md5,修改之后内容为:

1
2
3
4
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host all 用户名 127.0.0.1/0 md5
local all postgres peer map=pg_root
local all all peer

  重新载入配置文件:

1
su -l postgres -c "exec /usr/bin/pg_ctl reload"

修改群晖sshd配置,允许端口转发

  不进行此步操作,后面使用 ssh 隧道连接数据库的时候,终端会出现类似 channel 4: open failed: administratively prohibited: open failed 的报错。

1
vi /etc/ssh/sshd_config

  在约 86 行(Alliot的是DSM6.2版本),找到AllowTcpForwarding no 将其改为 AllowTcpForwarding yes,保存退出(i 为编辑,编辑完后,按一下 ESC,依次输入:wq即可保存退出)。
直接登陆网页的 DSM 控制台,依次进入 控制面板——终端机和SNMP——终端机,将“启动SSH功能”取消勾选,应用之后,重新勾选并应用,即可重启 sshd 服务。(synoservice没找到sshd服务,直接用控制台吧=.=!)

使用Navicat连接数据库

  新建——PostgreSQL,连接名随意,主机填写127.0.0.1,端口填写 PostgreSQL 监听的端口 5432,初始数据库填写 postgres,用户名、密码为前面新建数据库用户设置的,在 “SSH” 页选择使用 SSH 通道,IP、用户名、密码使用群晖的 ssh 连接信息即可。
  使用 macOS 的同学如果 Navicat 自带的 SSH 通道兼容性有问题的,可以本地使用SSH隧道进行端口转发:

1
2
3
4
5
6
# 1234为本地监听的端口,5432 为群晖上postgreSQL的监听端口
# root@192.168.1.2 -p 22 表示Alliot的群晖用户名为root,IP为192.168.1.2,sshd端口为22
ssh -L 5432:127.0.0.1:5432 root@192.168.1.2 -p 22

# 查看macOS本地监听的端口,出现1234端口的监听则OK
netstat -AaLlnW

之后 Navicat 连接时,端口填 5432 。

删除用户,回收权限

  操作完成后,如果需要回收权限,恢复到原样。只需要删除我们新增的那行 pg_hba.conf 配置文件的内容。进入 psql 交互命令中,执行:

1
drop user 用户名;

即可。