首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Postgresql中创建拥有所有数据库只读权限的用户?

如何在Postgresql中创建拥有所有数据库只读权限的用户?
EN

Stack Overflow用户
提问于 2011-06-23 18:59:32
回答 4查看 39.6K关注 0票数 29

我想创建一个只对所有数据库中的所有表拥有select特权的用户。我想我可以获得一个数据库列表,并对每个数据库应用以下命令:

代码语言:javascript
运行
复制
GRANT select ON DATABASE dbname to user1;

但我得到了以下错误:

代码语言:javascript
运行
复制
ERROR:  invalid privilege type SELECT for database

当我在谷歌上搜索时,人们建议对所有的表执行grant select操作。但是总是在添加新的表。所以这对我来说不是一个可接受的解决方案。有人知道什么变通方法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-23 21:05:37

您不能在数据库级别执行此操作,只能在模式级别执行此操作。

假设您只在每个数据库中使用public模式,您可以这样做:

代码语言:javascript
运行
复制
GRANT SELECT ON ALL TABLES IN SCHEMA public TO user1;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO user;
票数 29
EN

Stack Overflow用户

发布于 2011-06-23 19:40:35

我知道你已经说过这不是一个可接受的答案,但不管怎样,这是正确的答案。

指定安全性(GRANT和REVOKE)是表设计和测试的一部分。

在表定义、安全性、测试和测试数据受到版本控制之前,不要将表转移到生产环境中。

话虽如此,PostgreSQL对数据库没有任何SELECT权限。您只能授予对数据库的CREATE、CONNECT或TEMP权限。

您可以对给定模式中的所有表授予SELECT权限。我不知道这对运行GRANT语句后创建的表有何影响,但它很容易测试。

PostgreSQL Grant syntax

票数 4
EN

Stack Overflow用户

发布于 2012-10-05 19:50:53

对于低于9.0的Postgres版本:

代码语言:javascript
运行
复制
psql -d DBNAME -qAt -c "SELECT 'GRANT SELECT ON ' || tablename || ' TO USER;' 
FROM pg_tables WHERE schemaname = 'public'" | psql -d DBNAME

psql -d DBNAME -qAt -c "SELECT 'GRANT SELECT ON ' || viewname || ' TO USER;' 
FROM pg_views WHERE schemaname = 'public'" | psql -d DBNAME

psql -d DBNAME -qAt -c "SELECT 'GRANT SELECT ON ' || relname || ' TO USER;' 
FROM pg_statio_all_sequences WHERE schemaname = 'public'" | psql -d DBNAME
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6452956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档