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关按照这个顺序完成是没有问题的。

 

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

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

相关文章

基于springboot+vue实现的任务管理系统(源码+L文)4-103

第4章 系统设计 4.1 总体功能设计 员工,经理,管理员都需要登录才能进入任务管理系统,使用者登录时会在后台判断使用的权限类型,包括一般使用者和管理者,一般使用者为员工和经理,对员工只能提供任务信息显示查询&…

PlotNeuralNet学习与入门

最近在绘制神经网络结构图,发现了一个开源的工具:PlotNeuralNet Github网址链接: HarisIqbal88/PlotNeuralNet: Latex code for making neural networks diagrams 一些相关的教程: 视频教程链接:【Alu】PlotNeuralN…

c怎么与python交互

ctypes是Python的一个外部库,可以使用python语言调用已经编译好的C语言函数以及数据类型并进行数据交换等。ctypes的官方文档在https://docs.python.org/3/library/ctypes.html 1、ctypes基本数据类型映射表 2、python调用c语言的函数库 (1&#xff09…

less解决function中return写法在浏览器被识别成Object导致样式失败的问题

问题描述: 一开始写的是: baseFontSize: 37.5px;//基于屏幕尺寸/10得出的基准font-size// return失败,浏览器显示为[object Object],[object Object] .pxToRem(px){value: px / baseFontSize * 1rem;return value; } 使用height: .pxToRem(40px);之后浏览器却是这…

VR 创业之路:从《I Expect You To Die》到未来展望

今年是 Reality Labs 成立 10 周年,Meta 每周都会与不同的 XR 先驱进行交流,探讨他们在行业中的经历、经验教训以及对未来的展望。本次,他们与游戏设计师、作家兼 Schell Games CEO Jesse Schell 进行了深入交谈,了解了他的个人故…

面试经典 150 题:189、383

189. 轮转数组 【参考代码】 class Solution { public:void rotate(vector<int>& nums, int k) {int size nums.size();if(1 size){return;}vector<int> temp(size);//k k % size;for(int i0; i<size; i){temp[(i k) % size] nums[i];}nums temp; }…

数据结构 —— AVL树

目录 1. AVL的概念 2.AVL树的结构 3.AVL树的插入 3.1 平衡因子更新 4. 旋转 4.1 旋转的原则 4.2 右单旋 4.2.1 右单旋代码实现 4.3 左单旋 4.3.1 左单旋代码实现 4.4 左右双旋 4.4.1 左右双旋代码实现 4.5 右左双旋 ​编辑 4.5.1 右左双旋代码实现 5. AVL树的判断…

交换机如何实现2.5G网络传输速率和网络变压器有关吗

华强盛电子导读&#xff1a;I19926430038 交换机实现2.5G网络传输速率涉及多个因素&#xff0c;其中包括硬件设计、端口支持、传输介质以及网络协议等。网络变压器在其中扮演了一个重要的角色&#xff0c;但并不是唯一的因素。 1. **硬件设计**&#xff1a;交换机需要有支持2.…

「C/C++」C++设计模式 之 抽象工厂模式(Abstract Factory)

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

【pycharm jupyter】启动报错

报错信息 upyter server process exited with code 1 ServerApp] A _jupyter_server_extension_points function was not found in jupyter_lsp. Instead, a _jupyter_server_extension_paths function was found and will be used for now. This function name will be depre…

精密机械代加工服务,为你的企业加速发展!

在当今竞争激烈的工业领域&#xff0c;精密机械代加工服务正成为众多企业实现快速发展的关键助力。这种专业服务凭借其独特的优势&#xff0c;为企业解决了诸多生产难题&#xff0c;推动企业在市场中大步向前。 先进的技术与设备 精密机械代加工服务提供商通常配备了先进的加工…

Data+AI━━揭秘千亿参数背后的技术较量:全球巨头的大模型布局!

DataAI━━揭秘千亿参数背后的技术较量&#xff1a;全球巨头的大模型布局&#xff01; 前言大语言模型:AI技术创新的新高地智能技术创新的"深水区"智能革命的下一站 前言 站在2024年科技创新的潮头&#xff0c;一场由大语言模型引发的技术革命正在上演。从ChatGPT引爆…

jmeter压测工具环境搭建(Linux、Mac)

目录 java环境安装 1、anaconda安装java环境&#xff08;推荐&#xff09; 2、直接在本地环境安装java环境 yum方式安装jdk 二进制方式安装jdk jmeter环境安装 1、jmeter单机安装 启动jmeter 配置环境变量 jmeter配置中文 2、jmeter集群搭建 多台机器部署jmeter集群…

草料二维码:低成本高效率的访客管理解决方案

在当前的商业和政治环境中&#xff0c;企业和政府机构越来越重视安全保密措施&#xff0c;尤其是对外来人员的行踪记录和管理。访客管理已成为企业运营中不可或缺的一环&#xff0c;它不仅提升了安全性&#xff0c;还增强了效率和便捷性。然而&#xff0c;许多机构仍在使用传统…

AOSP刷机

手机电脑都换了 从新复习一下吧 刷机分为几类 线刷 介质&#xff1a;通过USB数据线连接手机与电脑。 方法&#xff1a;通常使用专门的刷机工具&#xff08;如ADB、Fastboot、Odin等&#xff09;将ROM文件直接刷入设备。 优点&#xff1a;一般可以进行更全面的刷机操作&#x…

unocss 添加支持使用本地 svg 预设图标,并支持更改大小

安装 pnpm install iconify/utils 在配置文件 unocss.config.ts&#xff1a; presets > presetIcons 选项中 通过 FileSystemIconLoader 加载本地图标&#xff0c;并指定目录。 import presetWeapp from unocss-preset-weapp import { extractorAttributify, transformer…

一篇文章理解CSS垂直布局方法

方法1&#xff1a;align-content: center 在 2024 年的 CSS 原生属性中允许使用 1 个 CSS 属性 align-content: center进行垂直居中。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewpo…

基于STM32+华为云IOT设计的大棚育苗管理系统

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 1.5 模块的技术详情介绍【1】NBIOT-BC26模块【2】MQ135传感器【4】SHT30传感器【5】B1750传感器 二…

小家电常用防水触摸IC

小家电常用防水触摸IC 挑战100个ICMAN“芯”实验-小家电常用防水触摸IC 电容式触摸芯片通常用于实现触摸控制&#xff0c;可轻松解决家用电器常见的触摸感应不灵敏和有水误触发的问题&#xff0c;优化了用户的交互使用体验&#xff0c;从而有效实现控制面板触摸按键的触摸感应和…

C++和OpenGL实现3D游戏编程【连载17】——着色器进阶

欢迎来到zhooyu的专栏。 主页网址&#xff1a;【zhooyu】 专栏网址&#xff1a;【C和OpenGL实现3D游戏编程】 &#x1f31f;&#x1f31f;&#x1f31f;这里将通过一个OpenGL实现3D游戏编程实例教程&#xff0c;带大家深入学习OpenGL知识。知识无穷而人力有穷&#xff0c;希望…