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

2023-11-19

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
      

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openGauss学习笔记-47 openGauss 高级数据管理-权限 的相关文章

随机推荐

  • dxva2+ffmpeg硬件解码(Windows)重要笔记2

    参考了csdn上Win32Project1 ffmpeg dxva2这个例子 很不错 直接就可以运行 但是 有几个问题 1 窗口无法正常缩放 缩放后 图像大小并没有一起缩放 2 H265的编码格式 显示下面有一块绿色 3 无法从显卡获取YU
  • Python(符号计算常微分方程)谐振子牛顿运动方程

    牛顿运动方程 牛顿运动方程可以写成以下形式 F d p d t
  • 图像jpg转.bgr二进制文件_海思开发

    作者 昌山小屋 来源 CSDN 原文 https blog csdn net ChuiGeDaQiQiu article details 84945901 版权声明 本文为博主原创文章 转载请附上博文链接 参考为毛我要干这件事 把一张jpg
  • R语言练习题答案(9)第六章高级绘图实例代码

    关注公众号凡花花的小窝 含有更多更全面的计算机专业编程考研相关知识的文章还有资料 代码 6 1 散点图 library lattice xyplot wt 3 5407 mpg data mtcars ylab Weight xlab Ki
  • 计算机仿真应用于诊断什么故障,基于MATLAB/Simulink的机械故障诊断研究

    摘要 机械故障诊断技术能够提供高质量的监控系统 提升管理效率 降低维护成本 通过MATLAB Simulink仿真技术可以简洁地将故障诊断的结果图像化表达出来 提高故障诊断的质量和效率 该文模拟了机械故障诊断的全过程 充分发挥技术融合的优势
  • 【路由交换实验】生成树STP(stp,rstp,mstp)

    理论 冗余的重要性 叫做MAC地址表的震荡 为了增加网络的可靠性 有必要引入双链路的备份 但是引入冗余链路以后 网络里面又产生了环路 产生一系列广播风暴的问题 可以使用STP生成树协议来解决这个问题 生成树协议可以在提高可靠性的同时 又能避
  • python下载后安装包在哪里找到_python安装包里idle在哪

    进入python安装目录 比如python安装在d盘 你只要进到下面这个文件夹去 D Program Files Python33 Lib idlelib idle bat运行即可 至于出现一个黑色的空白cmd命令提示符窗口的解决方法只要用
  • IDEA社区版下载安装

    一 下载网址 https www jetbrains com idea download 这里以安装社区版免费版为例 二 点击下载好的安装文件 点击 Next 建议更改下路径 点击 Next 点击 Next 可点击创建快捷方式 其他默认就好
  • matlab实现遗传算法——以Ras函数为例( 初学子 友好子 )

    遗传算法 演化思想 遗传算法的本质 遗传算法的本质 模拟生物演化 具体来说 模拟对象是生物演化中的种种自然现象 如变异 交叉互换 交配 淘汰 因此 一个优秀的遗传算法首先应该做到生物演化的模拟 但是并非仅仅对生物演化进行简单复现 生物演化中
  • Mybatis plus 数据加密

    数据加密重中之重个铁铁 先准备加解密工具类 package com byyl web utils import org springframework util Base64Utils import javax crypto Cipher
  • 【密码学】破解维吉尼亚密码(C++代码实现)

    问题简述 维吉尼亚密码是使用一系列凯撒密码组成密码字母表的加密算法 属于多表密码的一种简单形式 在一个凯撒密码中 字母表中的每一字母都会作一定的偏移 例如偏移量为3时 A就转换为了D B转换为了E 而维吉尼亚密码则是由一些偏移量不同的凯撒密
  • unix环境高级编程第三版源代码编译及使用

    估计好多学习unix linux的程序员都知道有这么一本书 最近笔者也开始膜拜膜拜此书 在编译源代码的时候 遇到了一些问题 现在在这里做下总结 加深自己的印象 或许也有遇到此问题的同仁 可以参考参考 先强调一下 笔者的开发环境是centos
  • 单细胞测序数据的降维方法和细胞亚型鉴定聚类方法

    单细胞测序数据的降维方法和细胞亚型鉴定聚类方法是单细胞转录组分析中常用的技术 下面是对这些方法的总结 1 降维方法 主成分分析 PCA PCA是一种常用的降维方法 通过线性变换将高维数据转化为低维表示 保留最大的方差 t SNE t SNE
  • Nginx一键自动化部署安装shell脚本

    bin bash 安装Nginx相关依赖 yum install y gcc make wget zlib devel openssl devel pcre devel 下载Nginx源码 wget http nginx org downl
  • Android中字体使用的单位是,Android中设置TextView字体大小时的单位问题

    项目开发中使用如下代码动态设置TextView字体大小 发现设置的字体和预期差别很大 errText setTextSize context getResources getDimensionPixelSize R dimen lost t
  • HTTP文件断点续传原理解析(源码)

    生活中 有许多事物 在没有被揭开面纱之前 我们往往会觉得很神秘很高深 认为它一定很难 进而望而却步 失去了解它的机会 然而 很多事 只要我们自己能沉下心来 细细研究 那些神秘高深的 也会变得简单明了 HTTP文件断点续传 就是这样一个好例子
  • pyltp包下载及使用

    pyltp包下载 1 下载wheel whl下载地址 windows下python3 5 windows下python3 6 下载好了以后 在命令行下 cd到wheel文件所在的目录 然后使用命令 pip install 文件名 whl安装
  • linux qt设置 命令,linux – 在QMake中设置RPATH命令

    我有一个 Linux Qt程序 我希望它优先使用可执行文件目录中的 动态 Qt库 如果存在 否则使用系统的Qt库 RPATH来救援 我将此行添加到qmake的 pro文件中 QMAKE LFLAGS Wl rpath ORIGIN 用rea
  • 【Unity3d】碰撞体、刚体、OnTriggerEnter和OnCollisionEnter用法与区别

    今天学习遇到了一些关于碰撞体和刚体还有相关事件的问题 刚体Rigidbody 是赋予物体力的的作用效果的基础 包括重力 拉力 阻力也是拉力的一种 角拉力 角阻力同样 物体悬空时会掉落 被其他东西碰到时 假设有碰撞体 会朝着受力方向运动或产生
  • openGauss学习笔记-47 openGauss 高级数据管理-权限

    文章目录 openGauss学习笔记 47 openGauss 高级数据管理 权限 47 1 语法格式 47 2 参数说明 47 3 示例 openGauss学习笔记 47 openGauss 高级数据管理 权限 数据库对象创建后 进行对象