0

私はいくつかの意見が必要です。

友人のために POS と在庫管理ソフトウェアを開発する予定です。これは 1 人の小規模プロジェクトなので、アーキテクチャをできるだけシンプルにしたいと考えています。

私は Winform を使用して GUI を開発しています (Web インターフェイスは POS ソフトウェアには意味がありません)。データベースには Postgresql を使用しています。

プログラムはユーザーの役割に基づいてアクセスを制御するため、Web サーバーを使用してユーザー アクセスを制御する中間層を開発するか、Postgresql で直接ユーザー権限を設定する必要があります。

中間層の開発には時間がかかり、メンテナンスはより複雑になります。そのため、データベースで直接アクセス制御を設定することを好みます。

データベースを使用してユーザー アクセスを制御するのは面倒なようです。ロールごとに特権を設定する必要があります。一部のテーブルでは、権限が列レベルであることは言うまでもありません。これにより、セキュリティに関する推論が非常に難しくなります。

だから私が今やっていることは、スーパーユーザー以外はすべてのテーブルにアクセスできないように設定することです. プログラムは public ロールを使用してデータベースに接続します。一般ユーザーはテーブルにアクセスできないため、SECURITY DEFINER (スーパーユーザー ロール) を使用して、一般ユーザーがアクセスできるストアド ファンクションを作成します。テーブルにアクセスする唯一の方法は、これらの関数を使用することです。

ユーザーの役割とパスワードを表にまとめます。スーパーユーザー以外は user テーブル自体にアクセスできないため、 login 関数を作成します。これを と呼びましょうfn_login(username, password)。ログインが成功すると、fn_login はセッション キーを返します。

他の関数を呼び出すには、ユーザーにセッション キーを提供する必要がありfn_purchase_list(session_key)ますfn_purchase_new(session_key, purchase_id, ...)

そのようにして、ストアド関数を API として扱っています。新しい Postgresql ロールを追加するのではなく、ユーザー テーブルに新しい行を追加するだけでよいため、新しいユーザーの追加はより簡単になります。列レベルで権限を設定する必要はありません。すべての制御はプログラムで行われます。

それで、あなたはどう思いますか?このアプローチは実現可能でスケーラブルですか? それを行うより良い方法はありますか?

ありがとう!

4

4 に答える 4

2

もっと良い方法があると思います。しかし、あなたが必要とするセキュリティの種類について議論していないので、具体的に詳しく説明することはできません.

.NET でアプリケーション コードを開発しているため、そのコードは信頼できる必要があります (Web アプリケーションとは異なります)。したがって、ロールとパーミッションをデータベースではなく、アプリケーション コードに単純に実装してみませんか?

あなたの述べたアプローチに対する私の懸念は、ストアドプロシージャの人的オーバーヘッドです。上記の関数は、PostgreSQL ではなく C# で記述してください。次に、標準のバージョン管理とソフトウェア開発手法を適用できます。

于 2009-12-13T01:57:20.967 に答える
1

誰かがあなたのデータベースでセキュリティをチェックするまで待っていたら、手遅れになると思います。これは、90 年代の終わりに消え去ったクライアント/サーバーの考え方です。これが、n 層アーキテクチャが流行した理由の 1 つです。クライアント/サーバーは、n 層ソリューションと同様に水平方向にスケーリングできません。

中間層をより有効に活用することをお勧めします。セキュリティは、永続化レイヤーよりもスタックのさらに上にある横断的な懸念事項である必要があります。

于 2009-12-13T03:51:01.580 に答える
0

データベースセキュリティの管理が問題である場合は、その管理を自動化するタスクを追加する必要があります。つまり、データベーステーブルを使用してより高いレベルのデータを格納でき、アプリケーションはそのデータをデータベースに必要な適切な詳細とアーティファクトに変換できます。

データベースには必要な詳細が含まれているようです。必要なのは、その詳細の管理を容易にし、それをアプリにロールインすることだけです。

于 2009-12-13T04:21:17.060 に答える
0

私の正直なアドバイス:POSおよび在庫管理ソフトウェアを発明しないでください。既存のプロジェクトの1つを取り、それを改善します。

于 2009-12-14T12:06:26.827 に答える