PostgreSQL 11 新特性解读 : 可通过GRNAT权限下放的四个系统函数

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介:

涉及到数据库服务端文件读取的系统函数通常需要管理员权限,例如 pg_ls_dir()等系统函数,PostgreSQL 11 版本支持少量文件读取的系统函数权限下放,可通过 GRANT/REVOKE 将权限赋给普通用户,目前以下四个文件读取系统函数支持权限下放:

  • pg_ls_dir(): List the contents of a directory. Restricted to superusers by default, but other users can be granted EXECUTE to run the function.
  • pg_read_file(): Return the contents of a text file. Restricted to superusers by default, but other users can be granted EXECUTE to run the function.
  • pg_read_binary_file(): Return the contents of a file. Restricted to superusers by default, but other users can be granted EXECUTE to run the functio
  • pg_stat_file(): Return information about a file. Restricted to superusers by default, but other users can be granted EXECUTE to run the function.

这四个函数在11版本之前只有超级用户才有权限使用。

一、Release说明

Allow access to file system functions to be controlled by GRANT/REVOKE permissions, rather than superuser checks (Stephen Frost)

Specifically, these functions were modified: pg_ls_dir(), pg_read_file(), pg_read_binary_file(), pg_stat_file().

以上四个函数使用上差异不大,本文仅演示其中两个函数。

二、pg_ls_dir()

pg_ls_dir()函数可以列出数据库服务端数据目录的文件,11版本前只有超级用户才有权限调用。

PostgreSQL 10 测试

10 版本测试如下:

[postgres@pghost1 ~]$ psql mydb pguser
psql (10.0)
Type "help" for help.

mydb=> SELECT pg_ls_dir('pg_wal');
ERROR:  must be superuser to get directory listings

以上显示只有超级用户才有权限。

尝试将函数 pg_ls_dir()的可执行权限赋给普通用户 pguser。

mydb=> \c mydb postgres
You are now connected to database "mydb" as user "postgres".

mydb=# GRANT EXECUTE ON FUNCTION pg_ls_dir(text) TO pguser;
GRANT

mydb=# \c mydb pguser
You are now connected to database "mydb" as user "pguser".

mydb=> select pg_ls_dir('pg_wal');
ERROR:  must be superuser to get directory listings

以上看出,将函数pg_ls_dir()的执行权限赋给普通用户后,普通用户依然没有权限执行。

PostgreSQL 11 测试

将函数 pg_ls_dir()的可执行权限赋给普通用户 role11 。

[pg11@pghost2 ~]$ psql francs postgres
psql (11beta3)
Type "help" for help.

francs=# GRANT EXECUTE ON FUNCTION pg_ls_dir(text) TO role11;
GRANT

以 role11 用户登录 francs 库测试:

[pg11@pghost2 ~]$ psql francs role11
psql (11beta3)
Type "help" for help.

francs=> SELECT pg_ls_dir('pg_wal');
        pg_ls_dir
--------------------------
 00000001000000170000002B
 000000010000001700000025
 000000010000001700000034
 000000010000001700000073
 ...省略

普通用户执行 pg_ls_dir('pg_wal') 函数成功,已查看到数据库服务端的 pg_wal 目录文件。

三、pg_read_file()

pg_read_file()函数可以显示数据库服务端文本文件的内容,11版本前只有超级用户才有权限调用。

PostgreSQL 10 测试

10 版本测试,如下:

[postgres@pghost1 ~]$ psql mydb pguser
psql (10.0)
Type "help" for help.

mydb=> SELECT pg_read_file('/home/postgres/t_copy2.txt');
ERROR:  must be superuser to read files

显示只有超级用户才有权限执行。

PostgreSQL 11 测试

将函数 pg_read_file()的可执行权限赋给普通用户 role11 。

[pg11@pghost2 ~]$ psql francs postgres
psql (11beta3)
Type "help" for help.

francs=# GRANT EXECUTE ON FUNCTION pg_read_file(text) TO role11;
GRANT

以role11用户登录francs库测试,如下:

[pg11@pghost2 ~]$ psql francs role11
psql (11beta3)
Type "help" for help.

francs=> select pg_read_file ('/home/pg11/t_copy2.txt');
 pg_read_file
--------------
 1       a   +
 2       b   +

(1 row)

赋权后,普通用户role11有权限执行 pg_read_file() 函数查看数据库服务端文件内容。

四、参考

新书推荐

最后推荐和张文升共同编写的《PostgreSQL实战》,本书基于PostgreSQL 10 编写,共18章,重点介绍SQL高级特性、并行查询、分区表、物理复制、逻辑复制、备份恢复、高可用、性能优化、PostGIS等,涵盖大量实战用例!

链接:https://item.jd.com/12405774.html

_5_PostgreSQL_

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
存储 关系型数据库 数据库
深入了解 PostgreSQL:功能、特性和部署
PostgreSQL,通常简称为Postgres,是一款强大且开源的关系型数据库管理系统(RDBMS),它在数据存储和处理方面提供了广泛的功能和灵活性。本文将详细介绍 PostgreSQL 的功能、特性以及如何部署和使用它。
675 1
深入了解 PostgreSQL:功能、特性和部署
|
3月前
|
关系型数据库 数据库 数据安全/隐私保护
PostgreSQL基础之教你如何轻松管理用户角色与权限
PostgreSQL基础之教你如何轻松管理用户角色与权限
119 0
|
6月前
|
SQL 关系型数据库 数据库
SQL 42501: Postgresql查询中的权限不足错误
SQL 42501: Postgresql查询中的权限不足错误
441 0
|
关系型数据库 大数据 PostgreSQL
PostgreSQL16-新特性-并行聚合
PostgreSQL16-新特性-并行聚合
142 0
|
存储 关系型数据库 数据库
探索PostgreSQL 14新特性--SEARCH和CYCLE
探索PostgreSQL 14新特性--SEARCH和CYCLE
88 0
|
6月前
|
安全 关系型数据库 数据库
postgresql|数据库|角色(用户)管理工作---授权和去权以及usage和select两种权限的区别
postgresql|数据库|角色(用户)管理工作---授权和去权以及usage和select两种权限的区别
294 0
|
缓存 监控 关系型数据库
[译]PostgreSQL16-新特性-新增IO统计视图:pg_stat_io
[译]PostgreSQL16-新特性-新增IO统计视图:pg_stat_io
231 0
|
存储 缓存 关系型数据库
PostgreSQL 14新特性--减少索引膨胀
PostgreSQL 14新特性--减少索引膨胀
474 0
|
SQL 安全 前端开发
PostgreSQL 高权限命令执行 (CVE-2019-9193)漏洞复现&实战
PostgreSQL 高权限命令执行 (CVE-2019-9193)漏洞复现&实战
|
存储 SQL Oracle
AnalyticDB PostgreSQL 7.0 支持存储过程(CREATE PROCEDURE)特性
AnalyticDB PostgreSQL 7.0 新增了存储过程功能的支持,让用户在使用ADB PG时能够更方便高效地开发业务,并能够更好地兼容Oracle等传统数仓的业务。
493 1
AnalyticDB PostgreSQL 7.0 支持存储过程(CREATE PROCEDURE)特性