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
はスキーマを表示できますが、DBをクエリできません。
(\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など、私が使用したものとは対照的です)。さまざまなユーザーがアクセスできるようにデータベースを設定するにはどうすればよいですか。一部はCRUDを実行できるはずですが、他のユーザーは読み取りのみを実行できる場合などがあります。
助けてくれてありがとう。申し訳ありませんが、これは非常に基本的な質問であることはわかっていますが、自分で答えを見つけることができませんでした。
これについて、ServerFaultの postgresqlデータベースに対する権限を別のユーザーに付与する に対する私の回答に書いたところです。
基本的に、1人のユーザーがいて、他のユーザーに同じ権限を与えたい場合の最良の解決策は、そのユーザーをグループにして、グループのメンバーである元のユーザーと同じ名前で新しいユーザーを作成することです。そのグループを他のユーザーにも許可します。
したがって、あなたの場合、Rails
は_myapp_users
_と改名され、Rails
および_GRANT myapp_users TO Rails
_という名前の新しいログインロール(ユーザー)を作成します。あなたは_GRANT myapp_users TO meltemi
_になりました。新しいRails
アカウントとmeltemi
ユーザーの両方に、古いRails
accountの権限が付与されました。
より細かい制御のために、私は通常、日常のログインユーザーまたはそのグループにテーブルの所有権を与えないことをお勧めします。 NOINHERIT
グループを介してアクセス権を与えるには、明示的に_SET GROUP
_する必要があります。DDLやGRANT
sなどの特権操作には完全に異なるユーザーを使用する必要があります。残念ながら、これはRailsでは機能しません。なぜなら、Railsは、必要に応じて移行を適用することを好み、AFAIKでは、より特権の高い別のユーザーを指定して、移行として。