postgresql 角色权限
概要
postgresql 默认的账户 postgres 权限太高, 当一个数据库服务上有多个项目的数据库时, 大家都通过 postgres 账户来连接数据库安全性太差.
最好的方式是, 每个数据库有自己的账户, 该账户只能查看特定的数据库, 无法访问其他数据库.
最近有几个项目, 开发时都是直接用 postgres 账户, 发布时, 由于安全性的要求, 无法再使用此帐户.
因此, 需要创建新的不同帐户来连接不同的数据库, 调整过程中遇到的一些坑记录如下:
数据库切换角色
重新创建数据库
这种情况, 一般是因为之前直接把表创建在了默认的 postgres 数据库中了.
这是, 需要创建新的数据库和帐户, 并把数据迁移到新的数据库.
1 # 创建新账户
2 CREATE USER testuser WITH PASSWORD 'testpasswd';
3
4 # 创建新数据库并将 OWNER 设置为新创建的帐户
5 CREATE DATABASE testdb OWNER testuser;
6
7 # 给新用户授权
8 GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;
创建数据库之后, 接着使用上面创建的 testuser 来创建 schema 和 table
这样, testuser 就有了对这些 schema 和 table 访问的权限
已有数据库
对于已有的数据库, 其中的 schema 和 table 之前是用 postgres 帐户创建的.
这时, 先给新建的账户赋予数据库权限
1 # 创建新账户
2 CREATE USER testuser WITH PASSWORD 'testpasswd';
3
4 # 将数据库 OWNER 设置为新创建的帐户
5 ALTER DATABASE testdb OWNER TO testuser;
6
7 # 给新用户授权
8 GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;
虽然给 testuser 账户赋予了数据库层的所有权限, 但是对其中的 schema 和 table, 仍然没有权限.
需要针对 schema 和 table 再次授权
1 # 赋予用户schema的权限
2 GRANT ALL PRIVILEGES ON SCHEMA illuminant TO testuser;
3
4 # 赋予schema下所有表的权限
5 GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA illuminant TO testuser;
这样, 就可以用新账户访问新数据库了.
标签:
数据库相关
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
2014-01-11 《Linux内核设计与实现》读书笔记 - 目录 (完结)
2014-01-11 《Linux内核设计与实现》读书笔记(二十)- 补丁, 开发和社区