当前位置: 首页 > news >正文

openGauss数据库-头歌实验1-3 创建和管理模式

一、创建和使用模式

(一)任务描述

本关任务:基于 openGauss 学习创建模式的相关知识。

(二)相关知识

为了完成本关任务,你需要掌握:1.openGauss 的常用操作,2.SQL 创建模式相关语法。

(三)背景知识

schema 又称作模式。通过管理 schema,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的 schema 下而不引起冲突。管理 schema 包括:创建schema、使用 schema、删除 schema、设置 schema 的搜索路径以及 schema 的权限控制。

(四)注意事项

1.只要用户对当前数据库有 CREATE 权限,就可以创建模式。
2.系统管理员在普通用户同名 schema 下创建的对象,所有者为 schema 的同名用户(非系统管理员)。
3.openGauss 包含一个或多个已命名数据库。用户和用户组在 openGauss 范围内是共享的,但是其数据并不共享。任何与服务器连接的用户都只能访问连接请求里声明的那个数据库。
4.一个数据库可以包含一个或多个已命名的 schema,schema 又包含表及其他数据库对象,包括数据类型、函数、操作符等。同一对象名可以在不同的 schema 中使用而不会引起冲突。例如,schema1 和 schema2都可以包含一个名为mytable的表。
5.和数据库不同,schema 不是严格分离的。用户根据其对 schema 的权限,可以访问所连接数据库的 schema 中的对象。进行 schema 权限管理首先需要对数据库的权限控制进行了解。
6.不能创建以PG_为前缀的 schema 名,该类 schema 为数据库系统预留的。
7.在每次创建新用户时,系统会在当前登录的数据库中为新用户创建一个同名 schema。对于其他数据库,若需要同名 schema,则需要用户手动创建。

(五)语法格式

根据指定的名称创建模式。

CREATE SCHEMA schema_name [ AUTHORIZATION user_name ] [WITH BLOCKCHAIN] [ schema_element [ ... ] ];
根据用户名创建模式。CREATE SCHEMA AUTHORIZATION user_name [ schema_element [ ... ] ];

(六)参数说明

1.schema_name

  模式名称。

 须知: 

模式名不能和当前数据库里其他的模式重名。
模式的名称不可以“pg_”开头。

  取值范围:字符串,要符合标识符的命名规范。

2.AUTHORIZATION user_name

  指定模式的所有者。当不指定schema_name时,把user_name当作模式名,此时user_name只能是角色名。

  取值范围:已存在的用户名/角色名。

3.WITH BLOCKCHAIN

  指定模式的防篡改属性,防篡改模式下的行存普通用户表将自动扩展为防篡改用户表。

4.schema_element

  在模式里创建对象的SQL语句。目前仅支持CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE PARTITION、CREATE SEQUENCE、CREATE TRIGGER、GRANT子句。

  子命令所创建的对象都被AUTHORIZATION子句指定的用户所拥有。

说明: 

如果当前搜索路径上的模式中存在同名对象时,需要明确指定引用对象所在的模式。可以通过命令 SHOW SEARCH_PATH 来查看当前搜索路径上的模式。

(七)示例语句

1.创建 schema

执行如下命令来创建一个 schema:

CREATE SCHEMA myschema;

如果需要在模式中创建或者访问对象,其完整的对象名称由模式名称和具体的对象名称组成。中间由符号“.”隔开。例如:myschema.table。

执行如下命令在创建 schema 时指定 owner:

CREATE SCHEMA myschema AUTHORIZATION omm;

当结果显示为如下信息,则表示成功创建一个名为 myschema 的 schema:

CREATE SCHEMA

2.使用 schema

在特定 schema 下创建对象或者访问特定 schema 下的对象,需要使用有 schema 修饰的对象名。该名称包含 schema 名以及对象名,他们之间用“.”号分开。
执行如下命令在 myschema 下创建 mytable 表:

CREATE TABLE myschema.mytable(id int, name varchar(20));

如果在数据库中指定对象的位置,就需要使用有 schema 修饰的对象名称。

执行如下命令查询 myschema 下 mytable 表的所有数据:

SELECT * FROM myschema.mytable;

