数据库系列之GaussDB数据库中逻辑对象关系简析

初次接触openGauss或GaussDB数据库的逻辑对象,被其中的表空间、数据库、schema和用户之间的关系,以及授权管理困惑住了,与熟悉的MySQL数据库的逻辑对象又有明显的不同。本文旨在简要梳理下GaussDB数据库逻辑对象之间的关系,以加深理解。


1、GaussDB数据库逻辑对象
1.1 表空间、Database和表

GaussDB数据库中逻辑对象包括表空间、Database和表、索引等,其中Database是数据的集合、表空间是数据在物理上的位置,数据库中的所有对象都存储在表空间中。

  • 表空间Tablespace:表空间是一个目录,数据库中可以存在多个表空间,其中存储的是它所包含的数据库的各种物理文件。每个表空间可以对应多个Database。gaussdb中系统默认表空间pg_default,当建表时未指定表空间都使用默认表空间。
  • Database:数据库是逻辑上的抽象,各个database之间相互隔离,同一个database上的数据库对象可以存在多个表空间中。Gaussdb中会默认创建postgres数据库
  • 表Table:Table是数据的结构化视图,存储特定类型的数据。每张表只能属于一个数据库,也只能对应到一个Tablespace。每张表对应的数据文件必须在同一个Tablespace中。

在这里插入图片描述

其中关系如图所示,总结如下:

  • 数据库实例中可以定义多个Database和表空间;
  • 一个Database中可以包含多个表空间;
  • 一个表空间中可以包含多个数据库;
  • 一个数据库中可以包含多个表;
  • 一个表必须属于一个数据库,并存储在一个表空间中。
1.2 用户和Schema

GaussDB数据库中用户user、角色role和schema各自不同的作用:

  • 用户是数据库中的实体,用于标识和管理数据库中的各种操作权限和资源使用权限。每个用户都有唯一的用户名,用于登录数据库和执行相关操作。在GaussDB中,用户和用户组在实例范围内是共享的,也就是默认情况下通过单个用户可以连接到任一数据库,但是数据不是共享的,受到权限的管控。
  • 角色是一组用户的集合,通过角色可以将权限授予一组用户,而不是单独授予每个用户。角色可以包含其他角色,形成层次结构。通过为角色分配权限,然后将角色授予用户,可以实现权限的快速分配和撤销。
  • Schema是数据库对象的集合,它包含了数据库中的所有表、视图、存储过程、函数等对象。每个数据库可以包含一个或多个Schema,用于将数据库对象组织成逻辑上独立的组。通过Schema,可以允许多个用户使用同一数据库而不相互干扰,将数据库对象组织成易于管理的逻辑组。在数据库创建后,会有一个默认的名为Public的schema。

需要注意的是,在GaussDB中,每次创建新用户时,系统会在当前登录的数据库中默认为新用户创建一个同名Schema,此时在当前数据库中创建同名的schema会提示已存在。对于其他数据库,若需要同名Schema,则需要用户手动创建。

另外,如果未指定schema访问表时,系统会通过search_path(搜索路径)来判断该表是哪个schema下的表(其中pg_temp和pg_catalog默认会作为搜索路径顺序中的前两位)。search_path(搜索路径)是一个schema名列表,在其中找到的第一个表就是目标表,如果没有找到则报错。在搜索路径中的第一个schema叫做current schema(通过show current_schema可以查看),在没有声明schema名时,新创建的数据库对象会默认存放在该schema下。

在这里插入图片描述

用户、Database和schema之间关系如图所示,总结如下:

  • 每个数据库中可以包含多个用户,用户在实例范围内是共享的;
  • 每个数据库中可以定义多个schema,schema之间是互相隔离的,不同数据库之间可以定义相同的schema名;
  • 每个schema包含多个数据库对象,但每个数据库对象只能属于一个Schema。

用户对不同的Database中不同schema的访问通过设置不同的权限进行管理控制。

1.3 不同对象之间权限管理

GaussDB数据库中的权限管理沿用了Oracle数据库的权限管理特性,权限层级分为多个级别,包括系统权限和对象权限:

  • 系统权限:系统规定用户使用数据库的权限,如登录数据库(LOGIN)、创建数据库(CREATEDB)、创建用户/角色(CREATEROLE)等。
  • 对象权限:指在数据库对象(如数据库、模式、表、视图、函数等)上执行特殊动作的权限,如查看(SELECT)、更新(UPDATE)、插入(INSERT)、删除(DELETE)等。

