postgresql – 授予用户对所有表的访问权限

前端之家收集整理的这篇文章主要介绍了postgresql – 授予用户对所有表的访问权限前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是Postgres的新手并试图迁移我们的 MySQL数据库.在 MySQL中,我可以为低权限用户授予SELECT,UPDATE,INSERT和DELETE权限,并允许这些授权应用于指定数据库中的所有表.我必须在Postgres中遗漏一些东西,因为看起来我必须一次为每个表授予这些权限.每个数据库有许多数据库和数百个表,这似乎是一项艰巨的任务,只是为了起步.此外,一旦数据库处于运行状态,添加表就会频繁发生,除非绝对必要,否则我不希望每次都授予权限.

这怎么做得最好?

首先,您必须能够连接到数据库才能运行查询.这可以通过以下方式实现
REVOKE CONNECT ON DATABASE your_database FROM PUBLIC;

GRANT CONNECT
ON DATABASE database_name 
TO user_name;

REVOKE是必要的because

The key word PUBLIC indicates that the privileges are to be granted to
all roles,including those that might be created later. PUBLIC can be
thought of as an implicitly defined group that always includes all
roles. Any particular role will have the sum of privileges granted
directly to it,privileges granted to any role it is presently a
member of,and privileges granted to PUBLIC.

如果您真的想将用户限制为DML语句,那么您还需要做更多的事情:

REVOKE ALL
ON ALL TABLES IN SCHEMA public 
FROM PUBLIC;

GRANT SELECT,INSERT,DELETE
ON ALL TABLES IN SCHEMA public 
TO user_name;

这些假设您将只有一个模式(默认情况下名为“public”).

正如杰克道格拉斯指出的那样,上面只给出了现有表的特权.要在将来的表中实现相同的目标,您必须使用define default privileges

ALTER DEFAULT PRIVILEGES 
    FOR ROLE some_role   -- Alternatively "FOR USER"
    IN SCHEMA public
    GRANT SELECT,DELETE ON TABLES TO user_name;

这里,some_role是创建表的角色,而user_name是获取权限的角色.定义此项,您必须以some_role或其成员身份登录.

最后,你必须对序列做同样的事情(感谢PlaidFan指出它) – 这里是你需要的USAGE特权.

猜你在找的Postgre SQL相关文章