3

Python で記述される Web アプリ用の MySQL DB を構築しています。ユーザー機能を分離して、セキュリティを強化し、パフォーマンスを向上させたいと考えていました。私はこの方法でそれを行うことを考えています: 2 セットのテーブル:

  • 1 アプリユーザー管理用テーブル
  • 1 情報を格納するためのテーブルのセット

アプリからデータにアクセスして操作するために、4 人の mysql ユーザーを作成したいと考えています。

  • ユーザー テーブルの選択権限を持つ 1 人のユーザー
  • Users テーブルの挿入/更新権限を持つ 1 人のユーザー
  • 情報を格納する一連のテーブルに対する選択権限を持つ 1 人のユーザー
  • 情報を格納する一連のテーブルに対する挿入/更新権限を持つ 1 人のユーザー

したがって、各テーブルの読み取り/書き込みを行う各 Python モジュールは、必要なユーザーを使用します。

私の推論は、ユーザーまたは挿入フィールドが何らかの理由で危険にさらされた場合、操作/取得できる損害と情報が制限されるということです。DBへの正しい接続のみを使用し、モジュールごとに1回だけ行うため、アプリを複雑にするべきではありません。

それはやり過ぎだろうか?パフォーマンスに影響を与える可能性はありますか? 他の考えはありますか?

4

2 に答える 2

0

私の推論は、ユーザーまたは挿入フィールドが何らかの理由で危険にさらされた場合、操作/取得できる損害と情報が制限されるということです。DBへの正しい接続のみを使用し、モジュールごとに1回だけ行うため、アプリを複雑にするべきではありません。

はい、可能です。ユーザーごとに 1 つの接続/セッションを作成するだけです。常に SQLAlchemy を使用して ORM を解決することをお勧めします。それは、データベース内のユーザーと同じ数のインスタンスを宣言するのと同じくらい簡単です。

engine_select_only = create_engine(u'mysql://user1:pass@127.0.0.1/mydb'
engine_insert_update = create_engine(u'mysql://user1:pass@127.0.0.1/mydb'
engine_insert_update = create_engine(u'mysql://user1:pass@127.0.0.1/mydb'
...

次に、ニーズに最適な戦略を使用して、エンジンをテーブルにマップします。私はそれをテストしたことはありませんが (そのようなことを実装したことがないため)、SQLAlchemy が同じオブジェクトを異なるセッションにマップできない理由はわかりません。

それはやり過ぎだろうか?

私の個人的な意見は、はい、それはやり過ぎで、まったくばかげているということです。アプリケーションを正しくコーディングすれば、そのようなことをする必要はありません。アプリケーションのインスタンス全体に必要な正確なパーミッションを mysql 接続に付与し、ユーザー入力のチェックには細心の注意を払う必要があります。したがって、アプリケーション、それが実行されているシステム、および DBMS を保護できます。

パフォーマンスに影響を与える可能性はありますか?

データベースへの各接続にはコストがかかり、dbms には可能な接続のプールが限られています。計算は簡単です。インスタンスごとに 4 つの接続を開く場合、可能な接続数をその数で割ります。これはアプリケーションだけでなく、DBMS を使用するすべてのアプリケーションに影響を与えます。

他の考えはありますか?

はい、それをしようとしないでください。アプリケーションに適切で安全な設計をしてください:-)

于 2012-12-21T12:02:08.047 に答える
0

最小特権の原則を使用することは常に良い考えです。

やり過ぎですか?いいえ、それは良いデザインの一部です。

パフォーマンスに影響を与えますか? いいえ。データベースへの接続は単なる接続であり、データベースに接続するアカウントに関連付けられている権限は関係ありません。

于 2012-12-21T14:23:00.400 に答える