执行成功返回:

id | name 
----+------
(0 rows)

(八)编程要求

根据提示,在右侧命令行进行操作,首先新建一个数据库 testdb,在 testdb 数据库中创建一个新模式 new_schema,并指定其拥有者为 gaussdb;然后在 new_schema 下创建一个表 mytable;表的格式为my_id int, my_info varchar(36)。

(九)编程实现

二、管理模式

(一)任务描述

本关任务:基于 openGauss 学习管理模式权限的相关知识。

(二)相关知识

为了完成本关任务,你需要掌握:1.openGauss 的常用操作,2.SQL 模式管理相关语法。

(三)背景知识

每个数据库包含一个或多个 Schema。数据库中的每个 Schema 包含表和其他类型的对象。数据库创建初始,默认具有一个名为 public 的 Schema,且所有用户都拥有此 Schema 的  usage 权限,只有系统管理员和初始化用户可以在 public Schema 下创建函数、存储过程和同义词对象,其他用户即使赋予 create 权限后也不可以创建上述三种对象。可以通过 Schema 分组数据库对象。Schema 类似于操作系统目录,但 Schema 不能嵌套。

相同的数据库对象名称可以应用在同一数据库的不同 Schema 中,而没有冲突。例如, a_schema 和 b_schema 都可以包含名为 mytable 的表。具有所需权限的用户可以访问数据库的多个 Schema 中的对象。

CREATE USER 创建用户的同时,系统会在执行该命令的数据库中,为该用户创建一个同名的 SCHEMA。

(四)注意事项

只有模式的所有者或者被授予了模式 ALTER 权限的用户有权限执行 ALTER SCHEMA 命令,系统管理员默认拥有此权限。但要修改模式的所有者,

ALTER SCHEMA schema_name RENAME TO new_name;

当前用户必须是该模式的所有者或者系统管理员,且该用户是新所有者角色的成员。

只有模式的所有者或者被授予了模式 DROP 权限的用户有权限执行 DROP SCHEMA 命令,系统管理员默认拥有此权限。

(五)语法格式

修改模式的防篡改属性。

ALTER SCHEMA schema_name { WITH | WITHOUT } BLOCKCHAIN

修改模式的名称。

ALTER SCHEMA schema_name RENAME TO new_name;

修改模式的所有者。

ALTER SCHEMA schema_name OWNER TO new_owner;

删除模式

DROP SCHEMA [ IF EXISTS ] schema_name [, ...] [ CASCADE | RESTRICT ];

(六)参数说明

1.IF EXISTS

  如果指定的模式不存在,发出一个notice而不是抛出一个错误。

2.schema_name

  现有模式的名称。

  取值范围:已存在的模式名。

3.RENAME TO new_name

  修改模式的名称。非系统管理员要改变模式的名称,则该用户必须在此数据库上有CREATE权限。

  new_name:模式的新名称。

  取值范围:字符串,要符合标识符命名规范。

4.OWNER TO new_owner

  修改模式的所有者。非系统管理员要改变模式的所有者,该用户还必须是新的所有角色的直接或间接成员, 并且该成员必须在此数据库上有CREATE权限。

  new_owner:模式的新所有者。

  取值范围:已存在的用户名/角色名。

5.{ WITH | WITHOUT } BLOCKCHAIN

  修改模式的防篡改属性。具有防篡改属性模式下的普通行存表均为防篡改历史表,不包括外表、临时表、系统表。当该模式下不包含任何表时才可修改防篡改属性。另外,不支持临时表模式。toast表模式、dbe_perf模式、blockchain模式修改防篡改属性。

(七)示例语句

--创建模式ds。
openGauss=# CREATE SCHEMA ds;
--将当前模式ds更名为ds_new。
openGauss=# ALTER SCHEMA ds RENAME TO ds_new;
--创建用户jack。
openGauss=# CREATE USER jack PASSWORD 'xxxxxxxxx';
--将DS_NEW的所有者修改为jack。
openGauss=# ALTER SCHEMA ds_new OWNER TO jack;
--删除用户jack和模式ds_new。
openGauss=# DROP SCHEMA ds_new;
openGauss=# DROP USER jack;


