データベース - postgreSQL - ユーザを作成して権限を与える
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; 一発で消えます。
「Postgresqlでスーパーユーザー権限をもったユーザーを作成する #Ruby」
sudo -u postgres psql
create role with password 'パスワード'; grant all privileges on all tables in schema public to hogehoge; grant all privileges on database データベース to hogehoge;
grant all privileges on table テーブル to hogehoge;
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;