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

68 阅读5分钟

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

南大通用 GBase 8c 数据库的权限管理机制清晰且灵活,旨在保障数据安全并支持精细化的访问控制。其核心主要包括默认权限机制、多种管理员角色、三权分立模式以及角色与用户管理。本文以特定实践场景为例,介绍GBase 8c权限管理的功能及配置方法。

1. 背景与目标

应用场景:某不同用户需要共享同一模式下的表,新建表时也希望自动继承访问权限。

问题:手动 GRANT 只能作用于已有对象,未来新建的表需要再次授权,容易遗漏。

解决思路:通过 ALTER DEFAULT PRIVILEGES 设置默认权限,确保未来对象自动继承权限。

目标:验证 ALTER DEFAULT PRIVILEGES 的双向授权效果,实现用户间表的互访。

2. 环境准备

2.1 环境信息

正常部署GBase 8c数据库集群后,创建testpri库,连接端口为15400。

数据库用户名为serceruser、clientuser

模式名为test_privileges

2.2 清理旧环境

-- 清理旧环境
gsql -r -d postgres -p 15400
clean connection to all force for database testgrant;
drop database if exists testgrant;
drop user if exists serveruser;
drop user if exists clientuser;

2.3 创建新环境

创建数据库

-- 创建新数据库
create database testgrant;

创建测试用户

-- 创建测试用户
create user serveruser with login password '********';
create user clientuser with login password '********';

3. 权限配置流程

在权限配置过程中,需要用到如下语法:

命令作用注意点
ALTER DEFAULT PRIVILEGES设置未来对象默认权限用户级别,需分别执行
GRANT ALL ON SCHEMA授予模式管理权限包含对象创建与删除
GRANT ALL ON ALL TABLES授予已有表权限仅对当前存在的表生效
SET search_path设置模式搜索路径影响对象创建和查询位置
clean connection清理数据库连接生产环境慎用

3.1 模式权限配置

GBase 8c数据库中,使用GRANT ALL ON SCHEMA 语法为模式进行权限配置,授予用户对模式的完全控制权,包含创建/修改/删除对象、注释、使用等权限。

\c testgrant
create schema test_privileges;
-- 授予模式所有权
grant all on schema test_privileges to serveruser;
grant all on schema test_privileges to clientuser;

3.2 已有表权限配置

GBase 8c数据库中,使用GRANT ALL ON ALL TABLES 语法为所有表进行权限配置,仅对现有表生效, 包含SELECT/INSERT/UPDATE/DELETE/TRUNCATE等权限。

-- 授予现有表权限
grant all on all tables in schema test_privileges to serveruser;
grant all on all tables in schema test_privileges to clientuser;

3.3 默认权限配置

GBase 8c数据库中,使用ALTER DEFAULT PRIVILEGES IN SCHEMA xxx GRANT ALL ON TABLES TO xxx ;语法修改默认权限配置。

说明

  • 仅影响执行命令的用户所建对象
  • 需在两个用户会话中分别执行
  • 确保未来新建表自动继承权限
-- serveruser用户执行赋权给clientuser
ALTER DEFAULT PRIVILEGES IN SCHEMA test_privileges 
GRANT ALL ON TABLES TO clientuser;
-- clientuser用户执行赋权给serveruser
ALTER DEFAULT PRIVILEGES IN SCHEMA test_privileges 
GRANT ALL ON TABLES TO serveruser;

4. 权限验证测试

4.1 serceruser 用户测试

  1. 切换到serceruser 用户会话,测试其权限,应支持表的创建和数据插入。对其他用户可见。

  2. 创建表 a1 并插入数据

  3. 预期结果:表成功创建并可插入,后续clientuser用户应能访问此表

     

    执行命令:

gsql -r -d testgrant -p 15400 -U serveruser -W "********"
set search_path = test_privileges;
-- 创建测试表
create table a1(username varchar(20));
insert into a1 values('serveruser');

4.2 clientuser 用户测试

  1. 跨用户访问表 a1
  2. 创建表 b1 并插入数据
  3. 预期结果:成功访问serveruser用户的表 a1,能新建表 b1,新建表应能被serveruser访问
gsql -r -d testgrant -p 15400 -U clientuser -W "********"
set search_path = test_privileges;
-- 跨用户访问测试
insert into a1 values('clientuser');
select * from a1;
-- 创建反向测试表
create table b1(username varchar(20));
insert into b1 values('clientuser');

4.3 双向访问验证

  1. serceruser 访问 b1
  2. 预期结果:双向插入和查询成功

5. 总结最佳实践及注意事项

在生产环境中,仍需结合最小权限原则进行合理的权限控制。建议权限管理应考虑以下几个方面:

  • 最小化授权:生产环境避免使用 ALL,根据业务需求细化到 SELECT/INSERT 等。
  • 定期权限审计:使用 \dp 检查当前权限分配情况。
  • 新用户维护:有新用户加入时需更新默认权限。
  • 模式隔离:不同业务独立使用模式,降低权限风险。
  • 密码策略:定期更换数据库用户密码。

注意事项

  • ALTER DEFAULT PRIVILEGES 只对执行命令的用户后续创建的对象生效。
  • 如果表在执行前已存在,需要额外执行 GRANT ALL ON TABLES。
  • 权限修改不会影响已创建的连接,可能需要重新登录。

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。