haiju's 開発メモ

開発に必要な情報を自分用にメモ

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の挙動がかなり違うな?

あと、文字コード周りの不具合が割と多い印象があるのだが。

その辺の情報はどういうキーワードで検索したらいいんだろう?

そもそも硬派なPostgreSQLWindowsインストーラあるけど、

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で適切に既存の権限やオブジェクトが

 削除されなかったって意味だと思うんだよな・・・

[参考サイト]

qiita.com

eng-entrance.com

poanchen.github.io

dba.stackexchange.com

stackoverflow.com

stackoverflow.com

qiita.com

dev.classmethod.jp

db.just4fun.biz