如何授权某个用户只能访问PostgreSQL的某个库?

数据库关系型数据库技术服务知识库
问题描述

如何对 PostgreSQL 新建用户实现只能访问某个数据库,而其他数据库则无权限,我们应该如何进行授权?

问题分析

若创建的表没有指定模式,就会在 public 模式下,默认情况下每个人在 public 模式下都有CREATE 和 USAGE 权限,也就是说,允许所有可以连接到指定数据库上的用户在这里创建对象。所以我们要回收对应的权限让其无法访问。

问题复现

创建新的用户和数据库,可以看到默认情况下,新建的用户没有赋予任何权限,就可以在 public schema 中进行创建表以及插入数据的操作。

postgres=# create user test2 with Login password 'xxxxxx';
CREATE ROLE
postgres=# \c postgres test2;
You are now connected to database "postgres" as user "test2".
postgres=> create table testtable(id int);
CREATE TABLE
postgres=> insert into testtable values(1);
INSERT 0 1
```
`
# 解决方案
如果我们希望新建的用户只具有指定数据库的相关权限,我们需要使用最高权限用户去掉 test2 用户对其他库下 public schema 的 Create 权限。
```sql
postgres=# revoke CREATE ON SCHEMA public FROM test2;

# 切换到 test2 用户验证权限
testdb=> \c lxb;
You are now connected to database "lxb" as user "test2".
lxb=> \dt;
         List of relations
 Schema |  Name  | Type  |  Owner   
--------+--------+-------+----------
 public | test01 | table | postgres
(1 row)

# 在其他库中没有权限查看其他 owner 的表内容

lxb=> select * from test01;
ERROR:  permission denied for table test01

# 在其他库 lxb 下没有权限创建表
lxb=> create table test04(id int);
ERROR:  permission denied for schema public

```

注意生产权限的修改一定要在测试环境充分验证,并记录修改前权限,有对应的回滚方案,避免影响线上业务。

**如果您有其他问题,欢迎您联系火山引擎**[技术支持服务](https://console.volcengine.com/ticket/createTicketV2/)

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

所属团队号:
相关资源
大模型解决方案白皮书:社交陪伴场景全流程落地指南
随着大模型技术持续突破,AI正加速重塑社交娱乐的形态与体验。其中,陪伴式聊天因用户黏性强、互动频次高,成为大模型商业化落地的关键赛道。随着模型能力跃升至万亿参数级,AI从工具属性正迈向情感交互生态,现象级产品的诞生条件逐渐成熟。 本白皮书聚焦AI陪伴聊天应用开发,面向“从何起步、如何落地”的新手困惑,系统拆解从需求定义到产品上线的关键流程。我们结合工程化实践路径,打造模块化知识体系与渐进式开发框架,帮助开发者在30天内完成从技术认知到产品原型的跃升,快速构建具备基础交互能力的Web或App应用,迈出大模型
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论