在对角色和用户授权时候,主要有以下场景:

  1. 将系统权限授予角色或用户:比如授予数据库管理员SYSADMIN、MONADMIN权限,监控用户MONADMIN权限;
  2. 将数据库对象授予角色或用户:将数据库对象的相关权限授予特定的角色或用户,比如对schema的所有权限、schema下表的所有权限。
  3. 将角色或用户授予其它用户或角色:将一个角色或用户的权限授予其它多个角色,比如创建了一个只读的角色,将该role授予其它用户。
  4. 将ANY权限授予角色或用户:ANY权限有很多种,比如CREATE ANY、SELECT ANY,当授予SELECT ANY TABLE权限给某个用户后,该用户在当前数据库下既有所有schema的查询权限,对于一些只读的查询用户还是很方便的。

GaussDB数据库中的权限管理颗粒度非常细,按照最小授权的原则管理上也相当复杂,因此在实际授权过程中按照schema和schema内的对象维度进行分别授权,全局的只读用户具备SELECT ANY的权限、业务读写用户具备对象级别的增删改查权限、系统视图如pg_catalog和sys等的查询权限。不过需要注意的是:

  • DBE_PREF系统schema访问需要MONADMIN权限,单独授予SELECT权限不生效;
  • Schema内的对象授权时,需要具备schema的usage权限才能正常访问其中的schema;
1.4 MySQL数据库中逻辑对象对比

在MySQL数据库中,数据库也是存储数据的容器,它包含了表、视图、存储过程、函数、触发器、事件等数据库对象。

  • schema通常与数据库是同义词,指的是数据库结构的集合,创建一个新的数据库时,实际上已经创建了一个新的schema。
  • 表也是数据库中最基本的存储单元,它以行和列的形式存储数据。
  • 表空间在innodb存储引擎中分为系统表空间和数据表空间,系统表空间包含数据字典、事务信息和undo日志等信息,而打开innodb_file_per_table配置后会为每张表单独创建一个表空间文件,每个表空间文件中存放的是数据、索引和插入缓存等信息。

因此,在逻辑结构上MySQL系的数据库中的数据库实例与GaussDB数据库中的database相当,一个数据库中可以创建多个database或schema,每个database中又可以创建不同的表,不同database间共享系统表空间和资源。

1.5 总结

总结GaussDB数据库的逻辑对象之间的关系,如下图所示:

  1. 在逻辑层面,GaussDB数据库以不同的database进行逻辑上的区分,一个数据库实例中可以定义多个database,database内可以定义不同的schema、schema内又包含不同的数据库对象。
  2. 在物理存储层面,表空间对应的是实际的数据存储目录,同一个database可以使用不同的表空间、同一个表空间又可以被不同的database使用。不过在实际使用过程中建议使用默认的表空间。
  3. 在权限控制上,通过对不同用户或角色授予不同对象的访问权限进行细粒度的权限管控,达到最小化授权的目的。

在这里插入图片描述


参考资料:

  1. https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30
  2. https://blog.csdn.net/weixin_38623994/article/details/100047552
  3. https://bbs.huaweicloud.com/blogs/236381

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/423627.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈EXT2文件系统(1)

简介 EXT2(Second Extended Filesystem)文件系统是Linux操作系统的早期文件系统之一,它于 1993 年推出,是第一个旨在克服 Ext 文件系统限制的商业文件系统。EXT2 没有日志功能,EXT2 支持的单个文件大小为 2TB&#xf…

如何在Word中插入复选框

如何在Word中插入复选框:详细教程与技巧 在Word中插入复选框是一项非常实用的技巧,尤其是在制作问卷调查、待办事项清单、交互式表单或文档中需要用户进行选择时,复选框不仅能提高文档的功能性,还能显得更加专业。本文将详细讲解…

不小心把回收站清空了怎么恢复?别慌!四招找回

在日常使用电脑的过程中,我们可能会不小心清空回收站,从而丢失一些重要的文件。当遇到这种情况时,很多人可能会感到焦虑和无助。然而,幸运的是,有一些方法可以帮助我们尝试恢复这些被删除的文件。下面,我们…

大数据-133 - ClickHouse 基础概述 全面了解

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

关于【禁止new对象时在for循环内定义申明变量】

文章目录 简介代码分析反编译之后对比性能测试内存与垃圾回收情况JDK和常用框架怎么写总结依赖 简介 不知道是谁最先提出了一个不要将变量定义在循环内。 然后我们在代码扫描中有一项是:【禁止new对象时在for循环内定义申明变量】 我也好奇为什么不能&#xff1f…

如何利用MES系统进行产品质量全流程追溯

