ITPub博客

首页 > 数据库 > 国内数据库 > 瀚高数据库企业版中的权限问题

瀚高数据库企业版中的权限问题

原创 国内数据库 作者:瀚高PG实验室 时间:2021-12-29 16:07:57 0 删除 编辑
文档用途
企业版V6.0.1中,普通用户可以连接查询其他用户owner的数据库,并且可以在他的public模式下进行create、delete、update、drop自己的表等操作,存在安全隐患。
详细信息

问题

highgo=# create user a with password 'xxxxxxxx'; --创建a用户
CREATE ROLE
highgo=# create database db_a with owner a;   --创建数据库db_a,owner为用户a
CREATE DATABASE
highgo=# create user b with password 'xxxxxxxx'; --创建b用户
CREATE ROLE
highgo=# create database db_b with owner b;   --创建数据库db_b,owner为用户b
CREATE DATABASE
highgo=# \q
[highgo@localhost etc]$ psql -U a -d db_b    --用户a连接数据库db_b
Password for user a: 
psql (6.0.1)
PSQL: Release 6.0.1
Type "help" for help.
db_b=> create table by_a (id int);       --执行创建表操作成功。insert、update、drop经测试也可正常执行。
CREATE TABLE

分析

非超级用户a为什么可以连接任何数据库db_b,不仅可以连接还可以在public模式下面创建自己的object并对其执行增删改查等操作。

这其实是由瀚高数据库的逻辑结构决定的,在瀚高数据库中逻辑结构有4层:实例(集簇)→数据库→schema→数据库对象。一个数据库集簇下面可以有多个数据库,每个数据库可以有多个schema,每个schema又可以有多个数据库对象,包括table、view、function等。他与oracle不同的是用户并属于逻辑结构中的任何一层,是独立之外的object,他不属于某个数据库或者schema,在瀚高数据库中库与用户没有直接的关联关系,所以会出现上面的权限疑问。

解决

当然我们仍然可以通过权限操作来实现我们想要的效果,使数据库只有超级用户、属主用户可以连接,排除安全隐患。

revoke all on database db_b from public; --此处public代表所有普通用户。

如果后期又想赋予该权限,可以执行以下逆命令。

grant all on database db_b to public;



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69994931/viewspace-2849959/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: HGDB中any用法
请登录后发表评论 登录
全部评论
瀚高PG实验室(Highgo PG Lab)依托于瀚高DBA运维团队及瀚高数据库PG内核研发团队,旨在深入研究PostgreSQL技术、使用技巧、内核探秘、PG教学等,并进行分享。欢迎大家关注、交流。

注册时间:2021-02-18

  • 博文量
    184
  • 访问量
    126090