GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
読み取り専用ユーザーは接続してテーブルを表示できますが、単純な選択を行おうとすると、次のようになります。
ERROR: permission denied for relation mytable
SQL state: 42501
これはPostgreSQL 9.1で起こっています
何を間違えたか?
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
読み取り専用ユーザーは接続してテーブルを表示できますが、単純な選択を行おうとすると、次のようになります。
ERROR: permission denied for relation mytable
SQL state: 42501
これはPostgreSQL 9.1で起こっています
何を間違えたか?
回答:
最近更新されたPostgreSQL 9以降の完全なソリューションを次に示します。
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 ALLデフォルトで読み取り専用ユーザーにアクセス許可を付与するのはなぜですか?
\ddp。読み取り専用アクセスと同じ=r/ようgranting_user=r/readonly_userに表示されます。
追加してみてください
GRANT USAGE ON SCHEMA public to readonly;
スキーマでオブジェクトを使用するために、スキーマへの必要なアクセス許可が必要であることをおそらくご存じではありませんでした。
psqlいpostgresます。ユーザーとして使用してサーバーでこれらのコマンドを実行すると、適切な応答が得られGRANTます。それでも、テーブルのACLを見ると、他に2つのアカウントしかありません。1つはデータベース所有者でjirauser、もう1つはという名前の読み取り専用アカウントqauserです。しかし、私readonlyはそこに現れません。Postgresはバージョン9.1で、サーバーを再起動しても、何も起こりません。
これは私のために働きました:
次のコマンドを使用して、ログインしている現在の役割を確認します。SELECTCURRENT_USER、SESSION_USER;
注:スキーマの所有者と一致する必要があります。
スキーマ| 名前| タイプ| 所有者
-------- + -------- + ------- + ----------
所有者が異なる場合は、次のようにして、管理者ロールから現在のユーザーロールにすべての権限を付与します。
「ROLE_OWNER」を「CURRENT ROLENAME」に付与します。
次に、クエリを実行してみます。これで、すべての関係にアクセスできるため、出力が得られます。
ユーザーにその役割の属性があることを確認してください。例えば:
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
ERROR: permission denied for relation mytable
次のクエリを実行する必要があります。
GRANT ALL ON TABLE mytable TO myuser;
または、エラーがビューにある場合、おそらくテーブルに権限がないため、次のクエリを実行する必要があります。
GRANT ALL ON TABLE tbm_grupo TO myuser;
ALTER DROP DELETEEct を与える場合、ユーザーに「ReadOnly」という名前を付ける目的に反します。そのユーザーに...