LAPP(Linux + Apache + PostgreSQL + PHP)環境で、下記のようなWebアプリケーションの開発を仮定します。
・会員制のサービスで、メンバーにはメールアドレスを付与する。(Postfix使用)
・そのメールアカウントは、メールボックスに配信 or 登録されたアドレスに転送する機能を持つ。
・メールボックスに配信するか転送するか、及び、転送先アドレスは各ユーザがPHP経由でDBに登録・変更。
・会員同士が利用できる掲示板(書き込み削除は、投稿者または管理者のみに許可)を提供する。
・その他こまごまとした一般的なシステムを提供する。(まだ具体的ではありません)
ここで、アカウントと呼べるものは、
A: このサービスのアカウント(DB上のテーブルで管理)
B: Linuxのユーザーアカウント
C: データベースアカウント
があると思いますが、それぞれのAのアカウントに、B,Cのシステム上のアカウントも発行すべきでしょうか?
(B,Cのアカウントは、システム内部で使用するもので、ユーザーが直接使用するものではありません。)
パターン1 : Aのアカウントのみ。DB等にアクセスする場合は、一般ユーザー用の共用アカウントを使用する。
パターン2 : Aのアカウントに対応する、B,Cのアカウントを発行して、ユーザー毎にそれぞれのアカウントを使用する。
パターン2の方が、B,Cのアカウントに対する権限が細かく設定できるようになるので、セキュリティを上げられる可能性があると思っています。(その分、管理は大変になると思いますが。)
そこで、それぞれのメリット・デメリット、セオリー(一般的にはどちらのパターンが使用されるか)、その他パターンの可能性をご教授願えれば、と思っています。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
システムの設計次第だとおもいますが。
まず、Aは必須ですよね。
ここでお尋ねしたいのは、BとCのアカウントは何のために必要なのか?です。
機能としては、
・メールアドレスの付与
・掲示板の利用
が確定しているようですが、この2つの機能だけなら、別にBとCは不要なわけで。
BとCをユーザー毎に作らない方が、セキュリティ的には好ましいでしょう。
結局、その他こまごまとした一般的なシステムの中身次第で、BとCが本来的に必要なのかどうか決りますね。
無用なシステムアカウントなどはないほうが、セキュリティ的には好ましいです
この回答への補足
nebelさん、こんにちは。ご回答ありがとうございます。
Linuxアカウントは、メールを「転送」ではなく「メールボックスに配信」にした場合に、Postfixに対して必須かな、と思いました。実際に必要かどうかは勉強不足です。すいません^^;
DBアカウントは、ユーザー毎に、各テーブルに対する SELECT,INSERT,UPDATE,DELETE の権限を設定した方が、高いセキュリティを維持できると考えました。例えば、「その他こまごまとした一般的なシステム」として「ToDoリスト」を例に挙げてみます。
ToDoリスト(todo)テーブル(カラム構成は、通し番号(id),ユーザー名(username),内容(body))に対して、ユーザー毎にビューを定義(CREATE VIEW todo_pe_daichan (id, body) AS SELECT * FROM todo WHERE username = 'pe_daichan';)し、ビュー todo_pe_daichanに対しては、ユーザー pe_daichan しかアクセスできないようにする。
この場合、プログラマの意図通りのSQLしか発行されないのであれば、SELECT の WHERE句に、必ず username = '[ユーザー名]' が入っていれば、todoテーブルに対して操作を行う方式でも問題は発生しません。が、万一SQLインジェクション等で username による限定が外れてしまった場合(当然インジェクションを防げるよう留意してプログラミングを行いますが)、他人のToDoの内容が漏れる可能性が出てきます。
そこで、上記のようなビューをユーザー毎に定義し、各Aアカウントに対してCアカウントも発行し、todoに関しては自分用のビューにしかアクセスできないような仕様にしておけば上記の不安が多少なりとも改善するような気がします。
上記は例の一つですが、似たようなケースは多いと思います。そういう場合では、どうでしょう?
また、「ToDoリストくらい漏れても大ごとじゃ無い」という考えもありますが^^;、例えばこれがToDoリストではなく、個人情報・機微情報だったりしたら、どうでしょう?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#1062 - '0' は索引 'PRIMARY' ...
-
【初歩】ラジオボタンをつかっ...
-
SQLでカラムを追加し、条件に合...
-
int(11)の(11)とは何を意味して...
-
テーブル名が可変の場合のクエ...
-
エラー 1068 (42000): 複数の主...
-
SQLで日付別のIDを生成するには
-
ここで言う参考書のエイリアス...
-
SQLです教えてください。
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
「総降水量が100mm以上になる...
-
〜のような結果を出すためのSQL...
-
このSQLあってますか?教えてく...
-
SQLです!!教えてください。あ...
-
SQLです!!教えてください。あ...
-
SQLです!!教えてください。あ...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#1062 - '0' は索引 'PRIMARY' ...
-
テーブル名が可変の場合のクエ...
-
エラー 1068 (42000): 複数の主...
-
SQLでカラムを追加し、条件に合...
-
mysqlがインストールされている...
-
BGMを教えてほしいです!
-
【初歩】ラジオボタンをつかっ...
-
下記の問合せを行うクエリを、P...
-
SQLです。こんな感じですか?あ...
-
mysqlのupdate構文についての質...
-
utf8bomとutf8mb4の違いがいま...
-
SQLです教えてくださいお願いし...
-
int(11)の(11)とは何を意味して...
-
あってますか?SQL
-
何にかが違うから エラーなんで...
-
MySQLのテーブル作成でハイフン...
-
下の画像はSQLの4大命令の性質...
-
はもうダメですか?
-
SQLです!!教えてください。
-
下記の問合せを行うクエリを、P...
おすすめ情報