2

MySQL には、1 つのスキーマを持つ単一のデータベースがあります。Microsoft Sql Server では、「テナント ビュー フィルター」を使用することをお勧めします。そのため、Microsoft Sql Server では、これにより必要なものが正確に得られます。

CREATE VIEW TenantEmployees AS 
SELECT * FROM Employees WHERE TenantID = SUSER_SID()

MySQLで同じことを達成する最良の方法は何ですか? 「テナント ビュー フィルター」に相当するものは、うまく機能する場合に機能します。

ありがとう!!

4

3 に答える 3

2

あなたが提案するクエリ(MSDNで見つけることができます)には、その仮定が正確に何であるかを説明するテキストが後であります。Employees特に、テーブル内の行の「所有者」が、TenantIDパーティション化するユーザーのSIDに従って入力されるフィールドで指定されていることを前提としています。

つまり、データのパーティションを明確に定義し、ビューを作成するテーブルにデータを関連付ける方法を正確に知っている限り、データを実装する方法に関係なく同じアイデアを複製できます。

特に、各パーティションが独自の資格情報を使用してDBにアクセスするようにシステムを構成する場合、パーティションを定義するIDとしてMySQLのCURRENT_USERまたはUSER構成を使用でき、ビューを作成するためのクエリは基本的に提案されたものと同じになります。 MSDNでは。に置き換えSUSER_IDますCURRENT_USER

ただし、同じユーザーを使用してすべてのパーティションからアクセスする場合、推奨される方法はどちらのデータベースサーバーにも関係ありません。

于 2012-05-20T00:36:16.303 に答える
0

MySQL では少しトリッキーですが、実行できます。

CREATE OR REPLACE VIEW {viewName}
    AS
        SELECT {fieldListWithoutTenantID}
        FROM {tableName}
        WHERE (id_tenant = SUBSTRING_INDEX(USER( ),'@',1))

シングル テナントの MySQL アプリケーションを最小限の変更で 1 つの週末にマルチテナントに変換する方法について、完全なブログ記事を書きました。 https://opensource.io/it/mysql-multi-tenant/

于 2018-08-23T17:01:34.877 に答える