使用一个语句向所有序列授予SELECT权限。

35

我该如何使用一个语句向用户授予对所有序列的SELECT权限?类似于:

GRANT SELECT ON <ALL SEQUENCES???> TO myUser

相关链接:https://stackoverflow.com/a/45369697/161022 (SELECT语句不允许使用nextval) - lmsurprenant
6个回答

67
在PostgreSQL 9.x中,您可以将一个模式中的所有序列的权限授予一个角色。语法如下:syntax
GRANT SELECT
ON ALL SEQUENCES IN SCHEMA schema_name
    TO role_name

该角色可以是组角色或登录角色(用户名)。


1
它是否也适用于未来(尚未创建的)序列,还是仅适用于执行时存在的序列? - lmsurprenant
1
@lmsurprenant:只是现有的,但请参见ALTER DEFAULT PRIVILEGES - Mike Sherrill 'Cat Recall'

44

这将来会非常有用:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO your_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA schema_name TO your_user;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA schema_name TO your_user;

序列的所有权限是什么意思? - Naveen Kerati
允许执行以下操作:currval()、lastval()、nextval()、setval()和DROP。 - Oswaldo Rodriguez Gonzalez

13

对于我来说,已接受的答案在9.1上没用。下面的语句确实有效:

GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO user;

5
如果您想要实际修改该序列,您需要使用 SELECTUSAGE - Arran Cudbard-Bell

3

它适用于Postgres 13

GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO admin;

2

对于低于9.0版本的Postgres

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

参考:http://gotochriswest.com/blog/2012/06/11/postgresql-granting-access-to-all-sequences/

这篇文章介绍了如何授予用户访问PostgreSQL数据库中所有序列的权限。为了授权,需要使用以下命令:

GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO <user>;

其中,“<user>”是你要授权的用户名。这个命令将授予该用户在“public”架构中访问所有序列的权限。


0
在Postgres 15+中,有预定义的角色,使得在设置数据库时更容易授予有用的权限。
请参阅https://www.postgresql.org/docs/current/predefined-roles.html
GRANT pg_read_all_data TO USER;  
-- SELECT on all tables, views, and sequences. USAGE of all schemas.

GRANT pg_write_all_data TO USER;
-- INSERT, UPDATE, DELETE on all tables, views, and sequences. Usage of all schemas.

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