kingbase 给普通用户授权查询 sys_tablespace 表的查询权限
在 KingbaseES 中,
sys_tablespace 是存储表空间元数据的系统表,默认只有 ** 超级用户(如 system)** 具备查询权限。若需授予普通用户查询该表的权限,需通过以下步骤操作(需以超级用户身份执行):一、确认表结构与权限现状
-
系统表路径
sys_tablespace位于sys模式下,完整名称为sys.sys_tablespace。 -
查看当前权限
-- 查看表权限(超级用户执行) SELECT * FROM information_schema.table_privileges WHERE table_schema = 'sys' AND table_name = 'sys_tablespace'; -- 查看模式权限(普通用户需USAGE权限才能访问sys模式) SELECT nspname, nspowner, pg_has_role(nspowner, CURRENT_USER, 'USAGE') AS has_usage FROM pg_namespace WHERE nspname = 'sys';
二、授予查询权限(推荐方案)
方案 1:直接授权系统表查询权限
-- 1. 授予sys模式的USAGE权限(若用户无此权限)
GRANT USAGE ON SCHEMA sys TO username;
-- 2. 授予sys_tablespace表的SELECT权限
GRANT SELECT ON sys.sys_tablespace TO username;
方案 2:通过信息模式视图查询(更安全)
KingbaseES 兼容 SQL 标准的
information_schema,可通过 tablespaces 视图间接查询表空间信息(权限要求更低):-- 直接查询信息模式视图(无需系统表权限)
SELECT * FROM information_schema.tablespaces;
-- 若视图权限不足,授予视图查询权限
GRANT SELECT ON information_schema.tablespaces TO username;
三、权限验证与测试
-
切换至普通用户验证
-- 连接数据库并执行查询 \connect - username -- 切换用户 SELECT * FROM sys.sys_tablespace LIMIT 5; -- 测试系统表查询 SELECT * FROM information_schema.tablespaces LIMIT 5; -- 测试视图查询 -
错误处理
- 若提示
permission denied for schema sys:需先执行GRANT USAGE ON SCHEMA sys TO username;。 - 若提示
permission denied for relation sys_tablespace:检查是否已授予SELECT权限。
- 若提示
四、注意事项
-
系统表操作风险
sys模式下的表存储核心元数据,不建议普通用户直接操作。若仅需查询表空间基本信息,优先使用information_schema.tablespaces视图。 -
权限最小化原则
- 避免授予
sys模式的ALL PRIVILEGES,仅按需授予USAGE和SELECT。 - 若需临时查询,可创建角色并设置过期时间:
CREATE ROLE temp_role WITH LOGIN PASSWORD 'xxx' VALID UNTIL '2025-12-31'; GRANT SELECT ON sys.sys_tablespace TO temp_role;
- 避免授予
-
审计与监控
可通过系统审计表sys.aud$监控用户对系统表的访问:SELECT * FROM sys.aud$ WHERE objname = 'sys_tablespace' AND username = 'xxx';
五、常见问题与解决方案
| 错误信息 | 原因分析 | 解决方案 |
|---|---|---|
permission denied for schema sys |
缺少模式 USAGE 权限 | GRANT USAGE ON SCHEMA sys TO username; |
insufficient privilege to query system catalog |
非超级用户访问系统表 | 使用信息模式视图或显式授予 SELECT 权限 |
relation "sys_tablespace" does not exist |
表名拼写错误 | 确认表名为 sys.sys_tablespace(非 sys.tablespace) |
总结
给普通用户授权查询
sys_tablespace 的核心步骤:- 授予
sys模式的USAGE权限; - 授予表
SELECT权限或改用information_schema视图; - 遵循权限最小化原则,避免直接操作系统表。
通过以上方法,既能满足查询需求,又能确保数据库系统安全。
浙公网安备 33010602011771号