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

PostgreSQLUSAGE和SELECT权限案例深入分析

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

PostgreSQLUSAGE和SELECT权限案例深入分析

起因

因为项目需求,需要学习PostgreSQL,本人之前学习过MYSQL,临时快速上手,尽快的去学习项目需要PostgREST, 在学习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 中角色权限的授予及其影响。CREATE ROLE 命令用于创建一个新的角色,同时可以通过 NOLOGIN 选项指定角色无法直接登录到数据库。通过 GRANT 命令可以为角色授予权限,如 SCHEMA 的 USAGE 权限和对表的 SELECT 权限。

在授权过程中,注意区分 SCHEMA 的 USAGE 权限和表的 SELECT 权限。授予角色 SCHEMA 的 USAGE 权限意味着角色可以访问 SCHEMA 中的其他数据库对象(例如数据类型、操作符和函数等)。而为角色授予对表的 SELECT 权限,则允许角色查询该表的数据。

总之,在 PostgreSQL 中设置权限时,需要根据具体情况为角色分别授予 SCHEMA 的 USAGE 权限和表的 SELECT 权限,以确保正确的访问能力。仅具有 SCHEMA 的 USAGE 权限将无法访问表的数据,需要额外为表授予 SELECT 权限。

到此这篇关于PostgreSQL USAGE和SELECT权限案例深入分析的文章就介绍到这了,更多相关PostgreSQL USAGE和SELECT内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

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

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

PostgreSQLUSAGE和SELECT权限案例深入分析

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

下载Word文档

猜你喜欢

PostgreSQLUSAGE和SELECT权限案例深入分析

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

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

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

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

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

Android权限机制深入分析讲解

Android的权限管理遵循的是“最小特权原则”,即所有的Android应用程序都被赋予了最小权限。一个Android应用程序如果没有声明任何权限,就没有任何特权
2022-12-08

PHP 性能优化:深入案例分析

php 性能优化通过分析和优化,可以显著提升网站性能。优化措施包括查询优化、数据缓存、i/o 优化。案例研究表明,这些优化措施可减少页面加载时间,提升数据库查询效率,并增强用户体验。通过遵循最佳实践并应用代码示例,可以有效优化 php 应用
PHP 性能优化:深入案例分析
2024-05-10

CentOS文件和目录权限的示例分析

这篇文章将为大家详细讲解有关CentOS文件和目录权限的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。环境创建俩个用户user1和user2[root@localhost ~]# useradd
2023-06-10

深入分析node.js的异步API和其局限性

用异步API的原因异步的概念之所以首先在Web2.0中火起来,是因为在浏览器中Javascript在单线程上执行,而且他还与UI渲染公用一个线程.这意味着Javascript在执行的时候UI渲染和响应是处于停滞状态的.为了用户体验更好而采取
2022-06-04

深入了解numpy转置函数的常见用法和案例分析

numpy转置函数的常用用法与案例分析在数据处理、科学计算和机器学习领域中,经常需要对数组或矩阵进行转置操作。转置操作是将一个数组的行与列进行对换的操作,可以通过numpy库的转置函数来实现。本文将介绍numpy转置函数的常用用法,并通过
深入了解numpy转置函数的常见用法和案例分析
2024-01-26

Linux中特殊权限SUID SGID和SBIT的示例分析

这篇文章主要介绍Linux中特殊权限SUID SGID和SBIT的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、SUID,就重要的作用就是让其它用户在执行这个授有SUID的程序时拥有该程序拥有者的权限。就
2023-06-12

深入解析与案例分析:PHP的七项代码规范原则

PHP代码规范七大原则详解与案例分析引言PHP是一种广泛使用的开源脚本语言,在互联网应用开发中被广泛应用。而良好的代码规范对于提高代码质量、可读性和可维护性至关重要。本文将介绍PHP代码规范的七大原则,并通过案例分析来进一步理解和应用这些
深入解析与案例分析:PHP的七项代码规范原则
2024-01-15

springboot springsecuroty中注销和权限控制问题的示例分析

小编给大家分享一下springboot springsecuroty中注销和权限控制问题的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1 账户注销1.1
2023-06-29

PHP权限控制修饰符解析:深入剖析各种修饰符的特点和作用

在Web应用开发中,权限控制是非常重要的一项功能,尤其是在应用中涉及到用户身份验证和对敏感信息的保护时。在PHP中,权限控制修饰符是一种常见的用于控制类、属性和方法访问权限的工具。本文将深入剖析PHP中各种权限控制修饰符的特点和作用,并通过
PHP权限控制修饰符解析:深入剖析各种修饰符的特点和作用
2024-01-19

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

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

编程热搜

  • 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动态编译

目录