由于有一个新项目,我目前正在学习PostgreSQL和MySQL之间的区别,并且我还打算将现有软件从MySQL迁移到PostgreSQL。我实际上已经开始创建一个HTML表,并在两者之间比较了命令(针对用户/数据库/命令提示符等)。在这里阅读答案后,我注意到role似乎是一个团体。使用MySQL,我有两个用户,基本上是公共用户(DELETEINSERTSELECTUPDATE权限)和一个具有几个附加权限的管理员用户。

所以基本上在Windows 7命令提示符下(仅限本地开发) ...


角色是用户,组还是一个特定于PostgreSQL的宽松术语?
如何为所有表仅授予特定用户特定的权限?在数据库中?
如何为数据库中的所有表授予特定用户所有权限?
如果为用户使用GRANTREVOKE,如何将角色与用户进行比较(如果有的话)权限?


#1 楼

角色是可以充当用户和/或组的实体。角色WITH LOGIN可以用作用户,即,您可以使用它登录。任何角色都可以作为一个组,包括您也可以作为其登录的角色。因此,“用户”和“组”本质上是指示角色预期用途的术语,它们之间没有真正的区别。即使在SQL的PostgreSQL风格中,两者或多或少都用作同义词。例如,关于CREATE USER的文档说:


CREATE USER现在是CREATE ROLE的别名。


授予所有权限...请参阅GRANT的手册。您实际上可能是想授予ALL TABLES IN SCHEMA public权限,而不是授予数据库中的所有表权限。同样,请参见手册。

角色是用户和/或组。您只能授予角色,因为角色就是全部。

评论


很好的解释!

– sharadov
18年1月29日在23:03

那么……在模式公共中授予所有表所有权限的语法是什么?

– AlxVallejo
18 Mar 12 '18 at 14:30

@AlxVallejo这应该有所帮助。请尝试顶部链接,或阅读GRANT文档页面,其中列出了SCHEMA中的所有表

–克雷格·林格(Craig Ringer)
18 Mar 16 '18 at 13:29