南大通用GBase 8s 数据库之环境变量NODEFDAC详解

在数据库的世界里,环境变量往往扮演着幕后英雄的角色。它们虽不显眼,却在背后默默影响着数据库的行为和性能。GBase 8s V8.8版本中,NODEFDAC环境变量便是这样一个存在。它看似简单,却能在非ANSI兼容的数据库中,对表的权限管理产生深远影响。今天,我们来探讨一下GBase 8s数据库中的一个关键环境变量——NODEFDAC,看看它是如何在数据安全领域发挥重要作用的。
在默认情况下,GBase 8s数据库在创建新表时,会自动授予PUBLIC角色默认的表访问权限,这包括了insert、delete、update、select和index等权限。这种设置在某些场景下虽然方便,但在涉及敏感数据或需要严格权限控制的环境中,却可能带来安全隐患。而NODEFDAC环境变量的出现,就是为了应对这种情况。
当我们将NODEFDAC环境变量设置为yes时,数据库服务器在创建新表时,将不再授予PUBLIC默认的表访问权限。这个小小的改变,却能为数据安全筑起一道坚固的防线。想象一下,在一个企业级数据库中,存储着大量客户的个人信息和交易记录。如果没有合理的权限控制,任何一个拥有数据库连接权限的用户,都可能轻易地访问甚至修改这些敏感数据,后果不堪设想。而通过设置NODEFDAC,我们可以在源头上限制这种无差别授权,确保只有经过明确授权的用户才能对表进行操作。
值得注意的是,NODEFDAC的设置非常讲究。它区分大小写,并且对前导和尾随空格敏感。这意味着,如果你不小心在设置时使用了大写字母,或者在yes前后添加了多余的空格,NODEFDAC将被视为未设置。这就好比是一把精细的锁,只有用正确的钥匙,才能打开它。因此,在实际操作中,运维人员必须格外小心,确保NODEFDAC的设置准确无误。
export NODEFDAC=yes
- yes 设置区分大小写,并且对前导和尾随空格敏感。
- 在设置中包含大写字母或空格相当于未设置 NODEFDAC。
- 当 NODEFDAC 未设置,或如果其设置为除 yes 之外的任何值,在非 ANSI 兼容的数据库中创建表,默认会向 PUBLIC 授予默认权限。
- 在 ANSI 兼容的数据库中启用 NODEFDAC 没有任何效果。
具体示例:
--gbasedbt用户建库建表
> create database testdac with log;
Database created.
> create table t1(id int);
Table created.
--缺省情况下PUBLIC对新建表的默认访问权限(insert,delete,update,select,index)
--并且,具有库级connect权限的用户自动获取“public”权限
> select * from systabauth where tabid=100;
grantor root
grantee public
tabid 100
tabauth su-idx---
1 row(s) retrieved.
--创建普通用户tmp_u_001
> create user tmp_u_001 with password 'GBase_123';
User created.
--赋予用户tmp_u_001对库testdac的connect权限
> grant connect to 'tmp_u_001';
Permission granted.
--tmp_u_001用户连接库
> connect to 'testdac@ol_tl3302_zm0519' user 'tmp_u_001';
ENTER PASSWORD:
Disconnected.
Connected.
--此时普通用户tmp_u_001已经可以对表t1进行操作
--(insert,delete,update,select,index)
> 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,不用重启数据库
# export NODEFDAC=yes
--gbasedbt用户建表t2
> 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环境变量或许只是一个小小的细节,但通过合理设置NODEFDAC,我们可以在非ANSI兼容的数据库环境中,有效地控制表的权限分配,防止不必要的数据访问和操作,从而为数据库的安全性筑牢防线。它或许不显眼,但却能在关键时刻发挥重要作用,成为我们守护数据安全的“隐形卫士”。作为数据库运维人员,我们应当深入了解每一个细节,熟练掌握每一个工具,用专业知识和技能,为数据安全保驾护航。
评论


热门帖子
- 12023-05-09浏览数:16814
- 22019-04-26浏览数:10235
- 32020-05-11浏览数:10142
- 42023-09-25浏览数:9543
- 52023-07-04浏览数:9445