PostgreSQLでユーザーごとにアクセス権限を変更したいのですが、現状どのユーザもすべてのDBが触れてしまいます。


ECのシステムを導入するために、phppgadminから、そのサイト用のDBを作成し、そのDBのユーザも「ロール」から新たに作成しました。
そのDBのユーザに割り当てたDB以外は見れないように設定したつもりでしたが、現状、既に作成しているほかのDBのテーブルを編集することもできてしまっているようです。
このユーザを、割り当てたDB以外はアクセスできないようにするにはどうしたらいいのでしょうか?
お分かりの方、助けてください!

管理者IDにて、「ロール」の項目から、上記のユーザをこのように設定しています。
スーパーユーザーですか? いいえ
データベースを作成しますか? いいえ
ロールを作成できますか? いいえ
特権を引き継ぎますか? いいえ
ログインできますか? はい
接続制限 無記入
有効期限 無記入
次のグループのメンバー: 無選択
メンバー 無選択
管理メンバー 無選択

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/12/02 20:30:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:kodairabase No.1

回答回数661ベストアンサー獲得回数80

ポイント67pt

権限を付与したいユーザで表を作成すればアクセスできます。
作成者以外に対しては、GRANTで権限を付与する必要があります。
http://www.postgresql.jp/document/pg732doc/reference/sql-grant.html

id:questiontion

ご回答ありがとうございます。私が行ないたいのは、今回作成したユーザは、そのユーザを所有者に設定したDB以外にはアクセスできないようにしたい、ということなのですが、その他のユーザに対しても何か設定しなくてはいけないのでしょうか?

2011/11/25 21:19:11
id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

ポイント67pt

調べてみました・・・

config.inc.php というファイル内の下記の項目をtrueに変更しておけば、
そのDBのオーナーだけが管理できるようになるそうです

$conf['owned_only'] = false;
  ↓
$conf['owned_only'] = true;

ファイルの場所はOSによりますがCentOSを例にとると下記
/var/www/phppgadmin/conf/config.inc.php

id:JULY

owned_only は単に「見えなくする」だけだと思います。
config.inc.php にあるコメントには

Only show owned databases?
Note: This will simply hide other databases in the list - this does
not in any way prevent your users from seeing other database by
other means. (e.g. Run 'SELECT * FROM pg_database' in the SQL area.)

と書かれています。確かにデフォルトでは、自分が何ら権利を持っていないデータベースも一覧には表示されますが、テーブルの中身を見たり、といった実際の操作自体は、権利を持っていなければ失敗しました。

質問文に「ほかのDBのテーブルを編集することもできてしまっている」と書かれているので、やはり権利関係だと思います。

2011/11/25 23:34:55
id:windofjuly

中途半端で申し訳ないです

GRANTの説明をしたほうがよかったですね

「ポイントを配分しない」にチェックを入れておいてください > はてはてな ( questiontion )さん

2011/11/25 23:46:04
id:JULY No.3

回答回数966ベストアンサー獲得回数247

ポイント66pt

既に作成しているほかのDBのテーブルを編集することもできてしまっているようです。

というのは、他の DB のテーブルが、今、焦点になっているユーザに権限を与えている、ということになります。この事は、

管理者IDにて、「ロール」の項目から、上記のユーザをこのように設定しています。
スーパーユーザーですか? いいえ
データベースを作成しますか? いいえ
ロールを作成できますか? いいえ
......

というところを見ても分かりません。テーブル側の「特権」を見る必要があります。実際に「操作出来てしまうテーブル」を選択して「特権」を見れば、そのテーブルに対して、どんな操作が、どんなユーザに対して許可されているのか、という事が分かります。

で、ここは想像なのですが、おそらくその「操作出来てしまうテーブル」に、焦点になっているユーザに対して、ピンポイントで特権が設定されている訳ではないと思います。

特権の与え方として、「このユーザに権利を与える」という代わりに「みんなに与える」というやり方があります。

GRANT

お使いのバージョンに一番近いマニュアルが上記のページになりますが、phpPgAdmin を使って権利を与える設定をした時に、実際に実行される SQL 文がこの GRANT です。で、この記述の中の「PUBLIC」というのがあるます。これが「みんな」を表します。

実際、あるテーブルを選択した状態で「特権」を表示させ、そこで「権限」をクリックすると、「PUBLIC」というチェックボックスがあると思います。この「PUBLIC」にチェックを入れて「ALL PRIVILEGES」にチェックを入れれば、そのテーブルはみんながいじり放題、という状態になります。

「特権」の表示では、この「PUBLIC」に対するものは、ロールが空白になっているものが該当します。

...とここまで、手元で動かしてみた phpPgAdmin を元に書いていますが、phpPgAdmin のバージョンによって、画面上の文言等が異なっている可能性はあります。ちなみに手元のバージョンは 5.0.3 でした。

ということで、考え方として、ロールから見るのではなく、データベースやテーブルから見ていって、どんなロールに対してどんな操作が許可されているのか、といった調べたかたになります。

で、

そのDBのユーザに割り当てたDB以外は見れないように設定

するのであれば、その DB 以外の DB の特権を変更する必要があることになります。

  • id:windofjuly
    うぃんど 2011/11/25 21:07:35
    PostgreSQLは使っているけど、
    phpPgAdminは使ってないので、
    答えられないんだけど、
    ポイント目当てで適当に単語で検索して、
    しかも古い情報をいいかげんに回答している人がいるみたいなんで、
    (7.3.2なんて、いつの時代だよ)
    とりあえず現状のものを書いておきますね
    http://www.postgresql.jp/document/9.1/html/sql-grant.html
  • id:questiontion
    コメントありがとうございます。
    確かに、私の環境も8.1.18でした。
    DBなどには詳しくなく、phppgadminからDBを作成してロールを作成するのが精一杯でして、頂いたリンク先のコマンドもどこで行なえばよいのかもおぼつかないです。
    これは、そんなレベルの自分ではなく、他の分かる人間に頼んだほうがよさそうでしょうか・・・
  • id:JULY
    windofjuly さんの回答にコメントしてみたんですけど、質問者が書いたコメントか、質問者以外が書いたコメントか、一見、分かりづらいですね。
  • id:kodairabase
    ああいうコメントを書かれると
    フォローする気が失せました。
    質問者の方には申し訳ないですが。
  • id:windofjuly
    うぃんど 2011/11/26 09:00:50
    kodairabase 2011/11/26 07:30:37
    >ああいうコメントを書かれると
    >フォローする気が失せました。
    >質問者の方には申し訳ないですが。
     
    フォローしたことなんかあったっけ?
    http://q.hatena.ne.jp/kodairabase/answerlist
     
    今回必要なのはフォロー(≒追記)じゃなくて訂正か言い訳か謝罪だし・・・
     

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません