【发布时间】:2014-09-15 02:28:00
【问题描述】:
我正在从 MySQL 迁移到 PostgreSQL,并且遇到了用户权限问题。我习惯于使用以下命令为用户分配数据库的所有表的所有权限:
# MySQL
grant all privileges on mydatabase.* to 'myuser'@'localhost' identified by 'mypassword';
在我看来,PostgreSQL 9.x 解决方案涉及将权限分配给“模式”,但我需要努力弄清楚要发出什么 SQL 证明是多余的。我知道再花几个小时的研究会得出一个答案,但我认为每个从 MySQL 迁移到 PostgreSQL 的人都可以受益于在 Web 上至少有一个页面提供简单而完整的配方。这是我需要为用户发出的唯一命令。我宁愿不必为每个新表发出命令。
我不知道在 PostgreSQL 中必须以不同的方式处理哪些场景,所以我将列出一些我过去通常必须处理的场景。假设我们只是想修改已经创建的单个数据库的权限。
(1a) 尚未创建所有表,或 (1b) 已创建表。
(2a) 用户尚未创建,或 (2b) 用户已创建。
(3a) 权限尚未分配给用户,或 (3b) 权限之前已分配给用户。
(4a) 用户只需要插入、更新、选择和删除行,或者 (4b) 用户还需要能够创建和删除表。
我已经看到了授予所有数据库所有权限的答案,但这不是我想要的。拜托,我正在寻找一个简单的食谱,虽然我也不介意解释。
我不想向所有用户和所有数据库授予权限,这似乎是传统的捷径,因为当任何一个用户受到威胁时,这种方法会危及所有数据库。我托管多个数据库客户端并为每个客户端分配不同的登录名。
看起来我还需要USAGE 权限来获取serial 列的递增值,但我必须按某种顺序授予它。我的问题变得更复杂了。
【问题讨论】:
-
我怀疑 PostgresQL 上用户权限的复杂性可能会严重阻碍更广泛的采用。
-
以下页面似乎授予用户对所有数据库的所有表的必要权限,而我只想授予对单个数据库的权限。 dba.stackexchange.com/questions/36870/…
标签: sql database postgresql privileges