(八)编程要求

根据提示,在右侧命令行进行操作,将上一关中的 new_schema 更名为 dc_tcpp,并将 dc_tcpp 的所有者修改为 omm。

(九)编程实现

三、模式的权限控制

(一)任务描述

本关任务:基于 openGauss 学习模式的权限控制方法。

(二)相关知识

为了完成本关任务,你需要掌握:1.openGauss 的基本操作,2.SQL 权限控制语法。

(三)基础知识

默认情况下,用户只能访问属于自己的 schema 中的数据库对象。如果需要访问其他 schema 的对象,则该 schema 的所有者应该赋予他对该 schema 的 usage 权限。

通过将模式的 CREATE 权限授予某用户,被授权用户就可以在此模式中创建对象。注意默认情况下,所有角色都拥有在 public 模式上的 USAGE 权限,但是普通用户没有在 public 模式上的 CREATE 权限。普通用户能够连接到一个指定数据库并在它的 public 模式中创建对象是不安全的,如果普通用户具有在 public 模式上的 CREATE 权限则建议撤销该权限。

(四)示例语句

撤销 PUBLIC 在 public 模式下创建对象的权限,下面语句中第一个“public”是模式,第二个“PUBLIC”指的是所有角色:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;


使用以下命令查看现有的schema:

SELECT current_schema();


执行如下命令创建用户 jack,并将 myschema 的 usage 权限赋给用户 jack:

CREATE USER jack IDENTIFIED BY 'xxxxxxxxxx';
GRANT USAGE ON schema myschema TO jack;


将用户 jack 对于 myschema 的 usage 权限收回:

REVOKE USAGE ON schema myschema FROM jack;

(五)编程要求

根据提示,在右侧命令行进行操作,创建用户 jackson,密码设置为jackson@123,并将 dc_tcpp 的 usage 权限赋给用户 jackson。

(六)编程实现

问题:

实验中schema id不一致问题原因:多次创建了schema,schema的oid会递增,所以需要严格按照编程要求的顺序创建schema,并且题目中的关卡的数据库数据是基于前一关卡的,建议从题目的第一关重新做,这样会比较顺利。

或者可以退出实训并释放实验资源,创建与管理模式实验的第2关按照这个顺序完成是没有问题的。

 

相关文章:

openGauss数据库-头歌实验1-3 创建和管理模式

一、创建和使用模式 (一)任务描述 本关任务:基于 openGauss 学习创建模式的相关知识。 (二)相关知识 为了完成本关任务,你需要掌握:1.openGauss 的常用操作,2.SQL 创建模式相关语…...

森林火灾检测数据集(猫脸码客 第233期)

森林火灾检测数据集 森林火灾是一种具有巨大破坏性的自然灾害,每年在全球范围内造成巨大损失。为了有效应对森林火灾,及早发现和快速响应是至关重要的。传统上,森林火灾的检测主要依赖于人工巡逻和卫星遥感技术。然而,这些方法存…...

LeetCode100之找到字符串中所有字母异位词(438)--Java

1.问题描述 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 示例1 输入: s "cbaebabacd", p "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 …...

【Python】Python自习课:第一个python程序

【Python】Python自习课:第一个python程序...

DICOM标准:解析DICOM属性中的病人模块

