文章目录
- 环境
- 文档用途
- 详细信息
环境
系统平台:中标麒麟(海光)7
版本:4.3.4.7
文档用途
本文主要介绍在安全版HGDB中,如何通过对用户、模式、表等数据库对象授权管理,实现表的跨模式访问,本次主要介绍以下规则:
1、数据库的默认搜索模式为$user,public,在没有创建跟用户同名的模式的情况下,默认表都创建在public下;
2、通过角色继承的方式创建的用户a跟b,a用户创建的表,将表a的属主改为b用户后,ab用户同时拥有drop该表的权限;
3、安全版数据库下用户可以将自建的模式赋予给其他用户,根据使用情况赋予create、usage等权限,不推荐使用all privilege参数;
4、如果一个b用户想访问a用户下自建模式下的表,需要a用户将模式、表的权限都赋给b用户才可以实现,单独授予任何一个的情况下,在添加了search_path参数后,可以看到表,但是无法查询表的内容。
详细信息
1、创建数据库用户a ,数据库a,属主为用户a,通过角色继承的方式创建用户b
highgo=# create user a with password 'highgo123';CREATEROLE highgo=# create database a with owner=a;CREATEDATABASEhighgo=# create user b inherit user a password'highgo123';2、通过用户a 登录数据库a,创建测试表a,并插入数据
[root@node1~]# psql -U a -d apsql(4.3.4.7)输入"help"来获取帮助信息.a=>createtablea(idint);CREATETABLEa=>insertintoavalues(1);INSERT013、通过用户b登录数据库a ,可以看到public下的表a,但是没有权限访问
[root@node1 ~]# psql -U b -d a
用户 b 的口令:
注意:
Login User: b
Login time: 2020-01-08 11:22:49.58514+08
Login Address: [local]
Last Login Status: SUCCESS
Login Failures: 0
Valied Until: 2020-01-15 11:15:50+08
psql(4.3.4.7)输入"help"来获取帮助信息.a=>a=>a=>\dt+关联列表
架构模式|名称|类型|拥有者|大小|描述----------+------+--------+--------+------------+------public|a|数据表|a|8192bytes|(1行记录)a=> select * from a;
错误: 对关系 a 权限不够
4、登录数据库,把表a的增删改查权限赋予用户b,再次查询成功
[root@node1 ~]# psql -U a -d a
用户 a 的口令:
注意:
Login User: a
Login time: 2020-01-08 11:23:34.17439+08
Login Address: [local]
Last Login Status: SUCCESS
Login Failures: 0
Valied Until: 2020-01-15 11:14:29+08
psql (4.3.4.7)
输入 “help” 来获取帮助信息.
a=> grant select,insert,update,delete,truncate on table a to b;
GRANT
a=> \q
[root@node1 ~]# psql -U b -d a;
用户 b 的口令:
注意:
Login User: b
Login time: 2020-01-08 11:27:08.566743+08
Login Address: [local]
Last Login Status: SUCCESS
Login Failures: 0
Valied Until: 2020-01-15 11:15:50+08
psql (4.3.4.7)
输入 “help” 来获取帮助信息.
a=> select * from a;
id
1
(1 行记录)
5、将表a的属主改为用户b,此时用户a,用户b均可以对表a进行drop操作
[root@node1 ~]# psql -U a -d a
用户 a 的口令:
注意:
Login User: a
Login time: 2020-01-08 11:28:44.451+08
Login Address: [local]
Last Login Status: SUCCESS
Login Failures: 0
Valied Until: 2020-01-15 11:14:29+08
a=>altertablea ownertob;ALTERTABLEa=>\dt+关联列表 架构模式|名称|类型|拥有者|大小|描述----------+------+--------+--------+------------+------public|a|数据表|b|8192bytes|(1行记录)a=>a=>insertintoavalues(2);INSERT01a=>select*froma;id----12(2行记录)a=>begina->;BEGINa=>droptablea;DROPTABLEa=>rollback;ROLLBACKa=>a=>a=>select*froma a->;id----12(2行记录)a=>end;警告: 没有事物在运行中
COMMIT
6、用户a创建同名模式a,创建表f,同时把模式a下所有表的查询权限赋给b
[root@node1 ~]# psql -U a -d a
用户 a 的口令:
注意:
Login User: a
Login time: 2020-01-08 11:28:44.451+08
Login Address: [local]
Last Login Status: SUCCESS
Login Failures: 0
Valied Until: 2020-01-15 11:14:29+08
a=>createschemaa;CREATESCHEMAa=>createtablef(idint);CREATETABLEa=>a=>a=>a=>\dt 关联列表 架构模式|名称|类型|拥有者----------+------+--------+--------a|f|数据表|apublic|a|数据表|b a=>grantselectonalltablesinschemaatob;GRANTa=>a=>a=>a=>\q7、此时用户b仍然无法查询到模式a下的表f
[root@node1 ~]# psql -U b -d a
用户 b 的口令:
注意:
Login User: b
Login time: 2020-01-08 17:24:22.295389+08
Login Address: [local]
Last Login Status: SUCCESS
Login Failures: 0
Valied Until: 2020-01-15 11:15:50+08
psql (4.3.4.7)
输入 “help” 来获取帮助信息.
a=> select * from a.f;
错误: 对模式 a 权限不够
第1行select * from a.f;
8、将模式a的使用权限赋给用户b
[root@node1 ~]# psql -U a -d a
用户 a 的口令:
注意:
Login User: a
Login time: 2020-01-08 17:29:23.407098+08
Login Address: [local]
Last Login Status: SUCCESS
Login Failures: 0
Valied Until: 2020-01-15 11:14:29+08
psql (4.3.4.7)
输入 “help” 来获取帮助信息.
a=> grant usage on schema a to b;
GRANT
9、再次使用用户b登录就可以查询模式a下的表
[root@node1 ~]# psql -U b -d a
用户 b 的口令:
注意:
Login User: b
Login time: 2020-01-08 17:31:12.875106+08
Login Address: [local]
Last Login Status: SUCCESS
Login Failures: 0
Valied Until: 2020-01-15 11:15:50+08
psql (4.3.4.7)
输入 “help” 来获取帮助信息.
a=>select*froma.f;id----(0行记录10、在会话级更改模式搜索路径参数,可临时解决其他模式下表的可见问题
a=>\dt 关联列表 架构模式|名称|类型|拥有者----------+------+--------+--------public|a|数据表|bpublic|b|数据表|apublic|c|数据表|apublic|d|数据表|a(4行记录)a=>setsearch_pathtoa,'$user',public;SETa=>\dt 关联列表 架构模式|名称|类型|拥有者----------+------+--------+--------a|f|数据表|apublic|a|数据表|bpublic|b|数据表|apublic|c|数据表|apublic|d|数据表|a(5行记录)