ECのシステムを導入するために、phppgadminから、そのサイト用のDBを作成し、そのDBのユーザも「ロール」から新たに作成しました。
そのDBのユーザに割り当てたDB以外は見れないように設定したつもりでしたが、現状、既に作成しているほかのDBのテーブルを編集することもできてしまっているようです。
このユーザを、割り当てたDB以外はアクセスできないようにするにはどうしたらいいのでしょうか?
お分かりの方、助けてください!
管理者IDにて、「ロール」の項目から、上記のユーザをこのように設定しています。
スーパーユーザーですか? いいえ
データベースを作成しますか? いいえ
ロールを作成できますか? いいえ
特権を引き継ぎますか? いいえ
ログインできますか? はい
接続制限 無記入
有効期限 無記入
次のグループのメンバー: 無選択
メンバー 無選択
管理メンバー 無選択
権限を付与したいユーザで表を作成すればアクセスできます。
作成者以外に対しては、GRANTで権限を付与する必要があります。
http://www.postgresql.jp/document/pg732doc/reference/sql-grant.html
調べてみました・・・
config.inc.php というファイル内の下記の項目をtrueに変更しておけば、
そのDBのオーナーだけが管理できるようになるそうです
$conf['owned_only'] = false; ↓ $conf['owned_only'] = true;
ファイルの場所はOSによりますがCentOSを例にとると下記
/var/www/phppgadmin/conf/config.inc.php
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のテーブルを編集することもできてしまっている」と書かれているので、やはり権利関係だと思います。
中途半端で申し訳ないです
GRANTの説明をしたほうがよかったですね
「ポイントを配分しない」にチェックを入れておいてください > はてはてな ( questiontion )さん
既に作成しているほかのDBのテーブルを編集することもできてしまっているようです。
というのは、他の DB のテーブルが、今、焦点になっているユーザに権限を与えている、ということになります。この事は、
管理者IDにて、「ロール」の項目から、上記のユーザをこのように設定しています。
スーパーユーザーですか? いいえ
データベースを作成しますか? いいえ
ロールを作成できますか? いいえ
......
というところを見ても分かりません。テーブル側の「特権」を見る必要があります。実際に「操作出来てしまうテーブル」を選択して「特権」を見れば、そのテーブルに対して、どんな操作が、どんなユーザに対して許可されているのか、という事が分かります。
で、ここは想像なのですが、おそらくその「操作出来てしまうテーブル」に、焦点になっているユーザに対して、ピンポイントで特権が設定されている訳ではないと思います。
特権の与え方として、「このユーザに権利を与える」という代わりに「みんなに与える」というやり方があります。
GRANT
お使いのバージョンに一番近いマニュアルが上記のページになりますが、phpPgAdmin を使って権利を与える設定をした時に、実際に実行される SQL 文がこの GRANT です。で、この記述の中の「PUBLIC」というのがあるます。これが「みんな」を表します。
実際、あるテーブルを選択した状態で「特権」を表示させ、そこで「権限」をクリックすると、「PUBLIC」というチェックボックスがあると思います。この「PUBLIC」にチェックを入れて「ALL PRIVILEGES」にチェックを入れれば、そのテーブルはみんながいじり放題、という状態になります。
「特権」の表示では、この「PUBLIC」に対するものは、ロールが空白になっているものが該当します。
...とここまで、手元で動かしてみた phpPgAdmin を元に書いていますが、phpPgAdmin のバージョンによって、画面上の文言等が異なっている可能性はあります。ちなみに手元のバージョンは 5.0.3 でした。
ということで、考え方として、ロールから見るのではなく、データベースやテーブルから見ていって、どんなロールに対してどんな操作が許可されているのか、といった調べたかたになります。
で、
そのDBのユーザに割り当てたDB以外は見れないように設定
するのであれば、その DB 以外の DB の特権を変更する必要があることになります。
ご回答ありがとうございます。私が行ないたいのは、今回作成したユーザは、そのユーザを所有者に設定したDB以外にはアクセスできないようにしたい、ということなのですが、その他のユーザに対しても何か設定しなくてはいけないのでしょうか?
2011/11/25 21:19:11