本文就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提供和支持的安全功能包括:身份认证与鉴别、数据加密存储、自主访问控制、安全标记、强制访问控制、数据完整性保护、安全审计、三权分立等.
这部分学习我开启安全功能以后,再进行记录。





