我对在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
重新创建问题来拥有它吗?!?