我是 Postgres 的新手,正在尝试迁移我们的 MySQL 数据库。在 MySQL 中,我可以授予低权限用户的SELECT
、UPDATE
、INSERT
和DELETE
权限,并使这些授予适用于指定数据库中的所有表。我必须在 Postgres 中遗漏一些东西,因为看起来我必须一次为每个表授予这些权限。有许多数据库和每个数据库数百个表,这似乎是一项艰巨的任务,只是为了起步。此外,一旦数据库开始运行,添加表的频率就会很高,除非绝对必要,否则我不希望每次都授予权限。
这如何最好地完成?
我是 Postgres 的新手,正在尝试迁移我们的 MySQL 数据库。在 MySQL 中,我可以授予低权限用户的SELECT
、UPDATE
、INSERT
和DELETE
权限,并使这些授予适用于指定数据库中的所有表。我必须在 Postgres 中遗漏一些东西,因为看起来我必须一次为每个表授予这些权限。有许多数据库和每个数据库数百个表,这似乎是一项艰巨的任务,只是为了起步。此外,一旦数据库开始运行,添加表的频率就会很高,除非绝对必要,否则我不希望每次都授予权限。
这如何最好地完成?
首先,您必须能够连接到数据库才能运行查询。这可以通过
REVOKE
是必要的,因为如果您真的想将您的用户限制为 DML 语句,那么您还有更多工作要做:
这些假设您将只有一个模式(默认情况下名为“公共”)。
正如 Jack Douglas 指出的那样,上面的内容只为已经存在的表提供了权限。要为将来的表实现相同的功能,您必须定义默认权限:
在这里,
some_role
是创建表的角色,而user_name
获得特权的角色。定义这一点,您必须以它的身份some_role
或成员身份登录。最后,你必须对序列做同样的事情(感谢 PlaidFan 指出)——这就是
USAGE
你需要的特权。假设你想给他们所有的特权 - 这样做:
where
dbname
是您的数据库dbuser
的名称,是用户的名称。授予数据库中所有表的所有权限是通过以下方式实现的
可能是我在这里做错了什么,因为我对 PostgreSQL 很陌生。但这只是为我解决了问题的第一部分——在所有现有表上设置权限。
为了在创建的新表上为我的用户正确设置权限,我必须为用户设置默认权限: