我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PostgreSQL USAGE和SELECT权限实例代码分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PostgreSQL USAGE和SELECT权限实例代码分析

今天小编给大家分享一下PostgreSQL USAGE和SELECT权限实例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

起因

 在学习PostgREST的第一个起步案例 教程 0 - 让它运行起来 的时候碰到了下面几条语句:

CREATE ROLE web_anon NOLOGIN;GRANT USAGE ON SCHEMA api TO web_anon;GRANT SELECT ON api.todos TO web_anon;

因为不太懂PostgSQL,就行了了研究,研究结果如下:

第一个语句:

CREATE ROLE web_anon NOLOGIN;

这条命令创建了一个名为 web_anon 的新角色,并通过使用 NOLOGIN 选项指定该角色不能直接登录到数据库。通常,这是为了给不需要直接访问数据库的应用或服务授予权限。

第二个和第三个语句:

GRANT USAGE ON SCHEMA api TO web_anon;GRANT SELECT ON api.todos TO web_anon;

这两条命令分别将对 schema api 的使用权(USAGE)和对表 api.todos 的查看权(SELECT)授予 web_anon 角色。这意味着任何具有 web_anon 角色的用户或连接将能够查询 api.todos 表中的数据。

分析

如果不给USAGE,只给SELECT 会有什么效果
如果只授予角色(例如 web_anon)对表(如 api.todos)的 SELECT 权限但没有授予 SCHEMA(如 api)的 USAGE 权限,那么该角色将只能查询与授权的表相关的数据。

在这种情况下,web_anon 角色将仍然能够执行 SELECT 查询访问 api.todos 表中的数据,因为你已经授予了该角色针对该表的 SELECT 权限。然而,如果 schema api 包含其他对象(如数据类型、操作符、函数等),web_anon 角色将无法使用这些对象,因为没有授予 SCHEMA 的 USAGE 权限。

简而言之,没有 SCHEMA 的 USAGE 权限,角色将无法使用此 SCHEMA 中的其他数据库对象,但仍然可以运行 SELECT 查询以访问已授权表中的数据。需要注意的是,这可能会导致某些查询和操作失败,特别是当查询涉及到 SCHEMA 中其他对象时。

授权USAGE之后,还需要授权select 吗? 如果不授权select能进行查询数据吗?
即使已经授予角色 SCHEMA 的 USAGE 权限,你仍然需要为某个表(例如:api.todos)单独授权 SELECT 权限。USAGE 权限只让角色能够访问 SCHEMA 中的数据类型、操作符、函数等其他数据库对象,但是不包含对 SCHEMA 中的表的访问权。

如果没有为表(例如:api.todos)授权 SELECT 权限,即使已授权 SCHEMA 的 USAGE 权限,角色仍然无法读取该表中的数据。为了允许一个角色执行 SELECT 查询并获取某个表中的数据,你需要为该角色分别授权 SCHEMA 的 USAGE 权限和表的 SELECT 权限。

只有USAGE没有SELECT的例子
为了更好地理解只有 SCHEMA 的 USAGE 权限的情况,我们首先需要了解 PostgreSQL schema。一个 schema 是一个命名空间,它可以包含多个数据库对象,如表、视图、数据类型、函数等。在这个例子中,假设我们有一个名为 api 的 schema 和一个名为 api.todos 的表。我们还有一个自定义数据类型和一个函数。

创建自定义数据类型:

CREATE TYPE api.priority_level AS ENUM ('Low', 'Medium', 'High');

创建一个使用自定义数据类型的表:

CREATE TABLE api.todos_with_priority (    id SERIAL PRIMARY KEY,    task VARCHAR(255) NOT NULL,    priority api.priority_level NOT NULL);

创建一个使用自定义数据类型的函数:

CREATE FUNCTION api.get_priority_as_text(p api.priority_level) RETURNS text    LANGUAGE sql    AS $$ SELECT 'Priority: ' || p::text; $$;

如果我们创建一个名为 web_anon 的角色并仅授权 SCHEMA 的 USAGE 权限:

CREATE ROLE web_anon NOLOGIN;GRANT USAGE ON SCHEMA api TO web_anon;

在这种情况下,web_anon 角色将可以使用 api schema 中的自定义数据类型(例如 api.priority_level)以及自定义函数(例如 api.get_priority_as_text),但由于缺少 SELECT 权限,它无法查询 api.todos_with_priority 表。

如果将 web_anon 角色分配给另一个用户或角色并尝试执行以下查询:

SELECT id, task, api.get_priority_as_text(priority)FROM api.todos_with_priority;

这个查询将失败,因为没有授予 SELECT 权限。

为了让 web_anon 角色能查询 api.todos_with_priority 表,我们需要给它授予对该表的 SELECT 权限:

GRANT SELECT ON api.todos_with_priority TO web_anon;

以上就是“PostgreSQL USAGE和SELECT权限实例代码分析”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PostgreSQL USAGE和SELECT权限实例代码分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PostgreSQL USAGE和SELECT权限实例代码分析

今天小编给大家分享一下PostgreSQL USAGE和SELECT权限实例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一
2023-07-06

PostgreSQL USAGE和SELECT权限案例深入分析

目录起因分析总结起因因为项目需求,需要学习PostgreSQL,本人之前学习过mysql,临时快速上手,尽快的去学习项目需要PostgREST, 在学习PostgREST的第一个起步案例 教程 0 - 让它运行起来 的时候碰到了下面几条语
2023-04-12

PostgreSQLUSAGE和SELECT权限案例深入分析

这篇文章主要介绍了PostgreSQLUSAGE和SELECT权限案例深入分析,因为项目需求,需要学习PostgreSQL,本人之前学习过MYSQL,临时快速上手,尽快的去学习项目需要PostgREST
2023-05-15

PHP和Java代码实例分析

这篇文章主要介绍“PHP和Java代码实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP和Java代码实例分析”文章能帮助大家解决问题。命名案例1function getGoods($qu
2023-06-16

MySQL权限控制和用户与角色管理实例分析讲解

目录一、mysql用户登录二、用户管理三、权限控制四、角色管理一、MySQL用户登录lYoljYfqX一般在本机上我们的登录命令:mysql -u root -p+密码 这里介绍命令的作用:-u 指定用户名-h 指定主机地址(默认为l
2022-12-01

ES6中Promise、async和await面试题实例代码分析

这篇“ES6中Promise、async和await面试题实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ES6中
2023-07-05

vs2022 x64 C/C++和汇编混编实例代码分析

本文小编为大家详细介绍“vs2022 x64 C/C++和汇编混编实例代码分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“vs2022 x64 C/C++和汇编混编实例代码分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
2023-07-05

C# Marshal类基本概念和入门实例代码分析

本文小编为大家详细介绍“C# Marshal类基本概念和入门实例代码分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C# Marshal类基本概念和入门实例代码分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-07-05

Node中的可读流和可写流实例代码分析

这篇“Node中的可读流和可写流实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node中的可读流和可写流实例代码
2023-07-05

linux用户和组命令实例分析【切换、添加用户、权限控制等】

本文实例讲述了linux用户和组命令。分享给大家供大家参考,具体如下: 1、用户相关命令 su 切换用户 root -> 普通用户 不需要密码 普通用户之间 需要密码
2022-06-03

Node.js全局可用变量、函数和对象实例代码分析

今天小编给大家分享一下Node.js全局可用变量、函数和对象实例代码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言在
2023-07-05

Go语言单元测试和基准测试实例代码分析

本篇内容主要讲解“Go语言单元测试和基准测试实例代码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go语言单元测试和基准测试实例代码分析”吧!背景测试的出现是为了避免项目中出现重大事故测试是
2023-07-05

Kotlin构造函数、成员变量和init代码块执行顺序实例分析

本文小编为大家详细介绍“Kotlin构造函数、成员变量和init代码块执行顺序实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Kotlin构造函数、成员变量和init代码块执行顺序实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录