首页 > 其他分享 >MogDB-openGauss default privileges 使用方法

MogDB-openGauss default privileges 使用方法

时间:2024-03-14 12:13:46浏览次数:27  
标签:grant default clause privileges MogDB 权限 schema

MogDB/openGauss default privileges 使用方法

权限是用户访问数据库对象的首要条件,每个新增用户默认属于 PUBLIC 角色组成员,也就是具有 PUBLIC 角色组的权限,但在日常业务使用中,仅仅具有 PUBLIC 权限是远远不够的,还需要具有额外的权限,在 MogDB/openGauss 数据库支持的业务中经常需要一种具有只读权限的用户,这个用户不仅仅可以需要对已经存在的数据库对象具有只读权限,对未来的数据库也需要同样的权限,如果每添加一个数据库都要执行一遍 grant 赋权操作,这显然不是用户希望的,所以这里需要借助 alter default privileges 语法。

语法语义

目前支持表(包括视图)、 序列、函数、类型、密态数据库客户端主密钥和列加密密钥的权限更改。

AlterDafaultPrivileges ::= ALTER DEFAULT PRIVILEGES
    [ FOR { ROLE | USER } target_role [, ...] ]
    [ IN SCHEMA schema_name [, ...] ]
    abbreviated_grant_or_revoke;

  abbreviated_grant_or_revoke ::= grant_on_tables_clause
        | grant_on_sequences_clause
        | grant_on_functions_clause
        | grant_on_types_clause
        | grant_on_client_master_keys_clause
        | grant_on_column_encryption_keys_clause
        | revoke_on_tables_clause
        | revoke_on_sequences_clause
        | revoke_on_functions_clause
        | revoke_on_types_clause
        | revoke_on_client_master_keys_clause
        | revoke_on_column_encryption_keys_clause

但是在日常使用中,我们经常会遇到一种情况,就是我们已经执行了 alter default privileges 命令,而且已经执行成功了,但是只读用户去查询新增的数据库对象时依然提示 Permission denied,这是需要仔细看一下报错内容:

ERROR: permission denied for schema xxx
这代表没有 schema 的使用权限,需要给用户 schema 赋权
grant usage on schema xxx to xxx;

ERROR: permission denied for relation xxx
这代表没有这个表的访问权限

对于 schema 我们应该很好理解,在 MogDB/openGauss 中每个逻辑层级的对象都有自己的权限,且都需要单独给权限。

但是第二个报错是什么原因呢?明明已经给了 default privileges 权限了呀?

我们现在有三个用户分别是 omm、u1 和 ur,其中 omm 是超户,u1 是读写用户,ur 是只读用户,s 是我们的 schema,u1 是 s 的 owner,我们想要用户 ur 可以访问 s 下所有的表,包括未来的表。

如果我们使用 u1 登陆数据库,并给 ur 赋权,我们需要执行

alter default privileges in schema s grant select on tables to ur;

如果我们使用 omm 登陆数据库,并给 ur 赋权,我们需要执行

alter default privileges for user u1 in schema s grant select on tables to ur;

我们发现执行 alter default privileges 权限生效与否,与执行的用户及其语法有关系了,主要是要不要添加for user/role username语法,如果是 schema owner 来执行不需要添加,而其他用户执行则需要添加此语法。

PS:PG14 添加了全局只读角色

标签:grant,default,clause,privileges,MogDB,权限,schema
From: https://www.cnblogs.com/renxyz/p/18072564

相关文章

  • MogDB openGauss 自定义snmptrapd告警信息
    MogDB/openGauss自定义snmptrapd告警信息本文出处:https://www.modb.pro/db/232391在之前的文章MogDB/openGauss监控告警配置介绍了如何通过alertmanager模块将报警通过snmp推送出去,但是在实际使用中,默认的报警规则信息并不能很好的满足snmp服务端的需求,需要定制化报警......
  • MogDB openGauss常用查询汇总
    MogDB/openGauss常用查询汇总概述在MogDB/openGauss日常运维过程中,会经常通过SQL来获取想要查看的信息,这些SQL可以作为监控指标、巡检指标,也可以临时查询使用。通过系统线程id查对应的query#!/bin/bashsource~/.bashrcthread_sets=`ps-ef|grep-igaussdb|g......
  • MogDB openGauss故障排查流程
    MogDB/openGauss故障排查流程前提如果有反馈说数据库响应慢或者压测过程中数据库有报错,第一步先收集数据库服务器资源使用情况,这一步是处理所有故障的前提。--负载top命令htop命令--cpulscpu命令--内存大小free-g--磁盘大小df-Th--磁盘使用跟踪nohupiostat......
  • MogDB openGauss数据库扩缩容的几种方式
    MogDB/openGauss数据库扩缩容的几种方式文本出处:https://www.modb.pro/db/453105随着业务的发展,业务系统对数据库的架构要求也在变化,比如需要读负载均衡、机房搬迁、服务器硬件替换等等,这需要在原数据库主备架构的基础上进行扩/缩容操作,目前MogDB数据库安装方式有三种,分别是......
  • [GPT] export default {} 和 export {} 的区别
    在JavaScriptES6模块系统中,exportdefault{}和export{}有明显的区别: 1.exportdefault{}:这个语法用于导出一个默认的模块成员,它可以是一个对象、函数、类等。当导入时,可以使用任何名称来引用这个默认导出的成员,或者不指定名称直接导入。每个模块只能有一个exportdef......
  • [GPT] export, export default, import, module.exports, require
     ES6规范:export和import配对 import的{}大括号里面指定要从其他模块导入的变量名, 如果export命令没有写default,那么import{}大括号里面的变量名,必须与export导出的名称相同。  exportdefault为模块指定默认输出,这样在引入时就不必关心模块输出的名字。 本质......
  • 02-defaultdic类工作原理及应用实例(全网最全?含常值函数的创建)
    经常看到说“优雅地书写代码”,总是没啥感觉,直到这两天认真查阅了defaultdic这个类的一些资料。原来,灵活的应用,真的可以这么优雅、简单。1 简要描述defaultdic是collections包中的一个扩展类,是内置dict类的子类。这个类比较简单,除了重写了dict类的__miss__方法,增加了一个......
  • default在java中的用法 java里default
    介绍default是在java8中引入的关键字,也可称为Virtualextensionmethods——虚拟扩展方法。是指,在接口内部包含了一些默认的方法实现(也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制),从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。为什么需要这......
  • Go 100 mistakes - #81: Using the default HTTP client and server
        ......
  • 报错真正的原因export ‘default’(imported as‘Vue’) was not found in‘vue
    运行npmrundev后报错:export'Vue'(importedas'Vue')wasnotfoundin'vue' 并且加载不出页面,查了很久,终于找到原因:报错信息:WARNINGin./src/index.js24:13-16export'Vue'(importedas'Vue')wasnotfoundin'vue'(p......