news 2026/5/30 19:11:29

电科金仓KingbaseES数据库用户管理与权限控制安全实践指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
电科金仓KingbaseES数据库用户管理与权限控制安全实践指南

一、概述

电科金仓数据库(KingbaseES)在用户管理和授权方面提供了完善的安全机制。本文将深入探讨KingbaseES在用户管理、权限控制、身份验证等方面的安全特性,为数据库管理员提供实用的操作指南。

二、用户与角色管理体系

2.1 用户类型

KingbaseES支持两种类型的用户:

特权用户

数据库初始化后自动创建三个特权用户:

  • 数据库管理员(system): 拥有超级用户权限,负责数据库日常管理和自主存取控制
  • 安全管理员(sso): 负责强制访问规则制定和管理,监督审计管理员和普通用户
  • 审计管理员(sao): 负责数据库审计,监督数据库管理员和安全管理员

普通用户

通过CREATE USER语句创建的用户,用于访问数据库和运行应用程序。普通用户被授予superuser权限后将成为超级用户。

2.2 三权分立机制

KingbaseES安全版本实现了三权分立的安全管理机制,参照行政、立法、司法三权分立原则设计,解决了数据库超级用户权力过度集中的问题。

基础功能

三个管理员只能在各自权限范围内创建和维护用户:

  • 数据库管理员不能创建或修改安全员和审计员
  • 安全管理员只能创建和修改安全员
  • 审计管理员只能创建和修改审计员

特权用户职责划分

用户类型主要职责审计约束安全约束
数据库管理员(system)数据库日常管理和自主存取控制不支持修改审计参数、定义审计策略、查看审计记录不支持安全功能操作
安全管理员(sso)强制访问规则制定和管理支持设置审计策略、查看审计记录支持开启安全开关、设置安全策略
审计管理员(sao)数据库审计支持开启审计参数、设置审计策略、查看审计记录不支持安全功能操作

实现方式

通过sepapower插件实现三权分立功能,该插件在数据库启动时默认加载:

-- 查看插件状态\c-systemCREATEEXTENSION sepapower;-- 配置由sso用户控制DCL(需要时)ALTERSYSTEMSETsepapower.separate_power_grant=on;SELECTsys_reload_conf();

2.3 用户管理操作

创建用户

-- 创建普通用户CREATEUSERtestWITHPASSWORD'123456';-- 创建用户并设置资源限制CREATEUSERuser1WITHPASSWORD'12345678ab'CONNECTIONLIMIT100VALID UNTIL'2026-12-31'CONNECTION INTERVALS'09:00:00 TO 18:00:00';

修改用户

-- 修改密码ALTERUSERtest PASSWORD'新密码123';-- 修改连接限制ALTERUSERtest CONNECTIONLIMIT1000;-- 设置用户为只读状态CALLalteruserreadonly('test','user1',true);

删除用户

-- 终止用户会话SELECTsys_terminate_backend('PID');-- 删除用户对象DROPOWNEDBYuser1CASCADE;-- 删除用户DROPUSERuser1;

三、口令安全管理

3.1 口令加密认证

KingbaseES支持多种口令加密算法:

  • scram-sha-256: 默认算法,基于RFC 7677的挑战-响应方案
  • sm3: 国密散列函数标准(GM/T0004-2012)
  • scram-sm3: 国密算法的scram身份认证
  • sm4: 基于GM/T 0091-2020标准的加密认证

配置口令加密算法:

-- 在kingbase.conf中设置password_encryption='scram-sha-256'-- 重启数据库后生效

3.2 口令复杂度管理

通过passwordcheck插件实现口令复杂度检查:

-- 加载插件-- 在kingbase.conf中配置shared_preload_libraries='passwordcheck'-- 重启数据库后创建扩展CREATEEXTENSION passwordcheck;-- 配置复杂度参数(由sso用户操作)\c-ssoALTERSYSTEMSETpasswordcheck.enable=on;ALTERSYSTEMSETpasswordcheck.password_length=10;ALTERSYSTEMSETpasswordcheck.password_condition_letter=3;ALTERSYSTEMSETpasswordcheck.password_condition_digit=3;ALTERSYSTEMSETpasswordcheck.password_condition_punct=2;SELECTsys_reload_conf();

