暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8S 用户管理深入探究&逻辑上需要适应的地方

原创 evans liang 2023-05-30
868

本文就Gbase 8s 用户及权限管理深入探究,并且发现几个逻辑上需要适应的地方。

前期简单学习并记录了 gbase8s 用户管理和alter user 语法基本用法,本文就不再赘叙,直接进入干货。

初始测试环境如下:

操作系统版本:Redhat7

Gabase版本:GBase8sV8.8_AEE_3.3.0

sysuser是gbase自带的系统库。

lcuser是自己创建的库。

创建内部用户也叫lcuser

授权CONNECT、RESOURCE、DBA三个库级权限。

--系统用户

select 'SYSUSER' as db_name ,t.* from sysuser:sysusers t
union all
select 'LCUSER'as db_name ,s.* from sysusers s



--数据库内部用户
select * from sysuser:sysusermap ;


1、连接sysuser库创建test1

create user test1 with password '111111';   ---默认继承public权限

[gbasedbt@mytestdb1 ~]$ dbaccess sysuser - - 

Database selected.

> create user test1 with password '111111'; 

User created.

2、连接gbasedb 创建test2

create user test2 with password '111111';    --默认继承public权限

[gbasedbt@mytestdb1 ~]$ dbaccess gbasedb - - 

Database selected.

> create user test2 with password '111111';

User created.

此时,GDS 客户端使用test1和test2用户测试登录lcuser库应该是无法登录的,提示无connect 权限。


3、grant connect to public; 授权public 组 connect 库级权限 

GDS 客户端使用test1和test2.测试登录lcuser库正常。


ps1: 第一个逻辑上需要适应的地方出现了,赋权给public组connect权限,敲成punlic了,结果明明没有punlic 这个组或者角色。竟然能赋权成功,但是只是显示,并没实际创建?

.

GDS 客户端使用test1和test2用户测试登录lcuser库正常。

然后执行查系统用户的语句,多出来2条记录。如图红框位置。

执行grant connect  以后,在lcuser 库出现一个用户public拥有 connect 权限。以及punlic拥有 connect 权限

 <-_->



4、因为public拥有connect权限。此时test1和test2 都正常连接数据库。但是sysusers表却查询不到test1和test2


5、lcuser 库 下lcuser用户登录执行GRANT CONNECT TO test1; 进行显式赋权。lcuser库sysusers表才可以看到tets1。


6、lcuser 库 下lcuser用户登录,执行drop user test1;

ps2: 第二个逻辑上需要适应的地方出现了, 正常用户已经drop掉。sysusers表里应该不存在。但是执行drop 后,lcuser 库的sysusers表test1用户仍然存在 


7、执行revoke connect from public; 

取消授权以后。sysuser表才会删除掉test1 这个记录。

8、查询当前库有哪些角色及库级权限。

select username,
CASE
WHEN usertype = "D" THEN "DBA"
WHEN usertype = "C" THEN "connect"
WHEN usertype = "R" THEN "Resource"
WHEN usertype = "G" THEN "Role"
WHEN usertype = "U" THEN "Default role"
ELSE NULL
END
FROM sysusers where usertype !="G"
union
SELECT b.grantee as username,a.username as role
from sysusers A,sysroleauth B
where A.username=b.rolename 

ps3: 第三个逻辑上需要适应的地方出现了,  本来语句想要用as 子句当别名,结果发现as 后面不允许带双引号

如下, 查询的字段加上双引号,出来的结果就按照常量处理了。


查询字段不加双引号才行


其次,as 重命名的字段名称,也不可以加双引号,如图:


经过测试,环境变量添加DELIMIDENT后,查询的字段才可以添加双引号。同时 as 后面重命名的字段也可加双引号。


但是重命名as 后跟汉字+双引号的,还需要研究实现方法。


9、想要查询数据库用户状态。理论上是

select username,userstate from sysuser:sysuserext;

但是,查询是空表。查找文档,应该需要开启安全功能。

Gbase8s提供和支持的安全功能包括:身份认证与鉴别、数据加密存储、自主访问控制、安全标记、强制访问控制、数据完整性保护、安全审计、三权分立等.

这部分学习我开启安全功能以后,再进行记录。



   


最后修改时间:2023-06-02 15:30:49
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论