Mel*_*emi 14 postgresql authorization permissions role
我对在 PostgreSQL 中设置权限有点困惑。
我有这些角色:
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
admin | Superuser, Create role, Create DB, Replication | {}
meltemi | Create role, Create DB | {rails}
rails | Create DB, Cannot login | {}
myapp | | {rails}
Run Code Online (Sandbox Code Playgroud)
和数据库:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------------+--------+----------+-------------+-------------+-------------------
myapp_production | rails | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
...
Run Code Online (Sandbox Code Playgroud)
用户myapp在查询myapp_production数据库添加和删除记录时没有问题。我希望meltemi也能够查询相同的数据库。所以,我创建了一个角色rails拥有的数据库,并提出双方meltemi和myapp成员rails。但我仍然遇到permission denied for relation错误。Meltemi可以查看架构但不能查询数据库。
我刚刚注意到(使用\dt命令)这myapp是表的所有者:
List of relations
Schema | Name | Type | Owner
--------+-------------------+-------+-------
public | events | table | myapp
public | schema_migrations | table | myapp
...
public | users | table | myapp
...
Run Code Online (Sandbox Code Playgroud)
这些表是通过 ORM(Rails 的 ActiveRecord 迁移)创建的。
我知道 PostgreSQL 中的授权非常不同(与我使用的 MySQL 和其他人相反)。我应该如何设置我的数据库以便不同的用户可以访问它。有些应该能够 CRUD,但其他人可能只能阅读,等等......
谢谢你的帮助。抱歉,我知道这是一个非常基本的问题,但我自己无法找到答案。
我刚刚在对将 postgresql 数据库的权限授予 ServerFault 上的另一个用户的回答中写到了这一点。
基本上,当您拥有单个用户并且想要授予其他用户相同的权限时,最好的解决方案是将该用户转变为一个组,创建一个与作为该组成员的原始用户同名的新用户,然后也将该组授予其他用户。
因此,在您的情况下,rails被重命名为 say ,然后您创建一个名为和myapp_users的新登录角色(用户)。现在你一个. 新帐户和用户现在都拥有旧帐户的权限。railsGRANT myapp_users TO railsGRANT myapp_users TO meltemirailsmeltemirails
为了进行更细粒度的控制,我通常建议您避免将表的所有权授予日常登录用户或其组。NOINHERIT通过他们必须明确访问的组为他们提供访问SET GROUP权限,或者更好的是,使用完全不同的用户进行 DDL 和GRANTs 等特权操作。不幸的是,这不适用于 Rails,因为 Rails 喜欢在需要时应用迁移,并且 AFAIK 不允许您指定不同的、权限更高的用户来运行迁移。