海量智库 | ANY权限原理介绍

ANY权限是Vastbase中的一种特殊的管理权限,用户能够通过ANY权限执行更广泛的操作,更加便利的管理数据库。

本文将为您介绍ANY权限管理的相关原理。


ANY权限管理相关解释

ANY权限管理,是对数据库内的某一类对象的所有实体进行特定的权限管理

例如执行如下语句:

GRANT SELECT ANY TABLE TO USER1;

就表示用户USER1拥有对当前数据库中所有的表进行SELECT操作的权限,但没有对其他数据库中的任意表进行SELECT操作的权限。

ANY权限管理的原理

权限再授权权限

用户拥有把授予他的ANY权限再授予其他用户的权限的权限。

用户拥有权限的角色列表

当执行grant u1 to u2,表示将角色u1授予u2,那么u2会拥有u1的所有权限。这样的所有被授予用户u2的角色就是用户拥有权限的角色列表。

一、权限信息的记录

ANY权限信息存储在系统表gs_db_privilege,每一个ANY权限对应gs_db_privilege表中的一个元组。由被授权者的OID、被授予的ANY权限是否拥有将该权限授予其他用户的权限三部分组成。

字段解释:

ANY权限的授予和回收,对应的是gs_db_privilege系统表中数据的增加和删除。

二、权限授予

权限授予有两个操作方式:

(1)授予ANY权限,例如:

GRANT SELECT ANY TABLE TO USER1;

(2)授予ANY权限并授予权限再授权权限(admin option),例如:

GRANT SELECT ANY TABLE TO USER1 WITH ADMIN OPTION;

权限授予流程如下所示:

  1. 检查要授予用户的ANY权限是否存在。若不存在,构造一条新的权限记录数据插入到系统表gs_db_privilege中并结束;若存在,则执行步骤2
  2. 判断是否需要给该目标用户添加再授予权限。若不是则直接退出结束,若是则执行步骤3
  3. 更新系统表gs_db_privilege该权限信息中的admin_option字段为true

三、权限回收

对应于权限授予,权限回收也有两种用法:

(1)仅回收权限再授权权限,例如:

REVOKE ADMIN OPTION FOR SELECT ANY TABLE FROM USER1;

(2)回收ANY权限,例如:

REVOKE SELECT ANY TABLE FROM USER1;

流程如下图所示:

  1. 判断要回收的权限的是否存在,若不存在则结束返回;若存在则执行步骤2
  2. 判断是仅回收权限的再授权权限,还是回收整个权限。若仅回收权限再授权权限,则执行步骤3;否则执行步骤4
  3. 更新权限信息,将权限再授权权限字段admin_option修改为false
  4. 从系统表gs_db_privilege中删除该条权限信息

四、权限检查 

ANY权限检查就是在用户访问对象时,检查用户是否拥有对对象进行操作的ANY权限。流程如下图所示:

  1. 根据本次访问的对象和操作转换为需要的ANY权限。例如执行select * from t1,根据select操作和查询的是表,转换为“select ANY table”权限
  2. 获取到当前执行用户拥有权限的所有角色列表
  3. 遍历列表中的每一个角色
  4. 对每一个角色,根据其OID和本次操作需要的ANY权限从gs_db_privilege系统表中查询角色是否拥有ANY权限
  5. 如果未查询到结果,说明当前被遍历的角色没有本次操作需要的ANY权限,直接进入下一次循环,继续步骤4检查角色列表中的下一个角色;如果查询到结果,说明当前被遍历的角色拥有本次操作需要的ANY权限
  6. 继续判断本次操作是否是授予/回收ANY权限操作,如果不是,权限检查已经通过,返回结果为有权限;如果是,则进入下一步判断
  7. 判断当前被遍历角色拥有的ANY权限的admin_option属性是否为true,为true则表示角色有对当前ANY权限再授权/回收的操作,返回结果为有权限;为false则表示角色没有对当前ANY权限再授权/回收的操作,那么进入下一次循环,继续步骤4检查角色列表中的下一个角色

通过以上操作,可以随时调整ANY权限的授予和回收,提升用户对数据库操作的能力和灵活性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】继承总结

一、前言 我们众所周知的C三大特性分别为:封装、继承、多态。 封装就是将接口实现统一化,隐藏那些不同的地方,在上层函数调用体现的方式一样,如各种容器的迭代器iterator,尽管底层实现的方式不同,但是在使用…

C++数据结构与算法——贪心算法简单题

C第二阶段——数据结构和算法,之前学过一点点数据结构,当时是基于Python来学习的,现在基于C查漏补缺,尤其是树的部分。这一部分计划一个月,主要利用代码随想录来学习,刷题使用力扣网站,不定时更…

安全加固方面思路

系统层面上的加固 备份重要配置文件:将一些重要的系统配置文件备份,包括 /etc/login.defs、/etc/security/limits.conf 等等。进行账号安全加固:修改密码安全策略,设置密码存在最长时间、密码长度、密码过期提醒等。 &#xff08…

Linux设备模型统一:桥接硬件多样性与应用程序开发的关键

