南大通用GBase 8c数据库权限管理场景实践

原文链接:www.gbase.cn/community/p...

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

环境要求

项目 参数
目标数据库 turboex
数据库端口 15400
测试用户 turboserver / turbolog
测试模式 test_privileges

环境准备

sql 复制代码
-- 清理旧环境

gsql -r -d postgres -p 15400

clean connection to all force for database turboex;

drop database if exists turboex;

drop user if exists turboserver;

drop user if exists turbolog;

-- 创建新数据库

create database turboex;

-- 创建测试用户

create user turboserver with login password 'turboserver@123';

create user turbolog with login password 'turbolog@123';
​

权限配置流程

1.模式权限配置

sql 复制代码
\c turboex

create schema test_privileges;

-- 授予模式所有权

grant all on schema test_privileges to turboserver;

grant all on schema test_privileges to turbolog;
​

作用说明:GRANT ALL ON SCHEMA 授予用户对模式的完全控制权,包含创建/修改/删除对象、注释、使用等权限,用户可在模式下自由操作各类数据库对象,无需额外申请基础操作权限。

2.表权限配置

sql 复制代码
-- 授予现有表权限

grant all on all tables in schema test_privileges to turboserver;

grant all on all tables in schema test_privileges to turbolog;
​

注意事项:仅对已存在的表生效,包含 SELECT/INSERT/UPDATE/DELETE/TRUNCATE 等完整数据操作权限,若后续在模式中新建表,此权限配置不会自动应用到新表上。

3.默认权限配置

sql 复制代码
-- turboserver用户会话

ALTER DEFAULT PRIVILEGES IN SCHEMA test_privileges

GRANT ALL ON TABLES TO turbolog;

-- turbolog用户会话

ALTER DEFAULT PRIVILEGES IN SCHEMA test_privileges

GRANT ALL ON TABLES TO turboserver;
​

核心作用:自动授予未来新建表的权限,仅影响执行该语句用户创建的对象,因此需要分别在两个用户会话中执行,确保 turboserver 创建的新表自动对 turbolog 开放权限,turbolog 创建的新表也自动对 turboserver 开放权限。

权限验证测试

turboserver 用户测试

  • 成功创建表并插入数据:使用 turboserver 用户登录数据库,切换至 test_privileges 模式,执行 CREATE TABLE 语句创建测试表(如 CREATE TABLE test_tb(id INT, name VARCHAR(50));),随后执行 INSERT 语句插入测试数据(如 INSERT INTO test_tb VALUES(1,'testdata');),验证表创建和数据插入操作无权限报错。
  • 后续 turbolog 用户应能访问此表:切换至 turbolog 用户登录数据库,执行 SELECT * FROM test_privileges.test_tb; 语句,验证可正常查询到 turboserver 插入的数据,无权限拒绝提示。

turbolog 用户测试

  • 成功访问 turboserver 用户的表:登录 turbolog 用户,对 turboserver 创建的 test_tb 执行 SELECT、INSERT、UPDATE、DELETE 等操作,验证所有数据操作均可正常执行,无权限限制。
  • 新建表应能被 turboserver 访问:使用 turbolog 用户在 test_privileges 模式下创建新表(如 CREATE TABLE test_tb2(id INT, value INT);),插入测试数据后,切换至 turboserver 用户,执行查询操作验证可正常访问该表数据。

双向权限验证

  • 双向 DML 操作成功:turboserver 用户对 turbolog 创建的表执行 INSERT/UPDATE/DELETE 操作,turbolog 用户对 turboserver 创建的表执行相同操作,验证所有操作均无权限报错,数据修改结果符合预期。
  • 双向数据可见性正常:双方用户均能实时看到对方对表进行的数据修改,执行查询语句返回的结果为最新数据状态,无数据访问延迟或权限导致的不可见问题。

关键命令解析

命令 作用 注意点
ALTER DEFAULT PRIVILEGES 设置未来对象的默认权限,指定用户在特定模式下新建对象时,自动将权限授予目标用户 用户级配置,需分别在不同用户会话中执行,仅对执行用户后续创建的对象生效,不影响已存在的对象
GRANT ALL ON SCHEMA 授予用户对模式的完全管理权限,包含模式内对象的创建、修改、删除及使用权限 包含创建/删除对象权限,授予后用户可自由管理模式内的各类数据库对象,需谨慎授予
set search_path 设置模式搜索路径,指定数据库查找对象时的模式优先级,影响对象创建和查询的默认位置 若未设置,默认查找 public 模式,建议在用户登录后配置对应的模式搜索路径,避免对象创建位置错误
clean connection 清理数据库的所有连接,强制断开当前数据库的活跃会话 生产环境慎用,可能导致正在执行的业务事务中断,仅在测试环境清理旧环境时使用

最佳实践建议

  • 权限最小化原则 :生产环境建议细化权限分配,避免直接授予 ALL 权限,根据用户实际业务需求授予必要权限,如仅授予查询用户 SELECT 权限,授予数据录入用户 INSERT/UPDATE 权限,降低权限滥用风险。
  • 定期权限审计 :使用 \dp 命令查看权限分配情况,定期审计数据库用户的权限配置,及时回收不再需要的权限,清理冗余权限,确保权限配置符合业务安全要求。
  • 默认权限维护 :新用户加入时需更新默认权限配置,针对新用户执行 ALTER DEFAULT PRIVILEGES 语句,确保新用户能自动获得后续新建对象的必要权限,同时避免过度授权。
  • 模式隔离:不同业务使用独立模式进行权限隔离,将不同业务线的数据库对象划分到独立模式中,针对不同模式配置独立的权限策略,降低业务间权限交叉风险,提升数据安全性。
  • ​密码策略​:建议定期轮换数据库密码,设置复杂的密码规则(如包含大小写字母、数字、特殊字符),避免使用弱密码,同时配置密码过期时间,提升用户账号安全性。

原文链接:www.gbase.cn/community/p...

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

相关推荐
八月瓜科技3 小时前
擎策·知海全球专利数据库 专业专利检索赋能 规避无效研发提效创新
大数据·数据库·人工智能·科技·aigc
2401_833197733 小时前
更优雅的测试:Pytest框架入门
jvm·数据库·python
倔强的石头_3 小时前
Oracle 迁移 TCO 深度拆解:从隐性运维成本陷阱到全栈工具链破局
数据库
2501_924952693 小时前
Python深度学习入门:TensorFlow 2.0/Keras实战
jvm·数据库·python
2401_891482173 小时前
Python多线程与多进程:如何选择?(GIL全局解释器锁详解)
jvm·数据库·python
Predestination王瀞潞3 小时前
6.3.1 软件->W3C XPath 1.0 标准(W3C Recommendation):XPath(XML Path Language)查询语言
xml·数据库·oracle
2401_851272993 小时前
用Python实现自动化的Web测试(Selenium)
jvm·数据库·python
快乐柠檬不快乐4 小时前
Java连接电科金仓数据库(KingbaseES)实战指南
java·开发语言·数据库
AllData公司负责人4 小时前
AllData数据中台通过集成DolphinScheduler+Seatunnel实现SAP HANA数据库同步到Doris数据仓库
数据库·数据仓库·sap hana