news 2026/3/6 15:39:09

瀚高安全版数据库跨模式访问表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
瀚高安全版数据库跨模式访问表

文章目录

  • 环境
  • 文档用途
  • 详细信息

环境

系统平台:中标麒麟(海光)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);INSERT01

3、通过用户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=>\q

7、此时用户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行记录)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!