私は簡単なSQLコマンドを実行しようとしました:
select * from site_adzone;
そして私はこのエラーを得ました
ERROR: permission denied for relation site_adzone
ここで何が問題だろうか?
私はまた他のテーブルのための選択をすることを試み、同じ問題を得た。私もこれをやろうとしました:
GRANT ALL PRIVILEGES ON DATABASE jerry to tom;
しかし、私はコンソールからこの応答を得ました
WARNING: no privileges were granted for "jerry"
何が間違っている可能性があるかについて何か考えがありますか?
データベースに対するGRANTは、必要なものではありません。テーブルに直接付与します。
データベースに対する権限の付与は、主に接続権限を付与または取り消すために使用されます。これにより、他に十分な権限がある場合にデータベース内で誰がデータを処理できるかを指定できます。
代わりに欲しい:
GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;
これでこの問題は解決します。
Ron Eを投稿すると、他の人に役立つ可能性があるため、すべてのテーブルに対する付与特権について回答します。
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
最初に正しいデータベースに接続します それから、次のコマンドを実行します。
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to jerry;
スキーマ内のすべての既存のテーブルに権限を付与するには、次のコマンドを使用します。
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>
将来のテーブルに適用されるデフォルトの権限を指定するには、次のようにします。
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema>
GRANT <privileges> ON TABLES TO <role>;
例えば.
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;
SERIAL
またはBIGSERIAL
カラムを使用する場合、おそらくSEQUENCES
に対しても同じことをしたくないでしょう。そうしないとINSERT
は失敗するでしょう( Postgres 10のIDENTITY
はその問題に悩まされず、SERIAL
型よりも推奨されます)すなわち.
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;
詳細と再利用可能なスクリプトについては、「 Webアプリケーションに対するPostgreSQLのアクセス許可 」に対する私の回答も参照してください。
参照:
1番目および 重要 ステップは、データベースに接続することです。
psql -d yourDBName
2ステップ、特権を付与
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;
これは、ユーザpostgresとしてテーブルを作成し、それから一般ユーザとしてそれにアクセスしようとしたときによく起こります。この場合、postgresとして再度ログインし、ALTER TABLE OWNER TO someuserを使用してテーブルの所有権をテーブルを使用する予定のユーザに変更することをお勧めします。
必ずテーブルの所有者としてpsqlにログインしてください。誰がテーブルを所有しているかを調べるには\dt
を使います。
psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES
それならあなたはGRANTSを走らせることができます