2011-02-07 8 views
0

私は、学術目的で基本的なソーシャルネットワークを開発しなければなりません。ユーザー管理のヒントが必要です。複数のユーザーデータベースの設計

ユーザーは、管理者、アナリスト、標準ユーザーという異なる権限を持つ3つのグループに細分されています。 すべてのユーザーは、名前、姓、電子メール、年齢、パスワードの情報をデータベースに保存する必要があります。

私はtheese 2つのソリューション間のデータベースを設計する方法をかなりよく分からない:

1)ユーザーが何ができるかを説明し「役割」属性を持つ「ユーザー」と何ができ呼ばれる一つのテーブルすべてのアプリケーションユーザは、 'CREATE ROLE'というクエリ(Postgresデータベース)で作成されたデータベースユーザであり、 'GRANT'タグが付与されているいくつかのテーブルに対してパーミッションを持っています。ステートメント

プロジェクトがデータベース試験用であることを考慮する必要があります。

ありがとう

+1

パスワードをデータベースに保存しないでください!なぜそうでないのかについては、http://blog.moertel.com/articles/2006/12/15/never-store-passwords-in-a-databaseを参照してください。 – btilly

答えて

2

データベースの認可メカニズムをアプリケーションの認可システムに使用しないでください。主な理由は次の3つです。

A)アプリ全体を再構築せずに、別のデータベースに変更することはできません。

B)アプリのユーザーに許可するものの種類は、DBのACLシステムで許容されるものと異なる場合があります。

そして、最も重要:

C)あなたは、アプリケーションのユーザーにあなたのデータベースに直接何かをする能力を与えたくありません。これまで

あなたの#2オプションは間違いありません。したがって、各ユーザーレコードでユーザータイプフィールドを格納し、次に「そのユーザータイプが許可するもの」はPHPで計算されるビジネスロジックの一部になります。

0

ソリューション1毎回、テーブル単位でのみアクセス権を割り当てることを制限したくないので、データベースユーザーを使用することは煩雑で、あまり実用的ではありません。

0

オプション1を使用すると、長期的に柔軟性が増し、おそらくコード化が容易になり、アプリケーションロジックを特定の実装に近づけすぎないようにする必要があります。あとでSQL Server上で実行するようにアプリケーションを移植したい場合はどうしたらよいでしょうか?データベースユーザーが異なる方法で実装されている場合、オプション2は深刻な苦痛を与える可能性があります。

0

最初の代替手段(PHPによるアクセス許可の管理)を行ってください。ここに理由があり:

  1. データベースは、(グループの人々がアクセスなど許可されているものに、電子メールを送信することが許可された人)あなたが管理する必要があります権限で十分な選択肢と粒度を与えるものではありませんが
  2. 通常、データベースへの接続はかなり高価ですので、一度接続して(同じデータベースユーザーを使用して)できるだけ長く接続することをお勧めします。
  3. すべてのデータベースは、ユーザーアカウントの処理方法が同じには作成されません。SQL上に独自のユーザーシステムを構築することにより、より多くのデータベースに依存しないようにすることができます。
  4. データベース管理と開発プログラムのタスクはまったく異なる人によって行われ、プログラムには作成または変更する権利データベースユーザー
関連する問題