DBeaver无法查授权记录,因其仅为客户端,不记录、不监听权限变更事件;它仅能查看数据库系统表中当前生效的权限快照,而“谁、何时授予权限”需依赖数据库服务端审计日志(如MySQL audit_log、PostgreSQL log_statement)。

直接说结论:DBeaver 本身不记录、也不展示「谁给这张表授过什么权限」的历史操作,它没有内置的授权日志视图或审计面板。
为什么 DBeaver 查不到授权记录
DBeaver 是一个客户端工具,不是数据库服务端。它不保存、不监听、也不解析权限变更事件(如 GRANT / REVOKE),所有权限元数据都存在数据库系统表里,而是否暴露、如何查询,完全取决于后端数据库类型和配置权限。
- MySQL 的权限信息在
mysql.user、mysql.db、mysql.tables_priv等系统表中,但默认用户通常无权查这些表(需SELECT权限 +WITH GRANT OPTION) - PostgreSQL 把权限存于
pg_catalog下的pg_class、pg_namespace、pg_authid等视图,但原始授权操作(谁、何时、执行了哪条GRANT)并不落日志,除非启用了log_statement = 'all'或审计插件 - Oracle 需要查询
DBA_TAB_PRIVS、DBA_ROLE_PRIVS等视图,但同样不记录「操作时间」和「执行人」,除非开了统一审计(Unified Auditing)
能查到什么?——当前生效的权限快照
你能在 DBeaver 里看到的是「当前谁有这张表的哪些权限」,属于静态快照,不是操作日志:
- 右键表 → “View Permissions”(部分数据库支持,如 PostgreSQL、Oracle;MySQL 社区版通常不显示)
- 手动执行 SQL 查询权限视图,例如 MySQL 中:
SELECT * FROM mysql.tables_priv WHERE table_name = 'your_table';
- PostgreSQL 中:
SELECT grantee, privilege_type, is_grantable FROM information_schema.role_table_grants WHERE table_name = 'your_table';
注意:grantee 是被授权者,privilege_type 是权限类型(如 INSERT、SELECT),但不会出现执行 GRANT 的账号名或时间戳。
真要追溯“谁授的权”,得靠数据库服务端日志
这不是 DBeaver 能解决的问题,必须回溯数据库自身的审计能力:
- MySQL:开启
general_log或更推荐的audit_log插件(企业版),或使用 Percona Server / MariaDB 的审计日志模块 - PostgreSQL:设置
log_statement = 'ddl'或'all',配合log_line_prefix记录%u(用户名)和%t(时间) - 确认日志路径后,在 DBeaver 中用
SELECT pg_read_file('path/to/pg_log/...');可读取(需 superuser 权限)
常见误区是以为在 DBeaver 的「查询日志」面板里能看到 GRANT 语句——它只记录你在该 DBeaver 实例中执行过的语句,不包括其他客户端、脚本、应用发起的授权操作。
真正容易被忽略的一点:即使数据库开启了审计,日志也默认不归档、不长期保留。没配轮转策略的话,几小时或几天前的 GRANT 操作很可能已经覆盖掉了。

















