ユーザーが「プロセス」と対話する JSP/MySQL Web サービスがあります。ユーザーは、特定のプロセスのデータのアップロード、構成、レポートの表示などを行うことができます。また、新しいプロセスを作成したり、複数のプロセスを比較するレポートを実行したりすることもできます。
現在、プロセス ID は URL (GET パラメーター) で指定されているため、すべてのユーザーが任意のプロセスと対話できます。 このサービスにセキュリティとマルチテナンシーを追加するよう依頼されました。 簡単にするために、各テナントが一連のプロセスに完全にアクセスできるとしますが、複数のテナントがプロセスにアクセスできる場合があります。
私の好みのアプローチ:
- ユーザーテーブルを追加します (PK_User_Id、password_hash、名前など)
- アクセス テーブル (FK_User_Id、FK_Process_Id) を追加します。
- セッションに Tenant_Id を格納する SSL ログイン ページ
- アクセスできる Process_Id を選択し、それをセッションに保存できるプロセス選択ページ
- ほとんどすべてのページは、セッションの Process_Id に基づいて SQL クエリを作成します。
- Create、Select、Compare などの「クロスプロセス」ページは、代わりにセッションの User_Id から機能します。
私の上司は、これは外部コード監査を満たすのに「十分」安全ではないと考えています。彼は、気まぐれな開発者が、ある顧客のデータを別の顧客に公開するクエリなどを作成できるのではないかと心配しています。
彼は、ANSI SQL のビルトイン ROLES (アプリは DB に依存しない必要があります) を使用して、各ユーザーの db ロールを作成することも望んでいます。ロールは、ロールがアクセスできるテーブル、共有テーブルのどの行などの詳細を示します。このようにして、ログイン時に接続が「安全」になり、開発者のミスが問題を引き起こす可能性がなくなります。
- これは可能ですか?
- MySQL で動作する DB に依存しない「ロール」などはありますか?
- 主キーが「foo」の場合、テーブルに行を追加できることをロールで指定できますか?
- 私のシステムは業界標準で「十分に安全」ですか?