我对在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}
和数据库:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------------+--------+----------+-------------+-------------+-------------------
myapp_production | rails | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
...
用户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
...
这些表是通过ORM(Rails的ActiveRecord迁移)创建的。
我知道PostgreSQL中的授权非常不同(与MySQL和我使用的其他版本相对)。我应该如何设置数据库,以便不同的用户可以访问它。有些应该可以进行增删改查,但其他一些则只能阅读等。
谢谢你的帮助。抱歉,我知道这是一个非常基本的问题,但我自己找不到答案。
myapp而不是rails上面的内容?因为myapp拥有表(我从未指定过,所以迁移必须具有)。无论如何,这将八九不离十意义,如果我改名myapp到myapp_group,然后做了一个新的用户myapp将Rails应用程序将用于连接到数据库。Makemyapp和现有meltemi,均为myapp_group角色成员。但是,当我运行下一个迁移时会发生什么。通过myapp重新创建问题来拥有它吗?!?