openGauss学习笔记-47 openGauss 高级数据管理-权限
文章目录
- openGauss学习笔记-47 openGauss 高级数据管理-权限
- 47.1 语法格式
- 47.2 参数说明
- 47.3 示例
openGauss学习笔记-47 openGauss 高级数据管理-权限
数据库对象创建后,进行对象创建的用户就是该对象的所有者。数据库安装后的默认情况下,未开启三权分立,数据库系统管理员具有与对象所有者相同的权限。也就是说对象创建后,默认只有对象所有者或者系统管理员可以查询、修改和销毁对象,以及通过GRANT将对象的权限授予其他用户。
为使其他用户能够使用对象,必须向用户或包含该用户的角色授予必要的权限。
要撤销已经授予的权限,可以使用REVOKE。对象所有者的权限(例如ALTER、 DROP、COMMENT、INDEX、VACUUM、GRANT和REVOKE)是隐式拥有的,即只要拥有对象就可以执行对象所有者的这些隐式权限。对象所有者可以撤销自己的普通权限,例如,使表对自己以及其他人只读,系统管理员用户除外。
openGauss支持以下的权限,不同的权限与不同的对象类型关联:
- SELECT:允许对指定的表、视图、序列执行SELECT命令,UPDATE或DELETE时也需要对应字段上的SELECT权限。
- INSERT:允许对指定的表执行INSERT命令。
- UPDATE:允许对声明的表中任意字段执行UPDATE命令。通常,UPDATE命令也需要SELECT权限来查询出哪些行需要更新。SELECT… FOR UPDATE、SELECT… FOR NO KEY UPDATE、SELECT… FOR SHARE和SELECT… FOR KEY SHARE除了需要SELECT权限外,还需要UPDATE权限。
- DELETE:允许执行DELETE命令删除指定表中的数据。通常,DELETE命令也需要SELECT权限来查询出哪些行需要删除。
- TRUNCATE:允许执行TRUNCATE命令删除指定表中的所有记录。
- REFERENCES:创建一个外键约束,必须拥有参考表和被参考表的REFERENCES权限。
- CREATE:
- 对于数据库,允许在数据库里创建新的模式。
- 对于模式,允许在模式中创建新的对象。如果要重命名一个对象,用户除了必须是该对象的所有者外,还必须拥有该对象所在模式的CREATE权限。
- 对于表空间,允许在表空间中创建表,允许在创建数据库和模式的时候把该表空间指定为缺省表空间。
- CONNECT:允许用户连接到指定的数据库。
- EXECUTE:允许使用指定的函数,以及利用这些函数实现的操作符。
- USAGE:
- 对于过程语言,允许用户在创建函数的时候指定过程语言。
- 对于模式,USAGE允许访问包含在指定模式中的对象,若没有该权限,则只能看到这些对象的名称。
- 对于序列,USAGE允许使用nextval函数。
- 对于Data Source对象,USAGE是指访问权限,也是可赋予的所有权限,即USAGE与ALL PRIVILEGES等价。
- ALTER:允许用户修改指定对象的属性,但不包括修改对象的所有者和修改对象所在的模式。
- DROP:允许用户删除指定的对象。
- COMMENT:允许用户定义或修改指定对象的注释。
- INDEX:允许用户在指定表上创建索引,并管理指定表上的索引,还允许用户对指定表执行REINDEX和CLUSTER操作。
- VACUUM:允许用户对指定的表执行ANALYZE和VACUUM操作。
- ALL PRIVILEGES:一次性给指定用户/角色赋予所有可赋予的权限。只有系统管理员有权执行GRANT ALL PRIVILEGES。
47.1 语法格式
-
GRANT
对角色和用户进行授权操作。使用GRANT命令进行用户授权包括三种场景:
-
将系统权限(例如sysadmin、CREATEDB、CREATEROLE等)授权给角色或用户
将sysadmin权限赋予指定的角色的语法如下。
GRANT ALL { PRIVILEGES | PRIVILEGE }TO role_name; -
将角色或用户的权限授权给其他角色或用户
将角色的权限赋予其他用户或角色的语法如下。
GRANT role_name [, ...]TO role_name [, ...][ WITH ADMIN OPTION ]; -
将数据库对象授权给角色或用户
-
将表或视图的访问权限赋予指定的用户或角色。
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | ALTER | DROP | COMMENT | INDEX | VACUUM } [, ...] | ALL [ PRIVILEGES ] }ON { [ TABLE ] table_name [, ...]| ALL TABLES IN SCHEMA schema_name [, ...] }TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; -
将表中字段的访问权限赋予指定的用户或角色。
GRANT { {{ SELECT | INSERT | UPDATE | REFERENCES | COMMENT } ( column_name [, ...] )} [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }ON [ TABLE ] table_name [, ...]TO { [ GROUP ] role_name | PUBLIC } [, ...][ WITH GRANT OPTION ]; -
将数据库的访问权限赋予指定的用户或角色。
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP | ALTER | DROP | COMMENT } [, ...]| ALL [ PRIVILEGES ] }ON DATABASE database_name [, ...]TO { [ GROUP ] role_name | PUBLIC } [, ...][ WITH GRANT OPTION ]; -
将模式的访问权限赋予指定的用户或角色。
GRANT { { CREATE | USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] }ON SCHEMA schema_name [, ...]TO { [ GROUP ] role_name | PUBLIC } [, ...][ WITH GRANT OPTION ];
说明: 将模式中的表或者视图对象授权给其他用户时,需要将表或视图所属的模式的USAGE权限同时授予该用户,若没有该权限,则只能看到这些对象的名称,并不能实际进行对象访问。 同名模式下创建表的权限无法通过此语法赋予,可以通过将角色的权限赋予其他用户或角色的语法,赋予同名模式下创建表的权限。 -
将表空间的访问权限赋予指定的用户或角色。
GRANT { { CREATE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] }ON TABLESPACE tablespace_name [, ...]TO { [ GROUP ] role_name | PUBLIC } [, ...][ WITH GRANT OPTION ];
-
-
-
REVOKE
-
撤销角色或用户的系统权限(例如sysadmin、CREATEDB、CREATEROLE等)
回收角色上的sysadmin权限。
REVOKE ALL { PRIVILEGES | PRIVILEGE } FROM role_name; -
回收角色上的权限。
REVOKE [ ADMIN OPTION FOR ]role_name [, ...] FROM role_name [, ...][ CASCADE | RESTRICT ]; -
回收数据库对象上的权限
-
回收指定表或视图上权限。
REVOKE [ GRANT OPTION FOR ]{ { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | ALTER | DROP | COMMENT | INDEX | VACUUM }[, ...] | ALL [ PRIVILEGES ] }ON { [ TABLE ] table_name [, ...]| ALL TABLES IN SCHEMA schema_name [, ...] }FROM { [ GROUP ] role_name | PUBLIC } [, ...][ CASCADE | RESTRICT ]; -
回收表上指定字段权限。
REVOKE [ GRANT OPTION FOR ]{ {{ SELECT | INSERT | UPDATE | REFERENCES | COMMENT } ( column_name [, ...] )}[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }ON [ TABLE ] table_name [, ...]FROM { [ GROUP ] role_name | PUBLIC } [, ...][ CASCADE | RESTRICT ]; -
回收指定数据库上权限。
REVOKE [ GRANT OPTION FOR ]{ { CREATE | CONNECT | TEMPORARY | TEMP | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] }ON DATABASE database_name [, ...]FROM { [ GROUP ] role_name | PUBLIC } [, ...][ CASCADE | RESTRICT ]; -
回收指定模式上权限。
REVOKE [ GRANT OPTION FOR ]{ { CREATE | USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] }ON SCHEMA schema_name [, ...]FROM { [ GROUP ] role_name | PUBLIC } [, ...][ CASCADE | RESTRICT ]; -
回收指定表空间上权限。
REVOKE [ GRANT OPTION FOR ]{ { CREATE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] }ON TABLESPACE tablespace_name [, ...]FROM { [ GROUP ] role_name | PUBLIC } [, ...][ CASCADE | RESTRICT ];
-
-
47.2 参数说明
-
role_name
已存在用户名称。
-
table_name
已存在表名称。
-
column_name
已存在字段名称。
-
schema_name
已存在模式名称。
-
database_name
已存在数据库名称。
-
tablespace_name
表空间名称。
-
WITH GRANT OPTION
如果声明了WITH GRANT OPTION,则被授权的用户也可以将此权限赋予他人,否则就不能授权给他人。这个选项不能赋予PUBLIC。
47.3 示例
-
将系统权限授权给用户或者角色。
创建名为joe的用户,并将sysadmin权限授权给他。
openGauss=# CREATE USER joe PASSWORD 'xxxxxxxx'; CREATE ROLE openGauss=# GRANT ALL PRIVILEGES TO joe; ALTER ROLE授权成功后,用户joe会拥有sysadmin的所有权限。
-
将对象权限授权给用户或者角色。
-
创建模式test以及表customer。
openGauss=# CREATE SCHEMA test; CREATE SCHEMAopenGauss=# CREATE TABLE customer (c_customer_sk integer,c_customer_id char(5),c_first_name char(6),c_last_name char(8),Amount integer ); CREATE TABLE -
撤销joe用户的sysadmin权限,然后将模式test的使用权限和表customer的所有权限授权给用户joe。
openGauss=# REVOKE ALL PRIVILEGES FROM joe; ALTER ROLE openGauss=# GRANT USAGE ON SCHEMA test TO joe; GRANT openGauss=# GRANT ALL PRIVILEGES ON customer TO joe; GRANT授权成功后,joe用户就拥有了customer表的所有权限,包括增删改查等权限。
-
将表customer中c_customer_sk、c_customer_id、c_first_name列的查询权限,c_last_name的更新权限授权给joe。
openGauss=# GRANT select (c_customer_sk,c_customer_id,c_first_name),update (c_last_name) ON customer TO joe; GRANT授权成功后,用户joe对表customer中c_customer_sk,c_customer_id,c_first_name的查询权限会立即生效。如果joe用户需要拥有将这些权限授权给其他用户的权限,可以通过以下语法对joe用户进行授权。
openGauss=# GRANT select (c_customer_sk,c_customer_id,c_first_name) ON customer TO joe WITH GRANT OPTION; GRANT将数据库postgres的连接权限授权给用户joe,并给予其在postgres中创建schema的权限,而且允许joe将此权限授权给其他用户。
openGauss=# GRANT create,connect on database postgres TO joe WITH GRANT OPTION; GRANT创建角色test_manager,将模式test的访问权限授权给角色test_manager,并授予该角色在test下创建对象的权限,不允许该角色中的用户将权限授权给其他人。
openGauss=# CREATE ROLE test_manager PASSWORD 'xxxxxxxx'; CREATE ROLE openGauss=# GRANT USAGE,CREATE ON SCHEMA test TO test_manager; GRANT创建表空间tpcds_tbspc,并将表空间的所有权限授权给用户joe,但用户joe无法将权限继续授予其他用户。
openGauss=# CREATE TABLESPACE tpcds_tbspc RELATIVE LOCATION 'tablespace/tablespace_1'; CREATE TABLESPACE openGauss=# GRANT ALL ON TABLESPACE tpcds_tbspc TO joe; GRANT
-
-
将用户或者角色的权限授权给其他用户或角色。
-
创建角色manager,将joe的权限授权给manager,并允许该角色将权限授权给其他人。
openGauss=# CREATE ROLE manager PASSWORD 'xxxxxxxx'; CREATE ROLE openGauss=# GRANT joe TO manager WITH ADMIN OPTION; GRANT ROLE -
创建用户senior_manager,将用户manager的权限授权给该用户。
openGauss=# CREATE ROLE senior_manager PASSWORD 'xxxxxxxx'; CREATE ROLE openGauss=# GRANT manager TO senior_manager; GRANT ROLE
-
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

相关文章:
openGauss学习笔记-47 openGauss 高级数据管理-权限
文章目录 openGauss学习笔记-47 openGauss 高级数据管理-权限47.1 语法格式47.2 参数说明47.3 示例 openGauss学习笔记-47 openGauss 高级数据管理-权限 数据库对象创建后,进行对象创建的用户就是该对象的所有者。数据库安装后的默认情况下,未开启三权分…...
开始MySQL之路——MySQL 事务(详解分析)
MySQL 事务概述 MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等…...
注解和class对象和mysql
注解 override 通常是用在方法上的注解表示该方法是有重写的 interface 表示一个注解类 比如 public interface override{} 这就表示是override是一个注解类 target 修饰注解的注解表示元注解 deprecated 修饰某个元素表示该元素已经过时了 1.不代表该元素不能用了&…...
【桌面小屏幕项目】ESP32开发环境搭建
视频教程链接: 【【有手就行系列】嵌入式单片机教程-桌面小屏幕实战教学 从设计、硬件、焊接到代码编写、调试 ESP32 持续更新2022】 https://www.bilibili.com/video/BV1wV4y1G7Vk/?share_sourcecopy_web&vd_source4fa5fad39452b08a8f4aa46532e890a7 一、esp…...
CSS 滚动容器与固定 Tabbar 自适应的几种方式
问题 容器高度使用 px 定高时,随着页面高度发生变化,组件展示的数量不能最大化的铺满,导致出现底部留白。容器高度使用 vw 定高时,随着页面宽度发生变化,组件展示的数量不能最大化的铺满,导致出现底部留白…...
IP 地址追踪工具
IP 地址跟踪工具是一种网络实用程序,允许您扫描、跟踪和获取详细信息,例如 IP 地址的 MAC 和接口 ID。IP 跟踪解决方案通过使用不同的网络扫描协议来检查网络地址空间来收集这些详细信息。一些高级 IP 地址跟踪器软件(如 OpUtils)…...
最新企业网盘产品推荐榜发布
随着数字化发展,传统的文化存储方式已无法跟上企业发展的步伐。云存储的出现为企业提供了新的文件管理存储模式。企业网盘作为云存储的代表性工具,被越来越多的企业所青睐。那么在众多企业网盘产品中,企业该如何找到合适的企业网盘呢…...
实用的面试经验分享:程序员们谈论他们的面试历程
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
6.oracle中listagg函数使用
1. 作用 可以实现行转列,将多列数据聚合为一列,实现数据的压缩 2. 语法 listagg(measure_expr,delimiter) within group ( order by order_by_clause); 解释: measure_expr可以是基于任何列的表达式 delimiter分隔符,…...
习题练习 C语言(暑期)
编程能力小提升! 前言一、转义字符二、重命名与宏定义三、三目运算符四、计算日期到天数转换五、计算字符串长度六、宏定义应用七、const常量八、C语言基础九、const常量(二)十、符号运算十一、记负均正十二、SWITCH,CASE十三、错…...
C++中虚函数表的概念
当一个类对象指针调用虚函数时,这就涉及到 运行时多态 的概念。这意味着实际调用的函数取决于对象的实际类型,而不仅仅是指针的静态类型。 假设我们有以下的类层次结构: class Base { public:virtual void print() {std::cout << &qu…...
代码随想录算法训练营第四十八天 | 198.打家劫舍,213.打家劫舍II,337.打家劫舍III
代码随想录算法训练营第四十八天 | 198.打家劫舍,213.打家劫舍II,337.打家劫舍III 198.打家劫舍213.打家劫舍II337.打家劫舍III 198.打家劫舍 题目链接 视频讲解 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金ÿ…...
uniapp项目实战系列(1):导入数据库,启动后端服务,开启代码托管
目录 前言前期准备1.数据库的导入2.运行后端服务2.1数据库的后端配置2.2后端服务下载依赖,第三方库2.3启动后端服务 3.开启gitcode代码托管 ✨ 原创不易,还希望各位大佬支持一下! 👍 点赞,你的认可是我创作的动力&…...
在互联网+的背景下,企业如何创新客户服务?
随着互联网的发展,开始数字化转型的潮流,移动互联网平台为各个行业带来了发展的新方向。企业有了移动互联网的加持,为客户提供了更好的服务。当移动互联网平台能够为客户提供更好的用户体验时,相应地,客户也给企业带来…...
国内的化妆品核辐射检测
化妆品核辐射物质检测是指检测化妆品中的放射性物质,包括放射性核素和放射性同位素。这些放射性物质主要来源于环境中的放射性污染,如空气、水和土壤中的放射性物质,以及化妆品生产过程中的放射性污染,如原料、设备、工艺等。化妆…...
春秋云镜:CVE-2019-9042(Sitemagic CMS v4.4 任意文件上传漏洞)
一、题目 靶标介绍: Sitemagic CMS v4.4 index.php?SMExtSMFiles 存在任意文件上传漏洞,攻击者可上传恶意代码执行系统命令。 进入题目: admin/admin /index.php?SMExtSMFiles&SMTemplateTypeBasic&SMExecModeDedicated&SMFil…...
20230828工作日志:
今天遇到了很多问题,下次可以做得更好更快的几个地方: 1 sql语句的检查 肯定要先在navicate 里执行看,是否有语法错误。即使没有,也还是要注意一些问题:IDEA里换行的时候,“后面要空一格,如果连…...
flink on yarn 部署
需要jars -rwxr-xrwx 3 root supergroup 58284 2022-11-30 03:44 /lib/flink/commons-cli-1.5.0.jar -rw-r--r-- 3 root supergroup 48497 2022-12-10 03:04 /lib/flink/flink-cep-scala_2.12-1.14.3.jar -rw-r--r-- 3 root supergroup 189468 2022-12-10…...
postgresql基于postgis常用空间函数
1、ST_AsGeoJSON 图元转geojson格式 select ST_AsGeoJSON(l.geom) from g_zd l limit 10 2、 ST_Transform 坐标转换 select st_transform(l.shape, 3857) from sde_wf_cyyq l limit 10select st_astext(st_transform(l.shape, 3857)) from sde_wf_cyyq l limit 103、st_aste…...
详细讲解移植u-boot.2022.10版本移植到开发板基本方法
大家好,我是ST。 今天给大家讲一讲如何将u-boot.2022.10版本移植到imx6ull开发板上。 环境 选项内容编译主机UbuntuLTS 18.04目标板ATK I.MX6ULL(512MB DDR3 8GB EMMC)u-boot版本2022.10交叉编译工具链gcc-linaro-7.5.0-2019.12-i686…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...
