tencent cloud

云数据库 PostgreSQL

动态与公告
产品动态
产品简介
产品概述
产品特性
产品优势
应用场景
信息安全说明
地域和可用区
产品功能列表
大版本生命周期说明
MSSQL 兼容版
产品计费
计费概述
实例类型与规格
购买方式
退费说明
欠费说明
备份空间收费说明
快速入门
创建 PostgreSQL 实例
连接 PostgreSQL 实例
管理 PostgreSQL 实例
数据导入
通过 DTS 迁移数据
内核能力介绍
内核版本概述
内核版本更新动态
查看内核版本
自研内核功能介绍
数据库审计
审计服务说明
开通审计服务
查看审计日志
修改审计服务
审计性能说明
用户指南
实例管理
升级实例
CPU 弹性扩容
只读实例
账号管理
数据库管理
参数管理
日志管理及分析
备份与恢复
数据迁移
插件管理
网络管理
访问管理
数据安全
租户及资源隔离
安全组
监控与告警
标签
AI 实践
使用 tencentdb_ai 插件调用大模型
使用 tencentdb_ai 插件构建 AI 应用
结合 Supabase 快速构建基于云数据库 PostgreSQL 的后端服务
实践教程
跨库访问
如何在 PostgreSQL 中自动创建分区
基于 pg_roaringbitmap 实现超大规模标签查找
一条 SQL 实现查询附近的人
如何配置云数据库 PostgreSQL 作为 GitLab 外部数据源
通过 cos_fdw 插件支持分级存储能力
通过 pgpool 实现读写分离
通过 auto_explain 插件实现慢 SQL 分析
使用 pglogical 进行逻辑复制
使用 Debezium 采集 PostgreSQL 数据
在 CVM 本地搭建 PostgreSQL 异地灾备环境
只读实例与只读组实践教程
如何使用云函数定时操作数据库
表膨胀处理
性能白皮书
测试方法
测试结果
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Read-only Replica APIs
Backup and Recovery APIs
Parameter Management APIs
Security Group APIs
Performance Optimization APIs
Account APIs
Specification APIs
Network APIs
Data Types
Error Codes
常见问题
相关协议
Service Level Agreement
Terms of Service
词汇表
联系我们

PUBLIC 权限操作

PDF
聚焦模式
字号
最后更新时间: 2025-11-03 14:20:39
在 PostgreSQL 中,创建某些类型的对象时,系统会默认向 PUBLIC 角色授予特定权限。默认向 PUBLIC 授予的权限如下,更多权限说明请参考 PostgreSQL 官方文档
对象类型
默认 PUBLIC 权限
Databases
CONNECT、TEMPORARY
Functions/Procedures
EXECUTE
Languages
USAGE
Data Types
USAGE
向 PUBLIC 授予权限等同于向所有用户(包括未显式创建的用户)授予该权限。您可以按需求撤销这些默认 PUBLIC 权限,以便更精确地为数据库用户授权,下文将详细为您举例。
说明:
支持 PUBLIC 角色的权限操作能力的内核版本为 v13.22_r1.26、v14.19_r1.35、v15.14_r1.20、v16.10_r1.15、v17.6_r1.9 及以上版本。历史内核小版本的云数据库 PostgreSQL 的实例需要先 升级内核小版本 才能使用该能力。
历史内核小版本的云数据库 PostgreSQL 的实例在升级内核小版本之后,在使用该能力之前需要先在对应的 database 中执行 drop extension tencentdb_superuser;然后执行create extension tencentdb_superuser;
假设您现在有两个数据库账号 am_a 和 dbadmin,详情如下图所示,用户创建请参考 控制台操作指引

其中数据库账号 dbadmin 是 database test_db 的 OWNER,如下图所示:

首先,我们使用账号 dbadmin 登录 database test_db,如下所示:
[am@VM-91-60-centos ~]$psql -h10.*.*.* -p5432 -Udbadmin -dtest_db
Password for user dbadmin:
psql (16.0, server 16.10)
Type "help" for help.
切换到 am_a 账号,我们可以验证 am_a 通过 PUBLIC 拥有 database 的登录权限和系统表的查询权限,具体如下:
test_db=> \\c - am_a
psql (16.0, server 16.10)
You are now connected to database "test_db" as user "am_a".
test_db=> select oid FROM pg_class LIMIT 1;
oid
------
2619
(1 row)
使用 dbadmin 账号回收 PUBLIC 权限后,am_a 账号无法访问系统表:
test_db=> \\c - dbadmin
Password for user dbadmin:
psql (16.0, server 16.10)
You are now connected to database "test_db" as user "dbadmin".
test_db=> REVOKE SELECT ON pg_class FROM PUBLIC;
REVOKE
test_db=> \\c - am_a
Password for user am_a:
psql (16.0, server 16.10)
You are now connected to database "test_db" as user "am_a".
test_db=> select oid FROM pg_class LIMIT 1;
ERROR: permission denied for table pg_class
使用 dbadmin 账号回收 PUBLIC 权限后,am_a 账号无法连接数据库 test_db:
test_db=> \\c - dbadmin
Password for user dbadmin:
psql (16.0, server 16.10)
You are now connected to database "test_db" as user "dbadmin".
test_db=> REVOKE CONNECT ON DATABASE test_db FROM PUBLIC;
REVOKE
test_db=> \\c - am_a
Password for user am_a:
connection to server at "10.*.*.*", port 5432 failed: FATAL: permission denied for database "test_db"
DETAIL: User does not have CONNECT privilege.
Previous connection kept
使用 dbadmin 账号重新授予 am_a 权限后,am_a 可以连接数据库 test_db,也可以访问系统表:
test_db=> \\c - dbadmin
psql (16.0, server 16.10)
You are now connected to database "test_db" as user "dbadmin".
test_db=> GRANT CONNECT ON DATABASE test_db TO am_a;
GRANT
test_db=> GRANT SELECT ON pg_class TO am_a;
GRANT
test_db=> \\c - am_a
Password for user am_a:
psql (16.0, server 16.10)
You are now connected to database "test_db" as user "am_a".
test_db=> select oid FROM pg_class LIMIT 1;
oid
------
2619
(1 row)

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