Postgresql 只读角色和用户

Posted

技术标签:

【中文标题】Postgresql 只读角色和用户【英文标题】:Postgresql readonly role and user 【发布时间】:2018-07-17 17:57:32 【问题描述】:

我找不到这个问题的答案:为什么在授予权限后从表中选择会失败?

-- create new role
CREATE ROLE readonly;

-- grant access to all existing tables
GRANT CONNECT ON DATABASE shop TO readonly;
GRANT USAGE ON SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO readonly;

-- grant access to all table which will be created in the future
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON SEQUENCES TO readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT EXECUTE ON FUNCTIONS TO readonly;

-- create user and grant role to this user
CREATE USER b_readonly WITH PASSWORD 'reAdOnLy123';
GRANT readonly TO b_readonly;

我来自 db 的错误信息如下:

错误:关系 customer_search_query SQL 的权限被拒绝 状态:42501

Postgresql 9.6.5 有什么新技巧吗?

【问题讨论】:

排除显而易见的问题:表 customer_search_query 是在架构 public 中还是可能在搜索路径上的不同架构中创建? 【参考方案1】:

您查询的表customer_search_query 可能不在公共架构中。尝试运行此命令。

GRANT SELECT ON customer_search_query TO readonly;

【讨论】:

以上是关于Postgresql 只读角色和用户的主要内容,如果未能解决你的问题,请参考以下文章

Case: 一个read-only 角色对某个schema下的新建的表,无需单独授权,直接拥有只读权

PostgreSQL 不会递归地撤销角色

PostgreSQL数据库创建只读用户总结

一文全搞懂postgresql的角色

postgresql学习笔记角色

如何在 PostgreSQL 中创建只读用户?