GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
読み取り専用ユーザーは接続できます。表を参照してください。ただし、単純な選択を実行しようとすると、次のようになります。
ERROR: permission denied for relation mytable
SQL state: 42501
これはPostgreSQL9.1で発生しています
私が間違ったことは何ですか?
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
読み取り専用ユーザーは接続できます。表を参照してください。ただし、単純な選択を実行しようとすると、次のようになります。
ERROR: permission denied for relation mytable
SQL state: 42501
これはPostgreSQL9.1で発生しています
私が間違ったことは何ですか?
これは、最近更新されたPostgreSQL9以降の完全なソリューションです。
CREATE USER readonly WITH ENCRYPTED PASSWORD 'readonly';
GRANT USAGE ON SCHEMA public to readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
-- repeat code below for each database:
GRANT CONNECT ON DATABASE foo to readonly;
\c foo
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly; --- this grants privileges on new tables generated in new database "foo"
GRANT USAGE ON SCHEMA public to readonly;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
いくつかの重要な側面についてhttps://jamie.curle.io/creating-a-read-only-user-in-postgres/に感謝します
誰かがより短いコード、できれば既存のすべてのデータベースに対してこれを実行できるコードを見つけた場合は、追加の賞賛があります。
追加してみてください
GRANT USAGE ON SCHEMA public to readonly;
スキーマ内のオブジェクトを使用するには、スキーマに対する必要な権限が必要であることに気付いていない可能性があります。
これは私のために働いた:
次を使用して、ログインしている現在の役割を確認します。SELECT CURRENT_USER、SESSION_USER;
注:スキーマの所有者と一致する必要があります。
スキーマ| 名前| タイプ| 所有者
--------+-------- + ------- + ----------
所有者が異なる場合は、次の方法で、管理者の役割から現在のユーザーの役割にすべての権限を付与します。
'ROLE_OWNER'を'CURRENTROLENAME'に付与します。
次に、クエリを実行しようとすると、すべてのリレーションにアクセスできるようになったため、出力が表示されます。
ユーザーがそのロールに属性を持っていることを確認してください。例えば:
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
flux | | {}
postgres | Superuser, Create role, Create DB, Replication | {}
次のコマンドを実行した後:
postgres=# ALTER ROLE flux WITH Superuser;
ALTER ROLE
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
flux | Superuser | {}
postgres | Superuser, Create role, Create DB, Replication | {}
それは問題を修正しました。
ここで役割などのチュートリアルを参照してください:https ://www.digitalocean.com/community/tutorials/how-to-use-roles-and-manage-grant-permissions-in-postgresql-on-a-vps--2
次のクエリを実行する必要があります。
GRANT ALL ON TABLE mytable TO myuser;
または、エラーがビューにある場合は、テーブルに権限がない可能性があるため、次のクエリを実行する必要があります。
GRANT ALL ON TABLE tbm_grupo TO myuser;