データベース - postgreSQL - ユーザを作成して権限を与える

クラウディア 
1. 概要
2. スーパーユーザを作成する

1. 概要

 やりたかったのは、新しいユーザ(スキーマ?、ロール?)を作成して、そのユーザにあるデータベースの権限を与えたかったのです。  本来、「データベース - SQL 構文」に書くべき事項かとも思いつつ。  「postgreSQL」の方言もありそうなので、このページに書いています。  本ページは、下記のサイトを参考にさせていただきました。
Postgresqlでスーパーユーザー権限をもったユーザーを作成する #Ruby

2. スーパーユーザを作成する

 ロール名を「hogehoge」とします。  いろいろとやってみたのですよ。  ロールを作成して、スキーマのすべての権限を与えて、すべてのテーブルの権限を与えてみました。  「psql」を「postgres」ユーザで起動。

sudo -u postgres psql
 「SQL」を実行。

create role with password 'パスワード';
grant all privileges on all tables in schema public to hogehoge;
grant all privileges on database データベース to hogehoge;
 でも、これ、接続する権限までで、テーブルにアクセスするには、「SELECT」でさえ、テーブルごとに権限を与えなければならないのです。

grant all privileges on table テーブル to hogehoge;
 なんて感じです。  これは、まいっちゃいます。  テーブルの数だけ、これやらなければならないのですわ。  「SELECT」と組み合わせてやる方法もあるのでしょうが、それも面倒。  しかも、このロールを削除するには、ロールに与えた、権限を削除してからでないと、ロールの「drop」を許してくれない。

ERROR:  role "hogehoge" cannot be dropped because some objects depend on it
DETAIL:  privileges for table ar_internal_metadata
 とか、いわれちゃうのです。  なので、作成したときと逆順に権限を削除して、ロールを削除します。

revoke all privileges on database データベース from hogehoge;
revoke all privileges on all tables in schema public from hogehoge;
drop role hogehoge;
 ですな、これは、あまりにも面倒です。  で、ここから、セキュリティにうるさい人は、絶対に許してくれないでしょうが。  スーパーユーザを作成するわけです。

create role hogehoge with superuser login password 'パスワード';
 これで、全権限を持つロールが作成できます。  このロールを削除するのも簡単。

drop role hogehoge;
 一発で消えます。
ハイスピードプラン