在Linux的宏大世界中,各种各样的硬件设备如星辰般繁多。从常见的USB设备到复杂的网络接口卡,从嵌入式设备到强大的服务器,Linux需要在这些差异极大的硬件上运行。这就引出了一个问题:Linux是如何统一这些不同硬件的设备模型的呢&a…

Android 11 上的文件读写无权限问题

Android 6以上需要动态申请读写权限,但是11以上动态申请了读写权限也是无效。并且手动给予权限没有该按钮。 如上图华为钱包有个所有文件权限、但是百度地图只有仅媒体权限,仅媒体权限(动态申请读写权限)给予后软件还是没法访问文…

Linux中安装nacos

Linux中安装nacos 一、前言二、准备1、下载2、上传到服务器3、解压 三、配置1、备份配置文件2、导入sql3、修改前4、修改后 四、使用1、启动2、关闭 一、前言 最近国外的docker似乎是出什么问题,试过很多手段都拉不下 nacos 镜像,就打算在服务器装一下 …

10. 【Android教程】网格布局 GridLayout

今天要学的布局和上一节的 TableLayout 很类似,是在 Android 4.0 版本引入的布局方式。GridLayout 很有意思,自从引入之后在 Android 开发圈有以下特点: 大部分的开发者可能都不知道有这个布局方式的存在;有些开发者虽然知道&…

【智能算法】蛾群算法(MSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2017年,AAA Mohamed等人受到飞蛾趋光行为启发,提出了蛾群算法(Moth Swarm Algorithm, MSA)。 2.算法原理 2.1算法思想 MSA设待优化问题的可行解和适…

Spring 如何优雅的灵活的Http重试

1、背景说明 在互联网时代, 不同系统之间大多数是通过http调用,调用过程中会超时、异常等过种问题。为了保证业务稳定,http 重试是常用方案。下面列举几种方案。 2、Http重试方案介绍 2.1 传统方案 1、使用传统的递归调用,实现方…

Java Lambda 表达式(详细)

Java Lambda 表达式 Lambda 的发展史 Java Lambda 表达式是在 Java 8 版本中引入的重要特性,它描述了一种更简洁、更灵活的方式来处理函数式编程。 在 Java 8 之前,要实现函数式编程,需要通过匿名类实现接口的方式。这样的代码通常比较冗长…

R语言数据可视化:基本绘图系统

目录 plot函数 par函数 hist函数 boxplot函数 plot函数应用实战 R语言中有三大绘图系统包括基本绘图系统,Lattice绘图系统,ggplot2绘图系统 基本绘图系统 在R语言中,以下函数通常用于创建和定制图形: plot 函数&#xff…

VMware Intel i5-10400 安装Mac 14 Sonoma

目录 安装完后的效果安装前的准备创建虚拟机创建虚拟机,选择典型安装。选择ISO文件选择系统类型命名虚拟机设置磁盘完成 配置虚拟机文件修改配置文件 第一次运行虚拟机选择语言选择磁盘工具格式磁盘安装macOS Sonoma 其他问题登录Apple帐户 : MOBILEME_C…

Unity类银河恶魔城学习记录12-7-1 p129 Craft UI - part 1源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_CraftList.cs using System.Collections; using System.Collections.Gen…

Composer Windows 安装

Composer 的下载地址为:Composer 1 运行安装程序 当启动安装程序后单击下一步继续。 选择 PHP 路径 如果你的计算机上没有安装 PHP 的话,Composer 的安装无法继续。 你需要选择你本地安装的 PHP 路径。 配置代理地址 默认的情况下,可以不…

一个项目的SpringCloud微服务改造过程

SSO是公司一个已经存在了若干年的项目,后端采用SpringMVC、MyBatis,数据库使用MySQL,前端展示使用Freemark。今年,我们对该项目进行了一次革命性的改进,改造成SpringCloud架构,并且把前后端分离&#xff0c…

ES6中 Promise的详细讲解

文章目录 一、介绍状态特点流程 二、用法实例方法then()catchfinally() 构造函数方法all()race()allSettled()resolve()reject() 三、使用场景# 参考文献 一、介绍 Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(…

四大生成式模型的比较——GAN、VAE、归一化流和扩散模型

比较四大模型的本质 four modern deep generative models: generative adversarial networks, variational autoencoders, normalizing flows, and diffusion models 待写

Android 14 NotificationChannels与Notification的加载流程

前言 这部分我觉得三方应用使用的较多,分析的时候也是源码与三方应用结合分析的。 一. NotificationChannel 的创建 在源码中,我看到了一个很怪的类:NotificationChannels.java。这个类继承了 CoreStartable。 注:CoreStartabl…

mysqldump: Got error: 1049: Unknown database ‘root‘ when selecting the datab

1.问题描述 MySQL版本号:MySQL Server 8.3MySQL持久化到处数据库结构及数据 mysqldump: Got error: 1049: Unknown database root when selecting the datab2.问题解决 cmd 切换本地路径 cd /d D:\Program Files\MySQL\MySQL Server 8.3\bin执行数据库备份命令 …

uniapp vue2 时钟 循环定时器

效果展示: 时钟 写在前面:vue2有this指向,没有箭头函数 实验操作:封装一个时钟组件 uniapp vue2 封装一个时钟组件 核心代码: this指向的错误代码,在下: start() { this.myTimer setInterval(…