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 ];
        

        img 说明: 将模式中的表或者视图对象授权给其他用户时,需要将表或视图所属的模式的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的所有权限。

  • 将对象权限授权给用户或者角色。

    1. 创建模式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
      
    2. 撤销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表的所有权限,包括增删改查等权限。

    3. 将表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
      
  • 将用户或者角色的权限授权给其他用户或角色。

    1. 创建角色manager,将joe的权限授权给manager,并允许该角色将权限授权给其他人。

      openGauss=# CREATE ROLE manager PASSWORD 'xxxxxxxx';
      CREATE ROLE
      openGauss=# GRANT joe TO manager WITH ADMIN OPTION;
      GRANT ROLE
      
    2. 创建用户senior_manager,将用户manager的权限授权给该用户。

      openGauss=# CREATE ROLE senior_manager PASSWORD 'xxxxxxxx';
      CREATE ROLE
      openGauss=# GRANT manager TO senior_manager;
      GRANT ROLE
      

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

图片

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

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

相关文章

使用ELK(ES+Logstash+Filebeat+Kibana)收集nginx的日志

文章目录 Nginx日志格式修改配置logstash收集nginx日志引入Redis收集日志写入redis从redis中读取日志 引入FilebeatFilebeat简介Filebeat安装和配置 配置nginx转发ES和kibanaELK设置账号和密码 书接上回:《ELK中Logstash的基本配置和用法》 Nginx日志格式修改 默认…

Gorilla LLM:连接海量 API 的大型语言模型

如果你对这篇文章感兴趣,而且你想要了解更多关于AI领域的实战技巧,可以关注「技术狂潮AI」公众号。在这里,你可以看到最新最热的AIGC领域的干货文章和案例实战教程。 一、前言 在当今这个数字化时代,大型语言模型(LLM…

利用多种机器学习方法对爬取到的谷歌趋势某个关键词的每日搜索次数进行学习

大家好,我是带我去滑雪! 前一期利用python爬取了谷歌趋势某个关键词的每日搜索次数,本期利用爬取的数据进行多种机器学习方法进行学习,其中方法包括:随机森林、XGBOOST、决策树、支持向量机、神经网络、K邻近等方法&am…

聚类分析 | MATLAB实现基于DBSCAD密度聚类算法可视化

聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化 目录 聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于DBSCAD密度聚类算法可视化,MATLAB程序。 使用带有KD树加速的dbscan_with_kdtree函数进行…

uniapp项目实战系列(1):导入数据库,启动后端服务,开启代码托管

目录 前言前期准备1.数据库的导入2.运行后端服务2.1数据库的后端配置2.2后端服务下载依赖,第三方库2.3启动后端服务 3.开启gitcode代码托管 ✨ 原创不易,还希望各位大佬支持一下! 👍 点赞,你的认可是我创作的动力&…

vscode编译C语言

首先把c文件拖到vscode中 然后安装这个插件 安装完毕后会提示你代码中的语法错误,并在编译器的右上角出现编译按钮 我当前的问题是没有GCC,我们点一下编译的按钮也可以看出来这个问题 在 django笔记中 附录二 windows上直接安装uwsgi(不可行) 附录二 win…

【Go 基础篇】切片:Go语言中的灵活数据结构

在Go语言中,切片(Slice)是一种强大且灵活的数据结构,用于管理和操作一系列元素。与数组相比,切片的大小可以动态调整,这使得它成为处理动态数据集合的理想选择。本文将围绕Go语言中切片的引入,介…

243:vue+Openlayers 更改鼠标滚轮缩放地图大小,每次缩放小一点

第243个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayers项目中设置鼠标滚轮缩放地图大小,每次滑动一格滚轮,设定的值非默认值1。具体的设置方法,参考源代码。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源…

科技政策 | 四川省科学技术厅关于发布2024年第一批省级科技计划项目申报指南的通知

原创 | 文 BFT机器人 近日,四川省科学技术厅发布了2024年第一批省级科技计划项目申报指南;其中包括自然科学基金项目、重点研发计划、科技成果转移转化引导计划、科技创新基地(平台)和人才计划。 01 自然科学基金项目 实施周期 …

全景图像生成算法

摘要 全景图像生成是计算机视觉领域的一个重要研究方向。本文对五种经典的全景图像生成算法进行综述,包括基于相机运动估计的算法、基于特征匹配的算法、基于图像切割的算法、基于多项式拟合的算法和基于深度学习的算法。通过对这些算法的原理、优缺点、适用场景等…

68、使用aws官方的demo和配置aws服务,进行视频流上传播放

基本思想:参考官方视频,进行了配置aws,测试了视频推流,rtsp和mp4格式的视频貌似有问题,待调研和解决 第一步:1) 进入aws的网站,然后进入ioT Core 2)先配置 Thing types & Thing,选择香港的节点,然后AWS ioT--->Manage---> Thing type 然后输入名字,创建Th…

