kingbase普通用户执行sys_dump命令报错 query failed error permissinon denied
在 Kingbase 中,普通用户执行
sys_dump备份表时出现query failed error permission denied错误,通常是由于权限不足或配置问题导致。以下是分步解决方案:一、权限检查与授予
-
目标表的 SELECT 权限
普通用户必须对要备份的表拥有SELECT权限。使用超级用户执行以下命令:GRANT SELECT ON 表名 TO 普通用户;
若表位于特定模式(如test_schema.table1),需明确指定模式:GRANT SELECT ON test_schema.table1 TO 普通用户; -
授予备份恢复权限(SYSBACKUP)
Kingbase 通过backup_pri插件管理备份权限,需先启用插件并授予用户SYSBACKUP特权:- 启用插件:
CREATE EXTENSION backup_pri; -- 仅需执行一次 ALTER SYSTEM SET backup_pri.enable_backup_pri TO ON; SELECT sys_reload_conf(); -- 刷新配置 - 授予权限:
ALTER USER 普通用户 SYSBACKUP; -- 允许执行备份
- 启用插件:
-
pg_read_server_files 权限(可选)
若sys_dump需读取服务器文件(如数据目录),需授予此权限:GRANT pg_read_server_files TO 普通用户;
二、环境与配置检查
-
备份文件路径权限
确保输出路径对普通用户可写。例如,若路径为/home/user/backup,需执行:chmod 755 /home/user/backup # 目录权限 chmod 644 /home/user/backup/backup.dmp # 若文件已存在
或直接指定用户有权限的路径(如用户家目录)。 -
插件加载与数据库重启
若启用backup_pri后未生效,需重启数据库:systemctl restart kingbase # 或使用数据库启停脚本 -
检查 sys_dump 命令参数
确保正确指定数据库、表名及输出路径。例如:sys_dump -U 普通用户 -d 数据库名 -t 表名 -Fc > /home/user/backup/table1.dmp
-t 表名:指定备份的表(支持模式限定,如test_schema.table1)。-Fc:使用自定义格式(推荐,支持增量恢复)。
三、故障排查与日志分析
-
查看数据库日志
错误详情通常记录在 Kingbase 日志中,路径可通过以下命令查询:SHOW log_directory; -- 日志目录 SHOW log_filename; -- 日志文件名(如postgresql-2024-12-01_120000.log)
查看日志中是否有权限相关错误(如permission denied for table)。 -
以超级用户测试
使用超级用户执行相同命令,验证是否为权限问题:sys_dump -U system -d 数据库名 -t 表名 -Fc > /tmp/table1.dmp
若成功,说明普通用户权限不足;若失败,可能是其他配置问题(如磁盘空间不足)。 -
检查插件状态
确认backup_pri插件已加载:SELECT extname FROM pg_extension WHERE extname = 'backup_pri';
若未显示,需重新执行CREATE EXTENSION backup_pri;。
四、常见错误处理
-
权限不足导致的查询失败
若日志中出现permission denied for relation "table1",通常是缺少SELECT权限或未正确指定模式。需再次检查授权语句。 -
插件未启用或配置错误
若执行ALTER USER ... SYSBACKUP时报错unknown role attribute "sysbackup",说明backup_pri未正确启用,需重新执行插件启用步骤。 -
路径权限问题
若报错cannot open file "backup.dmp": Permission denied,需修改路径权限或更换为用户有权限的目录。
五、示例操作流程
-
授权与配置
-- 授予表权限 GRANT SELECT ON public.users TO app_user; -- 启用备份插件并授权 CREATE EXTENSION backup_pri; ALTER SYSTEM SET backup_pri.enable_backup_pri TO ON; SELECT sys_reload_conf(); ALTER USER app_user SYSBACKUP; -
执行备份
sys_dump -U app_user -d testdb -t users -Fc > /home/app_user/backup/users.dmp -
验证备份文件
ls -l /home/app_user/backup/users.dmp # 检查文件是否存在且权限正确 file /home/app_user/backup/users.dmp # 应显示"Kingbase custom database dump"
通过以上步骤,普通用户应能正常执行
sys_dump备份表。若问题仍存在,建议联系 Kingbase 技术支持或提供详细日志进一步分析。
浙公网安备 33010602011771号