GBase 8s V8.8 运维管理:认识一个环境变量NODEFDAC
在数据库运维管理中,权限控制是保障数据安全的重要环节。今天我们来介绍GBase 8s(gbase database)中一个实用的环境变量——NODEFDAC,它可以帮助我们精细控制新建表的默认访问权限。
在非ANSI兼容的数据库中,通过设置NODEFDAC环境变量为yes,数据库服务器会在创建新表时,不授予PUBLIC默认的表访问权限。
export NODEFDAC=yes
关键注意事项:
- yes 设置区分大小写,并且对前导和尾随空格敏感
- 设置中包含大写字母或空格相当于未设置NODEFDAC
- 当NODEFDAC未设置,或设置为除 yes 之外的任何值,在非ANSI兼容的数据库中创建表,默认会向PUBLIC授予默认权限
- 在ANSI兼容的数据库中启用NODEFDAC没有任何效果
实际演示
场景一:默认行为(未设置NODEFDAC)
-- gbasedbt用户建库建表
> create database testdac with log;
Database created.
> create table t1(id int);
Table created.
-- 查看缺省情况下PUBLIC对新建表的默认访问权限
-- (insert, delete, update, select, index)
> select * from systabauth where tabid=100;
grantor root
grantee public
tabid 100
tabauth su-idx----
1 row(s) retrieved.
创建普通用户并赋予库级connect权限:
> create user tmp_u_001 with password 'GBase_123';
User created.
> grant connect to 'tmp_u_001';
Permission granted.
tmp_u_001用户连接后,自动获得对t1表的PUBLIC权限,可以正常操作:
> connect to 'testdac@ol_tl3302_zm0519' user 'tmp_u_001';
ENTER PASSWORD:
Disconnected.
Connected.
> select * from t1;
id
No rows found.
> insert into t1 values(1);
1 row(s) inserted.
> update t1 set id=2;
1 row(s) updated.
场景二:设置NODEFDAC=yes后
# 设置环境变量,无需重启数据库
export NODEFDAC=yes
> database testdac;
Database selected.
> create table t2(id int);
Table created.
-- 查看权限,t2表没有缺省权限了
> select * from systabauth where tabid>99;
grantor root
grantee public
tabid 100 -- 这里的100是上面的t1表
tabauth su-idx----
1 row(s) retrieved.
tmp_u_001用户对t2表无任何权限,操作被拒绝:
> connect to 'testdac@ol_tl3302_zm0519' user 'tmp_u_001';
ENTER PASSWORD:
Disconnected.
Connected.
> select * from t2;
272: No SELECT permission for t2.
Error in line 1
Near character position 16
> insert into t2 values(1);
275: The Insert privilege is required for this operation.
Error in line 1
Near character position 16
> delete from t2;
274: No DELETE permission for t2.
Error in line 1
Near character position 14
> update t2 set id=1;
273: No UPDATE permission for t2.
Error in line 1
Near character position 11
NODEFDAC环境变量是GBase 8s中一个简单但实用的权限控制开关。对于需要严格数据访问控制的场景,建议在数据库服务器环境中配置 export NODEFDAC=yes ,避免新建表自动向PUBLIC开放权限,从而提升数据库的安全性。运维人员可根据实际业务需求灵活选用。欢迎访问南大通用技术社区,获取更多GBase 8s技术文章与最佳实践!
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)