2016-08-14 16 views
0

私はマルチテナントデータベース(MySQL、Java JDBC)を使ってプロジェクトを進めています。各テナントは「グループ」とみなされ、各「グループ」には複数の「ユーザー」があります。私の主な混乱は、これをどのように保護するのが最善かということです。グループのメンバーは、別の資格情報ですべてログインしていても、そのグループのデータにしかアクセスできません。ユーザーとユーザーのグループに安全なアクセスを持つWebアプリケーション

グループベースのログインをしていただけの場合、グループごとに1つのスキーマがあり、各スキ​​ーマにアクセスできるデータベースユーザーが1人です。これにより、そのグループのパスワードがなくても誰もそのスキーマにアクセスできないため、アクセスが完全に制限されるようになります。

ユーザーとは、「アプリケーションユーザー」と呼んでいるものが複雑になります。各アプリケーションユーザーはグループに関連付けられ、そのアプリケーションユーザーがログインすると、関連付けられているグループにアクセスする必要があります。本質的に、アプリケーションユーザーとしてログインし、データベースユーザーの資格情報が与えられます。

今のところ、このアイデアは扱いにくく、安全ではないようです。 JDBCアプリケーション層がデータベースレベルのユーザーアカウントへのアクセスを許可する方法がある場合、バイパスが容易になるため、そのセキュリティは無意味になります。

私はこの種の環境をどのように最高に保護するかについてのガイダンスを探していますね。ありがとうございました。

+0

私はこの設定に特有の何も表示されません。すべてのレコードがユーザーとテナントの関係になっているテナント表を持っているだけです(あるユーザーが複数のテナントに関連付けられている可能性があります)。それ以外の場合は、単一のテナント設定と同じセキュリティを使用します。 –

答えて

0

異なるテナントの異なるデータベースユーザーを割り当てるよりも、テーブルを使用してグループのすべてのデータを保存するほうがよいでしょう。すべてのアプリケーション・ユーザーのための1つの表と、グループまたはテナントIDをそれぞれのグループ・メンバーのユーザーIDとリンクするための第3のリレーショナル表。 グループ・リソースまたはデータがアプリケーション・ユーザーによって要求されるたびに、ユーザーがグループ・データにアクセスする権限を持っているかどうかをリレーショナル表でチェックインします。幸運

+0

これは、すべてのユーザーに対して別のデータベースに何度も何度も再接続する必要がないため、実行が比較的高速になります –

+0

これは簡単です。たぶん私は物事を思っているかもしれない。これは学問的な演習かもしれませんが、私の焦点の一つはセキュリティです。あなたのアプローチを使用すると、誰かがアプリケーションを突破してデータベースに直接アクセスできる場合、すべてのデータは脆弱です。実際、ウェブマスターはこの場合にすべてのデータにアクセスできるようになります。 – user2223059

関連する問題