首页 > 其他分享 >openGauss 权限

openGauss 权限

时间:2024-04-28 10:14:28浏览次数:28  
标签:... name GRANT 用户 joe 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。

语法格式

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

参数说明

  • role_name

    已存在用户名称。

  • table_name

    已存在表名称。

  • column_name

    已存在字段名称。

  • schema_name

    已存在模式名称。

  • database_name

    已存在数据库名称。

  • tablespace_name

    表空间名称。

  • WITH GRANT OPTION

    如果声明了WITH GRANT OPTION,则被授权的用户也可以将此权限赋予他人,否则就不能授权给他人。这个选项不能赋予PUBLIC。

示例

  • 将系统权限授权给用户或者角色。

    创建名为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
      

标签:...,name,GRANT,用户,joe,openGauss,权限
From: https://www.cnblogs.com/renxyz/p/18163029

相关文章

  • openGauss 批处理模式
    批处理模式openGauss支持从文本文件执行SQL语句。openGauss提供了gsql工具实现SQL语句的批量处理。以下场景建议使用批处理:如果您重复运行查询(例如,每天或每周),将其设为脚本可以让您避免每次进行重复输入。您可以通过复制和编辑脚本文件从现有的相似查询生成新查询。对于多行......
  • openGauss MOT隔离级别
    MOT隔离级别即使MOT完全兼容ACID,openGauss1.0并非支持所有的隔离级别。下表介绍了各隔离级别,以及MOT支持和不支持的内容。表1隔离级别隔离级别说明READUNCOMMITTEDMOT不支持READCOMMITTEDMOT支持READCOMMITTED(读已提交)隔离级别保证任何正在读取的数据在......
  • openGauss MOT高吞吐量
    MOT高吞吐量MOT高吞吐量测试结果如下。Arm/鲲鹏2路128核性能下图是华为Arm/鲲鹏2路128核服务器TPC-C基准测试的结果。一共进行了四类测试:MOT和openGauss基于磁盘的表各进行了2次测试。其中两项测试是在单节点(无高可用性)上执行,这意味着没有向备节点执行复制。其余两个测......
  • openGauss 约束
    约束约束子句用于声明约束,新行或者更新的行必须满足这些约束才能成功插入或更新。如果存在违反约束的数据行为,行为会被约束终止。约束可以在创建表时规定(通过CREATETABLE语句),或者在表创建之后规定(通过ALTERTABLE语句)。约束可以是列级或表级。列级约束仅适用于列,表级约束......
  • openGauss 物化视图
    物化视图物化视图是相对普通视图而言的。普通视图是虚拟表,而物化视图实际上就是存储SQL执行语句的结果,可以直接使用数据而不用重复执行查询语句,从而提升性能。按照刷新方式物化视图分为两种:全量物化视图:仅支持对已创建的物化视图进行全量更新,而不支持进行增量更新。创建全量物......
  • openGauss 游标
    游标为了处理SQL语句,存储过程进程分配一段内存区域来保存上下文联系。游标是指向上下文区域的句柄或指针。借助游标,存储过程可以控制上下文区域的变化。语法格式定义游标CURSORcursor_name[BINARY][NOSCROLL][{WITH|WITHOUT}HOLD]FORquery;......
  • openGauss 语法
    语法默认情况下,数据库安装成功,登录后,可以使用\help语句查看所有openGauss的SQL语法。openGauss=#\helpAvailablehelp:ABORTALTERTABLECREATEDATABASECREATETEXTSEARCHCONFIGURATIONDROPOPE......
  • openGauss 数据类型
    数据类型数值类型表1列出了所有的可用类型。表1整数类型名称描述存储空间范围TINYINT微整数,别名为INT1。1字节0~255SMALLINT小范围整数,别名为INT2。2字节-32,768~+32,767INTEGER常用的整数,别名为INT4。4字节-2,147,483,648~+2,14......
  • openGauss 索引
    索引索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相似的。索引可以用来提高数据库查询性能,但是不恰当的使用将导致数据库性能下降。建议仅在匹配如下某条原则时创建索引:经常执行查询的字段。在连接条件上创建索引,对于存在多字段连接的查询,建议......
  • openGauss 锁
    锁如果需要保持数据库数据的一致性,可以使用LOCKTABLE来阻止其他用户修改表。例如,一个应用需要保证表中的数据在事务的运行过程中不被修改。为实现这个目的,则可以对表进行锁定,这样将防止数据不被并发修改。LOCKTABLE只在一个事务块的内部有用,在事务结束时就会被释放。语法格......