Ubuntu 20.04部署Wiki.js:Root可连PostgreSQL其他用户权限问题
解决Wiki.js非root用户无法连接PostgreSQL的权限问题
问题背景
在Ubuntu 20.04服务器部署Wiki.js,按常规部署流程操作后,root用户执行node server可正常连接PostgreSQL数据库,但切换到wikijs、nobody等非root用户执行相同命令时,无法建立数据库连接。
症状截图
- wikijs用户运行
node server报错:
- root用户运行
node server正常:
实操解决步骤
1. 进入PostgreSQL命令行
切换到系统postgres用户,启动psql:
sudo su - postgres psql
2. 确认目标数据库与用户
先查看当前PostgreSQL中的用户和数据库列表,确认Wiki.js使用的数据库(假设为wikijs)和对应用户(假设为wikijs):
-- 列出所有数据库用户及权限 \du -- 列出所有数据库 \l
3. 授予数据库访问权限
执行以下SQL命令,为目标用户授予Wiki.js数据库的必要权限:
-- 授予连接数据库权限 GRANT CONNECT ON DATABASE wikijs TO wikijs; -- 授予public schema下所有表的读写权限 GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO wikijs; -- 授予序列权限(避免自增字段操作报错) GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO wikijs; -- 授予函数权限 GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO wikijs;
如果需要更精细的权限控制,可将ALL PRIVILEGES替换为SELECT, INSERT, UPDATE, DELETE等具体权限。执行完成后输入\q退出psql。
4. 调整PostgreSQL访问控制配置
修改pg_hba.conf文件,确保非root用户可以通过本地连接访问数据库:
# 定位pg_hba.conf路径(版本号可能不同,比如12或14) sudo find / -name pg_hba.conf # 编辑配置文件 sudo nano /etc/postgresql/12/main/pg_hba.conf
找到本地连接相关的配置段,添加或修改如下行(替换为你的数据库和用户名):
local wikijs wikijs md5
保存后重启PostgreSQL服务生效:
sudo systemctl restart postgresql
5. 验证Wiki.js配置文件
确保Wiki.js的config.yml中数据库配置的用户名与你授权的用户一致,示例配置:
db: type: postgres host: localhost port: 5432 user: wikijs pass: your_database_password db: wikijs ssl: false
6. 测试连接
切换到wikijs用户,重新运行Wiki.js服务测试:
sudo su - wikijs cd /path/to/your/wiki.js/directory node server
内容的提问来源于stack exchange,提问作者Conkel Conkel
相关产品推荐
相关产品推荐

