You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需用户密码访问PostgreSQL备份目录中的数据库表数据?

PostgreSQL备份目录的用户数据访问解决方案

1. 无需密码访问各用户数据的两种方法

方法一:临时调整认证规则(快速操作)

编辑PostgreSQL的认证配置文件/etc/postgresql/<version>/main/pg_hba.conf,找到本地连接的规则行(通常是local all all scram-sha-256),把认证方式改成trust。然后重启服务生效:

sudo systemctl restart postgresql

之后直接用psql -U <目标用户名> -d <数据库名>就能无密码登录,操作完成后记得改回原认证方式,避免安全漏洞。

方法二:通过超级用户切换

先切换到系统的postgres用户:

sudo su - postgres

接着直接以目标用户身份登录指定数据库:

psql -U <目标用户名> -d <数据库名>

或者进入postgres的psql控制台后再切换:

psql
\c <数据库名> <目标用户名>

postgres作为超级用户,无需知道目标用户密码就能切换身份访问数据。

2. 判定用户关联的数据库与表

2.1 查找用户拥有的数据库

用postgres用户登录psql,执行以下SQL:

SELECT datname, pg_get_userbyid(datdba) AS owner FROM pg_database;

结果会列出所有数据库及其所属用户,一目了然。

2.2 查找用户拥有或有权访问的表

先切换到目标数据库:

psql -d <目标数据库名>
  • 查看用户拥有的表:
SELECT table_schema, table_name, pg_get_userbyid(tableowner) AS owner
FROM information_schema.tables
WHERE table_type = 'BASE TABLE' AND pg_get_userbyid(tableowner) = '<目标用户名>';
  • 查看用户有权访问的所有表:
SELECT table_schema, table_name
FROM information_schema.table_privileges
WHERE grantee = '<目标用户名>';

2.3 批量统计所有用户的关联对象

在psql中执行以下脚本,一次性输出所有用户对应的数据库和表:

-- 用户与所属数据库
\echo '=== 用户对应数据库 ==='
SELECT usename, array_agg(datname) AS owned_databases
FROM pg_user u
LEFT JOIN pg_database d ON u.usesysid = d.datdba
GROUP BY usename;

-- 用户与所属表
\echo '\n=== 用户对应表 ==='
SELECT u.usename, concat(t.table_schema, '.', t.table_name) AS table_full_name
FROM pg_user u
LEFT JOIN information_schema.tables t ON u.usename = t.tableowner
WHERE t.table_type = 'BASE TABLE'
ORDER BY u.usename;

内容的提问来源于stack exchange,提问作者Rakshit Awasthi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:22:13