目录 病人模块概述 1. 病人关系模块(Patient Relationship Module) 2. 病人识别模块(Patient Identification Module) 3. 病人统计模块(Patient Demographic Module) 4. 病人医学模块(Pati…...

C++设计模式创建型模式———生成器模式

文章目录 一、引言二、生成器/建造者模式三、总结 一、引言 上一篇文章我们介绍了工厂模式,工厂模式的主要特点是生成对象。当对象较简单时,可以使用简单工厂模式或工厂模式;而当对象相对复杂时,则可以选择使用抽象工厂模式。 工…...

基于微信小程序的校园失物招领系统的研究与实现(V4.0)

博主介绍:✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...

DDRNet模型创新实现人像分割

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【BiLSTM模型实现电力数据预测】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实…...

try…catch…finally语句里return语句的执行顺序是怎样的?

第一种情况 try语句块里面有return语句,catch语句块和finally语句块里面没有return语句。 代码如下: public class Main {public static void main(String[] args) {System.out.println(test1());}public static int test1() {int i 10;try {System.o…...

AIGC与虚拟现实(VR)的结合与应用前景

公主请阅 引言1. AIGC与VR的基本概念1.1 AIGC简介1.2 VR技术概述 2. AIGC在VR中的应用2.1 生成虚拟环境2.2 自动生成内容2.3 互动体验 3. AIGC与VR结合的应用案例3.1 教育培训3.2 娱乐与游戏3.3 心理治疗3.4 虚拟旅游 4. AIGC与VR结合的挑战4.1 技术限制4.2 用户体验4.3 数据隐…...

如何在visual studio中 生成 并 使用dll和lib文件

因为工作需求,要写lib和dll给别人使用。 使用visual studio2022 以函数 int getmyset() { return 0;} 为例子 首先 点击打开 visual studio 文件->新建->项目 选择windows桌面向导 选择应用程序类型为动态链接库.dll 分别创建MyDLL.h和MyDLL.cpp文件&a…...

「Mac畅玩鸿蒙与硬件15」鸿蒙UI组件篇5 - Slider 和 Progress 组件

Slider 和 Progress 是鸿蒙系统中的常用 UI 组件。Slider 控制数值输入,如音量调节;Progress 显示任务的完成状态,如下载进度。本文通过代码示例展示如何使用这些组件,并涵盖 进度条类型介绍、节流优化、状态同步 和 定时器动态更新。 关键词 Slider 组件Progress 组件节流…...

Iceoryx2:高性能进程间通信框架(中间件)

文章目录 0. 引言1. 主要改进2. Iceoryx2 的架构3. C示例代码3.1 发布者示例(publisher.cpp)3.2 订阅者示例(subscriber.cpp) 4. 机制比较5. 架构比较6. Iceoryx vs Iceoryx2参考资料 0. 引言 Iceoryx2 是一个基于 Rust 实现的开…...

构 造 器

我们创建了一个对象,在其中定义了属性,new一个对象,然后设置对应的属性,但是我们可以在new对象的时候,同时传入我们要设置的属性,这个时候就需要构造器。 特点 构造方法是一个特殊的成员方法,…...

草莓叶片病害识别与分类数据集(猫脸码客 第234期)

草莓叶片病害识别与分类数据集 草莓作为一种重要的经济作物,在全球范围内广泛种植。然而,草莓生产过程中常常受到各种病害的困扰,其中叶片病害尤为严重。为了有效识别、检测和分类草莓叶片病害,构建一个高质量的数据集是至关重要…...

微服务设计模式 - 断路器模式 (Circuit Breaker Pattern)

微服务设计模式 - 断路器模式 (Circuit Breaker Pattern) 定义 断路器模式(Circuit Breaker Pattern)是云计算和微服务架构中的一种保护性设计模式,其目的是避免系统中的调用链出现故障时,导致系统瘫痪。通过断路器模式&#xff…...

HarmonyOS NEXT 应用开发实战(九、知乎日报项目详情页实现详细介绍)

在本篇博文中,我们将探讨如何使用 HarmonyOS Next 框架开发一个知乎日报的详情页,逐步介绍所用到的组件及代码实现。知乎日报是个小巧完整的小项目,这是一个循序渐进的过程,适合初学者和有一定开发经验的工程师参考。 1. 项目背景…...

lvgl 模拟器移植(V9)

1.模拟器代码下载 1.1:通过git 下载 github链接:GitHub - lvgl/lv_port_pc_visual_studio: Visual Studio projects for LVGL embedded graphics library. Recommended on Windows. Linux support with Wayland is work in progress.https://github.com…...

基于vue+neo4j 的中药方剂知识图谱可视化系统

前言 历时一周时间,中药大数据R02系统中药开发完毕,该系统通过scrapy工程获取中药数据,使用python pandas预处理数据生成知识图谱和其他相关数据,利用vuespringbootneo4jmysql 开发系统,具体功能请看本文介绍。 简要…...

(自用)机器学习python代码相关笔记

一些自存的机器学习函数和详细方法记录,欢迎指错。 前言:读取数据方法 import pandas as pd import pandas as pddf pd.read_csv(数据集.csv, header0) # header是从哪一行开始读起,一般是0,也可以取infer 一、数据处理&#…...

docker复现pytorch_cyclegan

1、安装docker 配置docker镜像 添加镜像源至docker engine 2、wsl2安装nvidia-docker 要在Ubuntu中安装NVIDIA Docker,需要满足以下条件: 确保主机已安装NVIDIA的CUDA驱动程序,并使用适用于您操作系统的正确版本。 wsl --update在Ubuntu…...

IDEA2024下安装kubernetes插件并配置进行使用

【1】安装插件 其实2024.2.3下默认已经安装了kubernetes插件,如果你发现自己IDEA中没有,在市场里面检索并下载即可。 【2】kubernetes配置 ① 前置工作 首先你要准备一个config文件和一个kubectl.exe 。 config文件类似如下: apiVersi…...

理解原子变量之二:从volatile到内存序-进一步的认识

目录 实例1 实例2 实例3 内存序中两个最重要的概念 补记 结论 实例1 看下面的例子&#xff1a;在vs2013中建立如下工程&#xff1a; #include <thread> #include <iostream> #include <chrono>bool done false;void worker(){std::this_thread::sle…...

DICOM标准:MR图像模块属性详解——磁共振成像(MR)在DICOM中的应用

目录 引言 磁共振成像&#xff08;MR&#xff09; 一、MR图像模块 二、MR图像属性描述 1、图像类型 (Image Type) 2、抽样每个象素 (Sampling per Pixel) 3、光度插值 (Photometric Interpretation) 4、位分配 (Bits Allocated) 结论 引言 数字成像和通信在医学&#xff08…...

Linux内核与用户空间

Linux内核与用户空间是Linux操作系统中的两个重要概念&#xff0c;它们各自承担着不同的功能和职责&#xff0c;并通过特定的机制进行交互。以下是对Linux内核与用户空间的详细解释&#xff1a; 一、Linux内核 定义&#xff1a;Linux内核是Linux操作系统的核心组件&#xff0c…...

计算机网络-以太网小结

前导码与帧开始分界符有什么区别? 前导码--解决帧同步/时钟同步问题 帧开始分界符-解决帧对界问题 集线器 集线器通过双绞线连接终端, 学校机房的里面就有集线器 这种方式仍然属于共享式以太网, 传播方式依然是广播 网桥: 工作特点: 1.如果转发表中存在数据接收方的端口信息…...

找树根和孩子c++

题目描述 给定一棵树&#xff0c;输出树的根root&#xff0c;孩子最多的结点max以及他的孩子 输入 第一行&#xff1a;n&#xff08;0<结点数<100&#xff09;&#xff0c;m&#xff08;0<边数<200&#xff09;。 以下m行&#xff1b;每行两个结点x和y&#xf…...

植物源UDP-糖基转移酶及其分子改造-文献精读75

植物源UDP-糖基转移酶及其分子改造 摘要 糖基化能够增加化合物的结构多样性,有效改善水溶性、药理活性和生物利用度,对植物天然产物的药物开发至关重要。UDP-糖基转移酶(UGTs)能够催化糖基从活化的核苷酸糖供体转移到受体形成糖苷键,植物中天然产物的糖基化修饰主要通过UGTs实…...

Redis中String 的底层实现是什么?

Redis中String 的底层实现是什么&#xff1f; Redis 是基于 C 语言编写的&#xff0c;但 Redis 的 String 类型的底层实现并不是 C 语言中的字符串&#xff08;即以空字符 \0 结尾的字符数组&#xff09;&#xff0c;而是自己编写了 SDS&#xff08;Simple Dynamic String&…...

像mysql一样查询es

先简单介绍一下这个sql查询&#xff0c;因为社区一直反馈这个Query DSL 实在是太难用了。大家可以感受一下下面这个es的查询。 GET /my_index/_search { “query”: { “bool”: { “must”: [ { “match”: { “title”: “search” } }, { “bool”: { “should”: [ { “te…...