利用MES(制造执行系统)系统进行产品质量全流程追溯,是一个系统化和精细化的过程,主要涉及数据采集、信息整合、过程控制、查询分析以及持续优化等多个环节。以下是如何具体利用MES系统进行产品质量全流程追溯的步骤: 一…

centos(在线、离线)安装iptables

Iptables 是 Linux 操作系统中的一个用户空间工具,用来配置 Linux 内核中的 Netfilter 防火墙模块。它主要负责网络数据包的过滤、网络地址转换 (NAT) 以及配置防火墙规则。centos默认的防火墙管理工具是Firewalld,所以iptables需要下载安装。 目录 一…

嵌入式软件工程师:科技浪潮中的关键角色

嵌入式软件工程师:科技浪潮中的关键角色 一、嵌入式软件工程师的职业魅力 (一)市场需求旺盛 嵌入式软件工程师在当今科技领域中扮演着至关重要的角色。随着智能化时代的到来,嵌入式系统在各个行业的应用越来越广泛,市…

【贪心算法】贪心算法

贪心算法简介 1.什么是贪心算法2.贪心算法的特点3.学习贪心的方向 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.什么是贪心算法 与其说是…

[linux基础知识]教你使用vim和ctags阅读linux内核源码

1 安装ctags apt install ctags 2 内核源码目录下添加索引 使用下面命令,添加索引成功后,内核目录下会生成tags 索引文件。 ctags -R 3 vim使用索引阅读源码 跳转到函数变量定义与返回 #跳到函数或者变量定义 Ctrl] #返回 Ctrlo 光标移动到需要…

vue + Element UI table动态合并单元格

一、功能需求 1、根据名称相同的合并工作阶段和主要任务合并这两列,但主要任务内容一样,但要考虑主要任务一样,但工作阶段不一样的情况。(枞向合并) 2、落实情况里的定量内容和定性内容值一样则合并。(横向…

设置使用阿里云服务器DNS

由于云服务器是从腾讯云迁移到阿里云,然后使用ssl验证时一直无法使用dns验证,也无法创建三级域名,原来需要把阿里云服务器改成阿里云的dns使用 如果使用其他服务器DNS会下面会显示当前DNS服务器,

Linux:git

hello,各位小伙伴,本篇文章跟大家一起学习《Linux:git》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 如果本篇文章对你有帮助,还请各位点点赞!!&…

解决Docker镜像不可下载

使用国内可信的镜像中心 可信国内镜像网址:https://hub.atomgit.com/ 点击镜像仓库 搜索想要的镜像 按如图所示,即可查看对应的版本 点击复制,即可下载使用 缺点: 可用的镜像相比于docker官方量少 并且,获取的镜像名字…

【Java】方法2_Java的参数传递机制

文章目录 前言一、Java的参数传递机制都是值传递 1.基本类型的参数传递2.引用类型的参数传递总结 前言 学习Java的参数传递机制,基本类型的参数传递,引用类型的参数传递。 一、Java的参数传递机制都是值传递 值传递:指传输实参给方法的形参…

『功能项目』单例模式框架【37】

我们打开上一篇36C#拓展 - 优化冗余脚本的项目, 本章要做的事情是编写单例模式基类,让继承其基类的子类在运行时只存在一个,共有两个单例基类框架,分别是不继承MonoBehaviour的单例和继承MonoBehaviour的单例框架 首先编写不继承…

OpengGL教程(三)---使用VAO和VBO方式绘制三角形

本章参考官方教程:learnopengl-cn VertexShader.glsl #version 330 core layout(location 0) in vec3 position; layout(location 1) in vec3 color; uniform mat4 projection; // 投影矩阵 out vec4 ourColor; void main() {gl_Position projection * vec4(p…

Probabilistic Embeddings for Cross-Modal Retrieval 论文阅读

Probabilistic Embeddings for Cross-Modal Retrieval 论文阅读 Abstract1. Introduction2. Related work3. Method3.1. Building blocks for PCME3.1.1 Joint visual-textual embeddings3.1.2 Probabilistic embeddings for a single modality 3.2. Probabilistic cross-modal…

Xcode 16 RC (16A242) 发布下载,正式版下周公布

Xcode 16 RC (16A242) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接:https://sysin.org/blog/apple-xcode-16/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Xcode 16 的新功…

开源项目低代码表单FormCreate中通过接口加载远程数据选项

在开源项目低代码表单 FormCreate 中,fetch 属性提供了强大的功能,允许从远程 API 加载数据并将其应用到表单组件中。通过灵活的配置,fetch 可以在多种场景下发挥作用,从简单的选项加载到复杂的动态数据处理。 源码地址: Github …