openGauss 中 Schema 赋权小试

数据库 0 508
小小草
小小草 2023年1月14日 01:20 发表
摘要:Schema 又称作模式。通过管理 Schema,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的 Schema 下而不引起冲突。

目录

概述

1. 关于 public 的权限要点:

2. 关于用户同名的 schema 的权限要点:

3. 关于普通 schema 的权限要点:


概述

下面是 openGauss 官网对 Schema 的介绍:

Schema 又称作模式。通过管理 Schema,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的 Schema 下而不引起冲突。

参考地址:Schema

数据库创建后,默认具有一个 schema 叫做 public,所有用户都具有 public 的 usage 权限;用户可以创建其他的 schema;另外创建数据库用户的时候,也会创建一个和该数据库用户同名的 schema。

1. 关于 public 的权限要点:

只有初始化用户和系统管理员可以在 public 下面创建函数,存储过程和同义词对象,其他用户即使赋予了 create 权限,也不能创建上述三种对象。可以把 schema 理解成操作系统的目录(文件夹),所不同的是 schema 只有一层,不能嵌套创建。

以下举例:teacher_li 用户已经赋予了 public 的 create 权限:

grant create on SCHEMA public to teacher_zhao;)。

 

 

执行时报错:

执行时出错 确认要继续执行吗?

单击 “详细信息” 了解详情。

  SQL 错误码: = 42501

ERROR: permission denied to create function "f_class_eng1"

  Hint: must be sysadmin to create a function in public schema.

 行号: 10

 

 

 

在某些数据库中,schema 也叫作命名空间(namespace),openGauss 的系统表也叫作 PG_NAMESPACE。查询 PG_NAMESPACE 也可以看到每个 schema 的赋权情况。

 

 

根据上图可以看出,teacher_zhao 拥有 public 的 create 权限(’C’)。

2. 关于用户同名的 schema 的权限要点:

对于用户同名的 schema,即使赋予 create 权限给其他用户,其他用户也无法在该 schema 下面创建数据库对象,但是把 usage 权限赋予其他用户后,其他用户是可以查看该 schema 下面的表信息的。

如上面所示,teacher_zhao 拥有和用户 teacher_li 同名 schema 的 create 权限,但是执行创建数据库对象语句时,仍然报错,不能执行:

执行时出错 确认要继续执行吗?

单击 “详细信息” 了解详情。

  SQL 错误码: = 42501

ERROR: current user does not have privilege to role teacher_li

 行号: 3

 

 

需要把用户 / 角色 teacher_li 赋予 teacher_zhao 之后,teacher_zhao 才可以在 teacher_li 的同名 schema 下创建数据库对象。

赋权语句:grant teacher_li to teacher_zhao;

执行结果:create table teacher_li.t1(a int);

说明:用户拥有 create 权限,即可认为用户也拥有查询的权限,如下图所示,teacher_zhao 的 usage 权限已经被回收:

 

 

REVOKE  usage on schema teacher_li from teacher_zhao;

然而还是能够查询表,

回收:

 查询权限:

 查询表数据:select * from teacher_li.t1

3. 关于普通 schema 的权限要点:

 

 

 

普通 schema 的 create 权限 grant 给其他用户后,其他用户即可以创建对象。

用 clouduser 分别创建 schema teacher_zhao2、teacher_zhao3(指定 AUTHORIZATION),并把 create 权限赋给 teacher_li:

create SCHEMA teacher_zhao2;

CREATE SCHEMA teacher_zhao3  AUTHORIZATION teacher_zhao;

grant create on SCHEMA teacher_zhao2 to teacher_li;

grant create on SCHEMA teacher_zhao3 to teacher_li;create SCHEMA teacher_zhao2;

CREATE SCHEMA teacher_zhao3  AUTHORIZATION teacher_zhao;

grant create on SCHEMA teacher_zhao2 to teacher_li;

grant create on SCHEMA teacher_zhao3 to teacher_li;v

查询 schema 系统表:

select * from pg_namespace where nspname like 'teacher_zhao%'

 

 

可以发现没有指定 AUTHORIZATION 的情况下,默认创建用户是 clouduser(系统管理员),而指定情况下,则创建用户就是指定的用户。

下面尝试用 teacher_li 登录,创建数据库对象:

create table teacher_zhao2.t2(a int);

create table teacher_zhao3.t2(a int);

创建成功。

点赞 0 收藏(0)    分享
相关标签: openGauss Schema
问题没解决?让chatGPT帮你作答 智能助手
0 个评论
  • 消灭零评论