复杂度参数说明

参数取值范围默认值描述
passwordcheck.enabletrue/falsefalse复杂度功能开关
passwordcheck.password_length[8,63]8密码最小长度
passwordcheck.password_condition_letter[2,61]2最少包含字母数
passwordcheck.password_condition_digit[2,61]2最少包含数字数
passwordcheck.password_condition_punct[0,59]0最少包含特殊字符数

3.3 口令有效期管理

通过identity_pwdexp插件实现口令过期检查:

-- 加载插件shared_preload_libraries='identity_pwdexp'-- 创建扩展CREATEEXTENSION identity_pwdexp;-- 配置有效期(由sso用户操作)\c-ssoALTERSYSTEMSETidentity_pwdexp.password_change_interval=90;ALTERSYSTEMSETidentity_pwdexp.max_password_change_interval=180;SELECTsys_reload_conf();

3.4 口令历史管理

防止用户重复使用近期密码:

-- 加载插件shared_preload_libraries='passwordhistory'-- 创建扩展并配置CREATEEXTENSION passwordhistory;\c-systemALTERSYSTEMSETpasswordhistory.enable=on;ALTERSYSTEMSETpasswordhistory.password_time=90;-- 90天内不能重复SELECTsys_reload_conf();

3.5 账户异常登录锁定

通过sys_audlog插件实现账户锁定功能:

-- 加载插件shared_preload_libraries='sys_audlog'-- 创建扩展CREATEEXTENSION sys_audlog;-- 配置锁定策略(由sso用户操作)\c-ssoALTERSYSTEMSETsys_audlog.max_error_user_connect_times=10;ALTERSYSTEMSETsys_audlog.error_user_connect_times=5;-- 连续失败5次锁定ALTERSYSTEMSETsys_audlog.error_user_connect_interval=30;-- 锁定30分钟SELECTsys_reload_conf();-- 手动解锁用户ALTERUSERusernameWITHLOGIN;

四、权限管理体系

4.1 系统特权

基本系统特权

  • SUPERUSER: 超级用户权限,可绕过所有权限检查
  • CREATEDB: 创建数据库权限
  • CREATEROLE: 创建角色权限
  • LOGIN: 登录数据库权限
  • REPLICATION: 流复制权限
  • BYPASSRLS: 绕过行级安全策略权限

系统ANY权限

通过sysprivilege插件实现,允许用户对某类对象执行特定操作:

-- 加载插件shared_preload_libraries='sysprivilege'CREATEEXTENSION sysprivilege;-- 授予ANY权限GRANTSELECTANYTABLETOuser1;GRANTCREATEANYTABLETOuser1;GRANTEXECUTEANYPROCEDURETOuser1;-- 查询ANY权限SELECT*FROMuser_any_privs;-- 撤销ANY权限REVOKESELECTANYTABLEFROMuser1;

常用ANY权限类型

权限名称描述
CREATE ANY TABLE在任何模式下创建表
ALTER ANY TABLE修改任何模式下的表
SELECT ANY TABLE查询任何模式下的表
INSERT ANY TABLE向任何表插入数据
EXECUTE ANY PROCEDURE执行任何存储过程
DUMP ANY TABLE导出任何有SELECT权限的表

4.2 对象权限

主要对象权限类型

  • SELECT: 查询权限
  • INSERT: 插入权限
  • UPDATE: 更新权限
  • DELETE: 删除权限
  • TRUNCATE: 清空表权限
  • REFERENCES: 创建外键约束权限
  • TRIGGER: 创建触发器权限
  • EXECUTE: 执行函数/过程权限

授予对象权限

-- 授予表权限GRANTSELECT,INSERT,UPDATEONordersTOuser1;-- 授予列级权限GRANTINSERT(orderid,orderdate)ONordersTOuser1;-- 授予所有权限GRANTALLPRIVILEGESONordersTOuser1WITHGRANTOPTION;-- 授予视图权限GRANTSELECTONorder_viewTOuser1;-- 授予存储过程权限GRANTEXECUTEONPROCEDUREproc_nameTOuser1;

撤销对象权限

