GBase 8s
其他
文章

南大通用GBase 8s V8.8 运维管理:认识一个环境变量NODEFDAC

发表于2026-06-04 16:58:10155次浏览14个评论

在数据库运维管理中,权限控制是保障数据安全的重要环节。今天我们来介绍GBase 8s中一个实用的环境变量——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技术文章与最佳实践!

评论

登录后才可以发表评论
GBase用户50900发表于 2个月前
总结得很到位,学习。
GBase用户51966发表于 2个月前
不错的文章,受益匪浅。
GBase用户51511发表于 2个月前
写得真不错,赞一个!
GBase用户51510发表于 2个月前
总结得很到位,学习。
一个老汉发表于 2个月前
不错的文章,受益匪浅。
塔山发表于 2个月前
分析得很透彻,学习了。
佛洛伊得发表于 2个月前
写得很好,学习了!
用户头像
XX发表于 2个月前
感谢分享
用户头像
mittens发表于 1个月前
图文并茂,赞。
GBase用户19279发表于 1个月前
受益匪浅,学习了
GBase用户19279发表于 1个月前
可以做个系列介绍
GBase用户19279发表于 1个月前
每天都来学习!
用户头像
路路路发表于 1个月前
感谢支持
gbase0001发表于 1个月前
涨知识,学习