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

606

我希望在PostgreSQL中创建一个只能从特定数据库进行SELECT操作的用户。 在MySQL中,相应的命令是:

GRANT SELECT ON mydb.* TO 'xxx'@'%' IDENTIFIED BY 'yyy';

在PostgreSQL中,等效的命令或命令系列是什么?

我已经尝试过...

postgres=# CREATE ROLE xxx LOGIN PASSWORD 'yyy';
postgres=# GRANT SELECT ON DATABASE mydb TO xxx;

但看起来你只能在数据库上授予 CREATE、CONNECT、TEMPORARY 和 TEMP 权限。

12个回答

0

从回复despesz'的链接中获取。

Postgres 9.x似乎具备执行所需操作的能力。请参阅以下内容的“授予数据库对象权限”段落:

http://www.postgresql.org/docs/current/interactive/sql-grant.html

其中提到:“还可以在一个或多个模式中授予权限以及这些模式内所有相同类型的对象。目前,此功能仅支持表、序列和函数(但请注意,ALL TABLES 被认为包括视图和外部表)。”

此页面还讨论了角色和名为“ALL PRIVILEGES”的权限的使用。

此外,页面上还提供了有关 GRANT 功能与 SQL 标准的比较信息。


-10
CREATE USER username SUPERUSER  password 'userpass';
ALTER USER username set default_transaction_read_only = on;

1
这是一个巨大的安全风险。用户发出的第一个命令只需要是:set transaction_read_only = off; - Rasjid Wilcox
1
Rasjid是正确的。请不要在任何数据库上运行此命令,始终将“username”更改为其他内容,“userpass”更改为安全内容。 - Radek Secka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接