PostgreSQL10を利用してERROR: permission denied for table table_nameが発生したら【調査中】
そもそもPostgresql10ではデフォルトではテーブルアクセス権限が追加され
ないという情報を得たのだが、でも環境構築スクリプトにはちゃんと定義さ
れているんだけどな...
一体どういうことなんだ?(Φω|
ということで少し調べてみた。
(お陰でローカル開発環境での動作確認が全く進んでない)
これ以外にも文字コード問題も絡んできて、Web環境の文字コードは
UTF8に統一してくれ、SJISはやめてあげてー。
[現在の状況]
1. 環境構築スクリプトを実行(権限はスーパーユーザーのpostgres)。
2. psqlで1で作成されたrole名とDB名を指定して再ログイン。
3. 1で作成されたテーブルにアクセスし確認。
4. ことごとくselectクエリーで下記エラー。
ERROR: relation "tablename" does not exist
※つまりログインできる側はあるけどスーパーユーザにより作成された
ユーザではまだテーブルアクセス権限がないということらしい。
(でもGRANT権限も定義されてたはずだけどな...)
[解決策?]
※テーブルにアクセスするには権限の追加が必要ということで...
1. 一旦、作成された特定のroleでログアウトし、スーパーユーザー
(postgres)で再ログイン。
2. 下記コマンドでテーブル操作権限を追加。
GRANT <権限の種類> ON <テーブル名> TO <ロール名>;
※<権限の種類>は、SELECTやUPDATE等のテーブル操作。
3. 試しにtest_roleにSELECTとINSERT権限を付加するコマンドを実行。
ERROR: relation "rolename" does not exist
※あるのにないってエラーメッセージ?
もしかしてCREATE ROLE rolename ... から始める必要があるとか?
PostgreSQL10に付属したpgAdmin4とpsqlの挙動がかなり違うな?
あと、文字コード周りの不具合が割と多い印象があるのだが。
その辺の情報はどういうキーワードで検索したらいいんだろう?
そもそも硬派なPostgreSQLはWindows版インストーラあるけど、
Windowsでは使うんじゃねーって言われているようだ・・・
スクリプト実行結果を細かく見ていると、文字コード周りのエラーが
結構出ている。
(ex)create_table周辺でエラー
ERROR: character with byte sequence 0xef 0xbf in encoding "SJIS" has no equivalent in encoding "UTF8"
(ex)grantコマンド実行周辺でシーケンス周りの権限が足りないっぽいメッセージ?
WARNING: sequence "tablename_sequence" only supports USAGE, SELECT, and UPDATE privileges
※確か参照権限のみのユーザーに与えるテーブル操作権限は、
SELECTとUSAGEさえあればいい的な情報を見たんだけど。
もし、全権限必要な場合は単純に「ALL」を指定したらいいのだろうか?
ドキュメントが長すぎてピンポイントに分かりづらい。
スクリプトも詳しく見ると、rolenameとschemaのownerとdatabase
のownerが違うとか、既にあるroleは削除できないとか言うエラーが
出ちゃってるのは多分、REVOKEで適切に既存の権限やオブジェクトが
削除されなかったって意味だと思うんだよな・・・
[参考サイト]