データベース - 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;
一発で消えます。
|
|