openGauss学习笔记-47 openGauss 高级数据管理-权限

news2024/11/23 15:27:15

文章目录

    • 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 SCHEMA
      
      openGauss=# 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.coloradmin.cn/o/913645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5、Spring_DI注解开发

DI 注解开发 1.目前面临问题 建立 mapper public interface EmployeeMapper {void save(); }建立 mapper 实现类 Repository public class EmployeeMapperImpl implements EmployeeMapper {public void save(){System.out.println("保存员工信息");} }建立 service …

档案开发:增加查询和打卡按钮

档案开发:增加查询和打卡按钮 和单据开发的不同点 没有单据类型不是右击–>特性–>单据主表/单据子表,而是右击–>特性–>选择想要的接口访问器类型是NCVO不需要映射不是项目右键–>新建–>其他–>主子表单据结点,而是…

怕封店吗?来看看这份亚马逊测评宝典吧!

测评,一直是跨境电商亚马逊行业常谈论的话题,因为它是获取销量最快的方法之一,但对于测评,跨境电商亚马逊平台也是深恶痛绝,严厉打击测评行为,但不少的卖家仍旧喜欢铤而走险,做测评去提高店铺的…

Python打印七夕礼物

参考: python写七夕硬核礼物! - 周旋机器视觉的文章 - 知乎 https://zhuanlan.zhihu.com/p/196451223 # -*- coding:utf-8 -*-# 导入opencv和openpyxl import openpyxl import cv2 as cv import numpy as np from openpyxl import load_workbook from o…

组织机构代码,注册号,纳税人识别号有什么区别?海关备案是什么?

组织机构代码,注册号,纳税人识别号有什么区别? 之前写过关于企业信用代码的文章,今天来讲一下企业的三证合一。三证合一指的是将识别号,注册号,组织机构代码三者共用一个号的说法。 但是,你看…

群英荟萃,决战渝城 | 第七届集创赛“加速科技杯”总决赛圆满落幕!

8月20-22日,第七届全国大学生集成电路创新创业大赛全国总决赛在重庆举办,“加速科技杯”中有26支优秀队伍从四百多支报名队伍中脱颖而出,获得总决赛各项大奖,取得了优异的成绩!大赛同期举办的还有集创赛嘉年华、人才对…

python 项目打包器pyinstaller实践

在创建了独立应用(自包含该应用的依赖包)之后,还可以使用 PyInstaller 将 Python 程序生成可直接运行的程序,这个程序就可以被分发到对应的 Windows 或 Mac OS X 平台上运行。 安装 PyInstalle Python 默认并不包含 PyInstaller…

高隔音活动隔断墙是一种设计用于隔离声音、提供隐私和创建灵活空间的分隔墙

高隔音活动隔断墙是一种设计用于隔离声音、提供隐私和创建灵活空间的分隔墙。这种隔断墙通常在需要随时改变房间布局的场合,如酒店、会议中心、展览厅、办公室等地使用。 以下是有关高隔音活动隔断墙的一些重要特点和优势: 1. 隔音性能:高隔音…

Protobuf在IDEA中的插件安装教程

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

【中危】Apache Ivy<2.5.2 存在XXE漏洞 (CVE-2022-46751)

漏洞描述 Apache Ivy 是一个管理基于 ANT 项目依赖关系的开源工具,文档类型定义(DTD)是一种文档类型定义语言,它用于定义XML文档中所包含的元素以及元素之间的关系。 Apache Ivy 2.5.2之前版本中,当解析自身配置、Ivy 文件或 Apache Maven 的 POM 文件…

改变住宅区空气质量,你一定要知道!

在现代城市生活中,住宅区的环境质量对居民的健康和舒适感起着至关重要的作用。扬尘颗粒和噪声不仅直接影响人们的日常生活,还可能对居民的健康和生活品质造成持续的影响。 在不断提升环保意识的同时,政府、社区和居民也将共同努力&#xff0c…

0基础入门代码审计-2 Fortify初探

0x01 序言 目前又加入一位新童鞋了,最近将会再加入cs相关的专栏,都是以基础为主,毕竟太复杂的东西,能看懂的人太少。 0x02 准备工具 1、Fortify 2、需要审计的源码 0x03 Fortify的简单使用 1、 1、在开始菜单栏中找到Audit Wo…

【Flutter】Flutter 使用 font_awesome_flutter 展示图标

【Flutter】Flutter 使用 font_awesome_flutter 展示图标 文章目录 一、前言二、安装和基本使用1. 安装2. 基本使用示例3. 图标的命名和样式 三、自定义图标和高级功能1.动态检索图标2.排除样式和优化 四、完整示例五、总结 一、前言 在现代移动应用开发中,图标起着…

Dockerfile制作LAMP环境镜像

文章目录 使用Dockerfile制作LAMP环境镜像编写Dockerfile不修改默认页面修改默认页面 Start Script目录结构及文件登录私有仓库给镜像打标签上传镜像页面检查检测镜像可用性 使用Dockerfile制作LAMP环境镜像 编写Dockerfile 不修改默认页面 FROM centos:7 MAINTAINER "…

怎么把cad文件转成图片?

怎么把cad文件转成图片?我知道有些朋友经常需要制作各种 CAD 图纸。通常情况下,这些图纸以 DWG 格式保存,只能使用专业的 CAD 软件来打开。但是,如果你想与他人共享这些 CAD 图纸,并且对方的计算机上没有安装 CAD 软件…

实验五 Linux 内核的安装与加载

【实验目的】 掌握 uboot 的使用方法,能够使用 uboot 安装和加载内核 【实验环境】 ubuntu 14.04 发行版FS4412 实验平台 【注意事项】 实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行,以“#”开头的命令表 示在开发板下执行 【实验步骤】 …

cve-2023-3079漏洞与patch分析

POC function set(arr, key, val) {arr[key] val; } function leak_hole() {for(let i 0; i < 10; i) {set(arguments, "foo", 1);}set(new Array(), 0, 1);set(arguments, 0, 1);return arguments[1]; } %DebugPrint(leak_hole());分析 通过对此漏洞的patch分…

ASEMI新能源专用整流桥GBU816参数,GBU816封装

编辑-Z GBU816参数描述&#xff1a; 型号&#xff1a;GBU816 最大峰值反向电压(VRRM)&#xff1a;1600V 平均整流正向电流(IF)&#xff1a;8A 正向浪涌电流(IFSM)&#xff1a;200A 工作接点温度和储存温度(TJ, Tstg)&#xff1a;-55 to 150℃ 最大热阻(RθJC)&#xff1…

融云深度参与「新加坡 GTLC 大会」,连接亚太机遇、开拓国际市场

8 月 18 日&#xff0c;由 TGO 鲲鹏会主办的新加坡 GTLC&#xff08;Global Tech Leadership Conference&#xff0c;全球技术领导力大会&#xff09;圆满收官&#xff0c;融云作为共创伙伴深度参与了大会。关注【融云全球互联网通信云】了解更多 本次大会以“Connecting Asia…

RunnerGo性能测试时如何从数据库获取数据

我们在做性能测试或者场景测试时往往需要从数据库中获取一些真实的系统数据让我们配置的场景更加贴合实际。而RunnerGo也是在最近的大版本更新中推出连接数据库功能&#xff0c;本篇文章也给大家讲解一下具体的操作方法和实际应用场景。 配置数据库 首先进入RunnerGo页面&…