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

环境

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

highgo=# create database a with owner=a;

CREATE DATABASE

highgo=# create user b inherit user a password'highgo123';

2、通过用户a 登录数据库a,创建测试表a,并插入数据

[root@node1 ~]# psql -U a -d a

psql (4.3.4.7)

输入 "help" 来获取帮助信息. 

a=> create table a (id int);

CREATE TABLE

a=> insert into a values(1);

INSERT 0 1

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      | 8192 bytes |

(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=> alter table a owner to b;

ALTER TABLE

a=> \dt+

                       关联列表

 架构模式 | 名称 |  类型  | 拥有者 |    大小    | 描述

----------+------+--------+--------+------------+------

 public   | a    | 数据表 | b      | 8192 bytes |

(1 行记录)
a=>

a=> insert into a values(2);

INSERT 0 1

a=> select * from a;

 id

----

  1

  2

(2 行记录)
a=> begin

a-> ;

BEGIN

a=> drop table a;

DROP TABLE

a=> rollback;

ROLLBACK

a=>

a=>

a=> select * from a

a-> ;

 id

----

  1

  2

(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=> create schema a;

CREATE SCHEMA 

a=> create table f(id int);

CREATE TABLE

a=>

a=>

a=>

a=> \dt

             关联列表

 架构模式 | 名称 |  类型  | 拥有者

----------+------+--------+--------

 a        | f    | 数据表 | a

 public   | a    | 数据表 | b

 

a=> grant select on all tables in schema a to b;

GRANT

a=>

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 * from a.f;

 id

----

(0 行记录

10、在会话级更改模式搜索路径参数,可临时解决其他模式下表的可见问题

a=> \dt

             关联列表

 架构模式 | 名称 |  类型  | 拥有者

----------+------+--------+--------

 public   | a    | 数据表 | b

 public   | b    | 数据表 | a

 public   | c    | 数据表 | a

 public   | d    | 数据表 | a

(4 行记录)

a=> set search_path to a,'$user',public;

SET

a=> \dt

             关联列表

 架构模式 | 名称 |  类型  | 拥有者

----------+------+--------+--------

 a        | f    | 数据表 | a

 public   | a    | 数据表 | b

 public   | b    | 数据表 | a

 public   | c    | 数据表 | a

 public   | d    | 数据表 | a

(5 行记录)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值