-- 撤销表权限REVOKEINSERT,UPDATEONordersFROMuser1;-- 撤销列级权限REVOKEINSERT(orderid,orderdate)ONordersFROMuser1;-- 级联撤销REVOKESELECTONordersFROMuser1CASCADE;

4.3 角色管理

创建和管理角色

-- 创建角色CREATEROLE app_role;-- 授予权限给角色GRANTSELECT,INSERTONordersTOapp_role;GRANTEXECUTEONPROCEDUREproc1TOapp_role;-- 将角色授予用户GRANTapp_roleTOuser1,user2;-- 设置默认角色ALTERUSERuser1DEFAULTROLE app_role;-- 切换当前角色SETROLE app_role;-- 查看当前角色SELECTSESSION_USER,CURRENT_USER;

角色启用和禁用

通过roledisable插件实现:

-- 加载插件shared_preload_libraries='roledisable'CREATEEXTENSION roledisable;-- 禁用角色ALTERROLE role1DISABLE;-- 启用角色ALTERROLE role1ENABLE;-- 查看角色状态SELECT*FROMroledisable.sys_role_status;

五、身份验证机制

5.1 客户端认证配置

通过sys_hba.conf文件配置客户端认证规则:

# TYPE DATABASE USER ADDRESS METHOD # 本地连接使用trust local all all trust # IPv4本地连接使用scram-sha-256 host all all 127.0.0.1/32 scram-sha-256 # IPv6本地连接 host all all ::1/128 scram-sha-256 # 允许特定网段使用sm3认证 host all all 192.168.1.0/24 sm3

5.2 来源限制

通过src_restrict插件实现基于IP、MAC、时间段的访问控制:

-- 插件默认加载,配置开关ALTERSYSTEMSETsrc_restrict.enable=on;SELECTsys_reload_conf();-- 添加白名单规则SELECTsrc_restrict.add_rules(0,-- 0为白名单,1为黑名单'user1','192.168.1.*','','ip_range=192.168.1.10~192.168.1.100;time_range=20260101-08:00:00~20261231-18:00:00');-- 添加黑名单规则SELECTsrc_restrict.add_rules(1,'user2','10.0.0.*','','mac=aa:bb:cc:dd:ee:ff');-- 查看规则SELECT*FROMsrc_restrict.show_rules;-- 删除规则SELECTsrc_restrict.remove_rules(0,'user1','192.168.1.*','...');

5.3 弱口令扫描

通过security_utils插件实现弱口令检查和扫描:

-- 加载插件shared_preload_libraries='security_utils'CREATEEXTENSION security_utilsCASCADE;-- 开启弱口令检查ALTERSYSTEMSETsecurity_utils.weak_pwd_check_enable=on;SELECTsys_reload_conf();-- 配置弱口令字典SETWEAK PASSWORD'123456','password','admin123';-- 执行弱口令扫描SELECT*FROMsecurity_utils.weak_passwd_scan_result;-- 删除弱口令字典REMOVE WEAK PASSWORDIFEXISTS'123456','password';

六、高级安全特性

6.1 受限DBA

通过restricted_dba插件限制DBA权限:

-- 加载插件shared_preload_libraries='restricted_dba, sepapower'CREATEEXTENSION restricted_dba;-- 由sso用户开启受限DBA\c-ssoALTERSYSTEMSETrestricted_dba.restricted_enable=true;SELECTsys_reload_conf();

开启后,DBA将不能读取、更改和执行不属于他的对象。

6.2 数据导出控制

控制用户导出数据的权限:

-- 开启导出控制ALTERSYSTEMSETenable_allowdump=on;SELECTsys_reload_conf();-- 授予表导出权限GRANTDUMPTABLEONtable1TOuser1;-- 授予全局导出权限GRANTDUMPANYTABLETOuser1;-- 撤销导出权限REVOKEDUMPTABLEONtable1FROMuser1;REVOKEDUMPANYTABLEFROMuser1;

6.3 空闲自动断开

配置客户端空闲超时:

-- 设置当前会话空闲5分钟断开SETclient_idle_timeout=300;-- 设置全局空闲30分钟断开ALTERSYSTEMSETclient_idle_timeout=1800;SELECTsys_reload_conf();-- 关闭功能ALTERSYSTEMSETclient_idle_timeout=0;

七、权限查询与审计

7.1 查询用户权限

