适用版本:KES V8(不支持 ALL VIEWS 独立语法,ALL TABLES 包含表+视图 )
环境信息:
端口:19988
目标库:OS_Core、OS_Core_GPS
账号:dtselece,密码:Fllkl00@jkj984
一、前置说明
- 必须使用超级管理员账号(system)执行脚本
- KES V8 特性:
GRANT SELECT ON ALL TABLES同时授权【普通表 + 视图】,禁止单独写 ALL VIEWS,会报语法错误 - 脚本内
public为默认模式,业务如果使用自定义schema,全局替换为真实schema名 ALTER DEFAULT PRIVILEGES:控制后续新建对象自动赋予只读权限(可选,生产建议加上)
二、完整可直接执行SQL脚本
sql
-- ======================
-- 步骤1:创建登录用户
-- ======================
CREATE USER dtselece WITH PASSWORD 'Fllkl00@jkj984';
-- ======================
-- 步骤2:授予数据库连接权限
-- ======================
GRANT CONNECT ON DATABASE OS_Core TO dtselece;
GRANT CONNECT ON DATABASE OS_Core_GPS TO dtselece;
-- ======================
-- 步骤3:OS_Core 库权限分配
-- ======================
\c OS_Core
-- 允许访问schema
GRANT USAGE ON SCHEMA public TO dtselece;
-- 当前已有表、视图只读权限
GRANT SELECT ON ALL TABLES IN SCHEMA public TO dtselece;
-- 后续新建表/视图自动授予查询权限
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO dtselece;
-- 序列只读(仅查询,禁止nextval修改)
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO dtselece;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON SEQUENCES TO dtselece;
-- ======================
-- 步骤4:OS_Core_GPS 库权限分配
-- ======================
\c OS_Core_GPS
GRANT USAGE ON SCHEMA public TO dtselece;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO dtselece;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO dtselece;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO dtselece;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON SEQUENCES TO dtselece;
三、执行方式
方式1:ksql命令行执行
bash
ksql -p 19988 -U system -d OS_Core
# 粘贴上面全部SQL执行
注意:
\c 库名是ksql元命令,图形化工具(DBeaver/金仓管理工具)部分支持,若报错,分开连接不同数据库执行权限语句
方式2:图形工具兼容方案(规避\c切换库命令)
分两段执行:
- 连接
OS_Core执行OS_Core权限语句 - 重新连接
OS_Core_GPS执行GPS库权限语句
四、权限验证SQL(登录dtselece执行)
sql
-- 正常:返回数据
SELECT * FROM 任意表 LIMIT 1;
-- 正常:视图也能查询
SELECT * FROM 任意视图 LIMIT 1;
-- 预期报错:权限不足
INSERT INTO 任意表(字段) VALUES();
UPDATE 任意表 SET 字段='';
DELETE FROM 任意表;
五、运维备用脚本
1. 回收权限、删除账号(下线使用)
sql
REVOKE ALL ON DATABASE OS_Core FROM dtselece;
REVOKE ALL ON DATABASE OS_Core_GPS FROM dtselece;
DROP USER IF EXISTS dtselece;
2. 修改账号密码
sql
ALTER USER dtselece WITH PASSWORD '新密码';
六、安全加固(生产可选)
1. 访问IP限制
修改 data/pg_hba.conf,仅允许指定IP访问该账号
ini
# 示例:仅192.168.1.100可连接dtselece
host all dtselece 192.168.1.100/32 scram-sha-256
修改后重载配置:
sql
SELECT sys_reload_conf();
七、常见踩坑清单 ⚠️
- ❌ 错误写法(KES V8语法不支持)
sql
GRANT SELECT ON ALL VIEWS IN SCHEMA public TO dtselece;
✅ 正确:直接使用 ALL TABLES 包含视图
-
❌ 新建表无法查询
原因:未执行
ALTER DEFAULT PRIVILEGES,只会授权当前已存在的表 -
❌ 报schema访问拒绝
忘记执行
GRANT USAGE ON SCHEMA public TO dtselece; -
❌ 切换库命令
\c在部分GUI工具失效解决方案:分开连接数据库执行权限语句
八、连接串参考(应用测试)
jdbc:kingbase8://IP:19988/OS_Core?currentSchema=public
用户名:dtselece
密码:Fllkl00@jkj984
如果你需要,我可以再补充一份【多自定义Schema场景】的修改版本笔记。