原文链接: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技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。