-- 查询所有用户信息SELECT*FROMsys_user;-- 查询用户的系统特权SELECTusename,usecreatedb,usesuper,usereplFROMsys_userWHEREusename='user1';-- 查询用户的对象权限SELECT*FROMDBA_TAB_PRIVSWHEREgrantee='user1';-- 查询用户的ANY权限SELECT*FROMuser_any_privs;-- 查询当前会话信息SELECTSESSION_USER,CURRENT_USER;

7.2 查询角色信息

-- 查询所有角色SELECT*FROMsys_roles;-- 查询角色成员关系SELECTrolname,memberFROMsys_auth_membersWHERErolname='app_role';-- 查询角色状态SELECT*FROMroledisable.sys_role_status;

7.3 账户登录信息

-- 查询当前用户登录信息SELECT*FROMsys_audlog.sys_user_audit_userlog;-- 删除30天前的登录信息SELECTsys_audlog.sys_del_user_logonlog_before_days(30);-- 删除指定IP的登录信息SELECTsys_audlog.sys_del_user_logonlog_by_ip('192.168.1.100');-- 删除指定用户的登录信息SELECTsys_audlog.sys_del_user_logonlog_by_name('user1');

八、总结

电科金仓数据库在用户管理和授权方面提供了完善的安全机制,包括:

  • 完善的用户体系: 支持特权用户和普通用户,实现三权分立
  • 多层次权限控制: 系统特权、对象权限、列级权限的细粒度控制
  • 强大的口令管理: 复杂度检查、有效期管理、历史管理、异常锁定
  • 灵活的身份验证: 支持多种加密算法和认证方式
  • 精细的访问控制: IP、MAC、时间段等多维度限制
  • 丰富的安全插件: 通过插件扩展实现各类安全功能

通过合理配置和使用这些安全特性,可以构建一个安全可靠的数据库访问控制体系,满足各类应用场景的安全需求。数据库管理员应根据实际业务需求和安全要求,选择合适的安全策略并严格执行,确保数据库系统的安全性和合规性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 16:15:25

5分钟上手WarcraftHelper:魔兽争霸III终极优化解决方案

5分钟上手WarcraftHelper:魔兽争霸III终极优化解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典游戏《魔兽争霸III》在现…

作者头像 李华
网站建设 2026/5/30 16:16:26

终极WeMod专业版免费解锁教程:3分钟获取完整高级功能

终极WeMod专业版免费解锁教程:3分钟获取完整高级功能 【免费下载链接】Wemod-Patcher WeMod patcher allows you to get some WeMod Pro features absolutely free 项目地址: https://gitcode.com/gh_mirrors/we/Wemod-Patcher 还在为WeMod专业版的高昂订阅费…

作者头像 李华
网站建设 2026/5/30 16:15:27

构建‘喜马拉雅有声书制作平台’批量调用IndexTTS生成章节

构建“喜马拉雅有声书制作平台”:批量调用 IndexTTS 实现高效章节生成 在内容为王的时代,音频正成为人们获取信息的新入口。无论是通勤途中、睡前放松,还是学习陪伴,越来越多用户选择“听”来消费知识与故事。据艾媒咨询数据&…

作者头像 李华
网站建设 2026/5/30 16:16:45

Three.js项目保姆级教程分享,从零搭建小米SU7三维汽车

文字版教程: Three.js搭建小米SU7三维汽车实战(1)搭建开发环境 Three.js搭建小米SU7三维汽车实战(2)场景搭建 Three.js搭建小米SU7三维汽车实战(3)轨道控制器 Three.js搭建小米SU7三维汽车实…

作者头像 李华
网站建设 2026/5/22 4:41:23

魔兽争霸III Windows 11兼容性修复终极指南:完整解决方案

魔兽争霸III Windows 11兼容性修复终极指南:完整解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在Windows 11系…

作者头像 李华
网站建设 2026/5/20 18:53:09

如何快速掌握Sunshine:游戏串流平台的完整指南

如何快速掌握Sunshine:游戏串流平台的完整指南 【免费下载链接】Sunshine Sunshine: Sunshine是一个自托管的游戏流媒体服务器,支持通过Moonlight在各种设备上进行低延迟的游戏串流。 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine …

作者头像 李华