Gbase8s 允许内置用户创建用户以及创建只读权限用户以及利用角色管理普通用户权限
普通安装实例创建数据库以后,DBA权限只有gbasedbt用户。gbasdbt可以创建普通用户,并且给普通用户赋予库及权限或者表级权限。
但是gbasedbt用户口令和操作系统相关,所以想在不提供gbasedbt的默认用户的前提下,创建一个A纳管用户,通过赋权来统一管理该实例下所有库/用户/DML/DDL操作(类似Oracle创建一个DBA角色的普通用户)。
----创建的普通用户可赋予库级权限:DBA、RESOURCE、CONNECT。详细的创建用户见另一文章:《gbase8s 用户管理和alter user 语法》。
接下来进入主题:
一、创建4A纳管用户:数据库启用ADMIN用户
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
默认创建的用户,赋权DBA库级权限也仅对库级别操作,如果想使用纳管用户创建普通用户是会报错的。所以需要先开启ADMIN参数,允许其他DBA用户拥有ADMIN权限。
#修改参数
ADMIN_USER_MODE_WITH_DBSA 1 ##该参数是静态参数,需要重启数据库
ADMIN_MODE_USERS manage_4a,manage_4b ##该参数是动态,在线修改即可,如需多个用户,逗号分割即可
dbaccess - -
CREATE USER manage_4a WITH PASSWORD 'Gbase_8s';
修改密码:
alter user manage_4a modify password 'Gbase_8s';
--evansdb 数据库内执行:
dbaccess evansdb -
>alter user manage_4a add AUTHORIZATION (DBSA);
>grant connect to manage_4a ;
>grant dba to manage_4a ;
>grant resource to manage_4a ;
#执行该命令后,即可使用manage_4a连接数据库创建用户create user .......
二、4A纳管赋权规划:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1、程序账号:connect、resource、dba
2、只读用户: 赋权connect +后台数据库执行脚本(因默认创建的普通用户赋权connect权限后,即拥有对该库所有表的增删改查权限)
3、需要dml操作权限:
应用管理(甲方客户 dml权限):赋权connect + role_jf_yygl +后台数据库执行脚本
应用维护(乙方运维 dml权限):赋权connect + role_yw_yywh +后台数据库执行脚本
4、ddl+dml 操作权限:
数据管理(甲方客户 ddl+dml):赋权connect + role_jf_sjgl +后台数据库执行脚本
数据维护(乙方运维 ddl+dml):赋权connect + role_yw_sjwh +后台数据库执行脚本
5、DBA操作权限:
应用管理员(甲方客户dba):赋权connect +resource + dba (谨慎,非必要不给)
数据管理员(乙方运维dba):赋权connect +resource +dba (谨慎,非必要不给)
三、后台数据库执行脚本
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
select * from sysusers;# 获取所有用户角色
CREATE ROLE role_jf_yygl ;
CREATE ROLE role_jf_sjgl ;
CREATE ROLE role_yw_yywh ;
CREATE ROLE role_yw_sjwh ;
1、取消public 对所有表的权限:
SELECT 'revoke all on '||tabname ||' from public as '||owner||' ;' FROM systables WHERE tabid > 99 AND tabtype = 'T';
#执行生成的脚本:取消public 对所有表的所有权限:
2、只读权限赋权:
SELECT 'grant select on '||tabname ||' to public as '||owner||' ;' FROM systables WHERE tabid > 99 AND tabtype = 'T';
#执行生成的脚本:赋权public 只拥有select 权限,这样新添加的用户赋权connect后只有select权限。
3、对 role_jf_yygl(甲方客户)和 role_yw_yywh (乙方运维)角色 赋权dml权限:
# 执行拼sql 生成的脚本:用于赋权dml权限给角色。
SELECT 'grant select,update,delete,insert on '||tabname ||' to role_jf_yygl as '||owner||' ;' FROM systables WHERE tabid > 99 AND tabtype = 'T';
SELECT 'grant select,update,delete,insert on '||tabname ||' to role_yw_yywh as '||owner||' ;' FROM systables WHERE tabid > 99 AND tabtype = 'T';
4、对 role_jf_sjgl(甲方客户)和 role_yw_sjwh (乙方运维)角色 赋权dml+ddl权限:
# 执行拼sql 生成的脚本:用于赋权dml+ddl权限给角色。
SELECT 'grant all on '||tabname ||' to role_jf_sjgl as '||owner||' ;' FROM systables WHERE tabid > 99 AND tabtype = 'T';
SELECT 'grant all on '||tabname ||' to role_yw_sjwh as '||owner||' ;' FROM systables WHERE tabid > 99 AND tabtype = 'T';
5、赋权用户拥有角色:
grant role_yw_sjwh to zhangsan_t;
6、因脚本只对当前时刻的表做了权限调整。如遇新增表,会存在需要重新赋权的情况。
#1、校验新增表是否完成只读及角色赋权,sql如下:
SELECT t.owner,t.tabname,t.tabid,count(*)
FROM systables t, systabauth a
WHERE t.tabid=a.tabid
AND a.tabid IN (SELECT tabid FROM systabauth WHERE tabid > 99 and tabtype='T' )
group by t.owner,t.tabname,t.tabid
order by 4 ,3;
#2、校验没张表的权限情况,sql如下:
SELECT t.owner,t.tabname,a.grantor,a.grantee,a.tabid,a.tabauth FROM systables t, systabauth a
WHERE t.tabid=a.tabid and t.tabid > 99 and t.tabtype='T' order by 5 desc ;
#3、检查角色的权限情况,sql如下:
select * from gbasedbt.sysroleauth ;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
重要提示:
1、角色管理以后,普通用户 执行增删改等ddl+dml 操作前,需要在客户端先执行set role, 否则会报操作没权限"
SET ROLE role_yw_sjwh ;
2、使用纳管ADMIN用户,在某个库修改普通用户zhangsan_t 密码后,该实例下其他库的zhangsan_t 密码也相应变更。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++




