创建角色 "u_rts" 并授予对数据库 "rts_opsdb" 的只读权限:
CREATE ROLE u_rts LOGIN PASSWORD 'Cloud@1234';
GRANT CONNECT ON DATABASE rts_opsdb TO u_rts;
GRANT USAGE ON SCHEMA public TO u_rts;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO u_rts;
创建四个用户并使其继承角色 "u_rts" 的权限,并设置密码:
CREATE USER rts_ops PASSWORD 'ops@1234';
CREATE USER rts_eod PASSWORD 'eod@1234';
CREATE USER rts_rctp PASSWORD 'rctp@1234';
GRANT u_rts TO rts_ops;
GRANT u_rts TO rts_eod;
GRANT u_rts TO rts_rctp;
在opengauss上不需要执行这一步骤,但是在pg上需要执行。
opengauss特性,在哪个数据库下创建用户名,默认会生成和用户名一样的schema,所以这里opengauss不需要再重复创建同样的schema。
需要去掉该步骤
创建对应的模式(schema)并分配相应的权限:
CREATE SCHEMA rts_rms;
CREATE SCHEMA rts_rtp;
CREATE SCHEMA rts_ris;
CREATE SCHEMA rts_des;
需求是这样的,rts_all用户拥有rts_des,rts_ris,rts_rtp,rts_rms所有用户下rts_des,rts_ris,rts_rtp,rts_rms模式的create权限,整理需要注意的是,rts_des用户必须给schema rts_des 可读可写的权限,并且rts_all必须是超级用户,不然rts_all也无法拥有对schema rts_des的可读可写的权限。
总结如下:
1、不是超级用户rts_all, 同时授予rts_ris和rts_all用户create权限,rts_all也无法在schema rts_ris创建对象 。
2、超级用户rts_all,必须授予rts_ris用户create权限(但是可以不用授予rts_all用户create权限),rts_all才能在schema rts_ris创建对象 。
如下所示截图,对于超级用户rts_all,不给create权限,也能在schema rts_ris创建对象
如下图所示,在schema rts_ris创建对象。
需求如下:
-- rts_rms 只能访问 rts_des 模式的对象,并拥有只读权限
切换到rts_des用户下为rts_rms授予访问权限
rtsdb=> \c - rts_desGRANT USAGE on SCHEMA rts_des to rts_rms;
GRANT SELECT ON ALL TABLES IN SCHEMA rts_rms to rts_rms;
alter default privileges for role rts_des in schema rts_des grant select on tables to rts_rms;
-- rts_rtp 只能访问 rts_des 模式的对象,并拥有只读权限
切换到rts_des用户下为rts_rtp授予访问权限
rtsdb=> \c - rts_desGRANT USAGE on SCHEMA rts_des to rts_rtp;
GRANT SELECT ON ALL TABLES IN SCHEMA rts_des to rts_rtp;
alter default privileges for role rts_des in schema rts_des grant select on tables to rts_rtp;
-- rts_ris 只能访问 rts_des 和 rts_rtp 模式的对象,并拥有只读权限
切换到rts_des用户下为rts_ris授予访问权限
rtsdb=> \c - rts_desGRANT USAGE on SCHEMA rts_des to rts_ris;
GRANT SELECT ON ALL TABLES IN SCHEMA rts_des to rts_ris;
alter default privileges for role rts_des in schema rts_des grant select on tables to rts_ris;切换到rts_des用户下为rts_rtp授予访问权限
rtsdb=> \c - rts_desGRANT USAGE on SCHEMA rts_des to rts_rtp;
GRANT SELECT ON ALL TABLES IN SCHEMA rts_des to rts_rtp;
alter default privileges for role rts_des in schema rts_des grant select on tables to rts_rtp;
-- rts_des 只能访问 rts_ris、rts_rtp 和 rts_rms 模式的对象,并拥有只读权限
切换到rts_ris用户下为rts_des授予访问权限
rtsdb=> \c - rts_risGRANT USAGE on SCHEMA rts_ris to rts_des;
GRANT SELECT ON ALL TABLES IN SCHEMA rts_ris to rts_des;
alter default privileges for role rts_ris in schema rts_ris grant select on tables to rts_des;切换到rts_rtp用户下为rts_des授予访问权限
rtsdb=> \c - rts_rtpGRANT USAGE on SCHEMA rts_rtp to rts_des;
GRANT SELECT ON ALL TABLES IN SCHEMA rts_rtp to rts_des;
alter default privileges for role rts_rtp in schema rts_rtp grant select on tables to rts_des;切换到rts_rms用户下为rts_des授予访问权限
rtsdb=> \c - rts_rmsGRANT USAGE on SCHEMA rts_rms to rts_des;
GRANT SELECT ON ALL TABLES IN SCHEMA rts_rms to rts_des;
alter default privileges for role rts_rms in schema rts_rms grant select on tables to rts_des;