C语言_分支和循环语句(2)

文章目录 前言一、for 循环1.1语法1.2 for 语句的循环控制变量1.3 一些 for 循环的变种 二、do ... while()循环2.1 do 语句的语法2.2 do ... while 循环中的 break 和 continue2.3 练习1 **- 计算n的阶乘**2. - **在一个有序数组中查找具体的某个数字 n** 二分查找算法&#x…

基于社交网络算法优化的BP神经网络(预测应用) - 附代码

基于社交网络算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于社交网络算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.社交网络优化BP神经网络2.1 BP神经网络参数设置2.2 社交网络算法应用 4.测试结果:5…

Java【手撕双指针】LeetCode 18. “四数之和“, 图文详解思路分析 + 代码

文章目录 前言一、四数之和1, 题目2, 思路分析3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 📗 Java数据结构: 顺序表, 链表, 堆…

Docker--harbor私有仓库部署与管理

目录 1、搭建本地私有仓库 #首先下载 registry 镜像 #在 daemon.json 文件中添加私有镜像仓库地址 #运行 registry 容器 #为镜像打标签 #上传到私有仓库 #列出私有仓库的所有镜像 ​ #列出私有仓库的 centos 镜像有哪些tag ​ #先删除原有的 centos 的镜像,再测试…

什么是响应式图片?如何在网页中实现响应式图片?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 响应式图片&#xff08;Responsive Images&#xff09;⭐ 实现响应式图片的方法1. 使用<img>标签的srcset属性2. 使用<picture>元素3. 使用CSS的max-width属性4. 使用响应式图片库 ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&…

4.RabbitMQ高级特性 幂等 可靠消息 等等

一、如何保证生产者生产消息100%的投递成功 保障消息的成功发出保障MQ节点的成功接收发送端收到MQ节点&#xff08;Broker&#xff09;确认应答完善的消息进行补偿机制 1. 理解Confirm确认消息机制 消息的确认&#xff0c;是指生产者投递消息后&#xff0c;如果Broker收到消…

自然语言处理2-NLP

目录 自然语言处理2-NLP 如何把词转换为向量 如何让向量具有语义信息 在CBOW中 在Skip-gram中 skip-gram比CBOW效果更好 CBOW和Skip-gram的算法实现 Skip-gram的理想实现 Skip-gram的实际实现 自然语言处理2-NLP 在自然语言处理任务中&#xff0c;词向量&#xff08;…

Linux知识点 -- 网络基础(一)

Linux知识点 – 网络基础&#xff08;一&#xff09; 文章目录 Linux知识点 -- 网络基础&#xff08;一&#xff09;一、网络发展二、协议1.OSI七层模型2.TCP/IP五层&#xff08;或四层&#xff09;模型 三、网络传输基本流程1.局域网中的两台主机通信流程2.跨网段的两台主机间…

Vue中使用vue-drag-resize实现窗体可拖拽和随意缩放大小

场景 若依前后端分离版手把手教你本地搭建环境并运行项目&#xff1a; 若依前后端分离版手把手教你本地搭建环境并运行项目_ruoyi本地调式_霸道流氓气质的博客-CSDN博客 在上面的基础上&#xff0c;实现弹窗窗体可移动以及随意缩放大小。 效果如下 注&#xff1a; 博客&am…