私は、データベースとしてhibernateとSQLServerを使用してマルチテナントソリューションを実装することに興味があります。 私は1つのデータベースと異なるスキーマを意味するスキーマベースのアプローチを使用しています。SQLServerとHibernateによるスキーマベースのマルチテナント
具体的には、私の質問はSQLServerで実行スキーマを変更する方法です。私はこのアプローチをMySQLで使用しましたuse $database
、 PostgreSQL SET search_path TO $schema
とOracle ALTER SESSION SET CURRENT_SCHEMA = $schema
私はスキーマの概念がデータベースごとに異なることに注意して、あるスキーマから他のスキーマに正常に切り替えることができました。
しかし、SQLServerでは、実行スキーマを変更することはできません。ユーザーにsysadminロールが与えられていない場合に備えて、特定のユーザーの既定のスキーマを切り替える可能性を認識しています。また、次のクエリを使用して偽装の概念を認識しています:EXECUTE AS USER = $user
偽装により、あるユーザーが他のユーザーを偽装することができ、現在のユーザーを変更する可能性があります。
現在のユーザを切り替えると、ユーザが変更されると実行スキーマが新しいユーザのデフォルトスキーマになるため、定義によって実行スキーマを切り替えることができます。ただし、偽装は32回にわたって実行できないため、偽装には制限があります。制限偽装番号に達するのを避けるために、各偽装後にrevert
を実行することは可能ですが、この解決策は私の場合は適切ではありません。代わりに
SQL Serverとスキーマベースのアプローチを使用しているマルチテナントの実装についての提案はありますか?
実行スキーマを切り替えるために私が言及したもの以外の解決策もあります。
ご協力いただきありがとうございます。ありがとうございます。
こんにちはSaravananは、提案をどうもありがとうございます。私はテーブル名オプションの接頭辞を認識していますが、私が必要とするものではありません。また、私はマルチテナントを最初から実装する方法を探していないので、Azure Shard Mapは私にとっては適切ではありません。私は他のデータベースで述べたようにSQLServerを使って実際に実行スキーマを切り替えることに関する提案はありますか?ありがとうございました。 –
投稿を更新しました。親切にお答えください。 – Saravanan
ありがとうございます。すでに 'ALTER USER myUser WITH DEFAULT_SCHEMA = mySchema'を試したので、デフォルトスキーマではなく実行スキーマの切り替えを要求しました。 。システム管理者の役割、特にマルチスレッド化という2つの懸念が浮かび上がるので、私はこの代替手段を採用しませんでした。 –