テスト目的で、SQL2008データベースを別のサーバーにコピーしました。ログインする一般的なユーザーは、特定のスキーマのいくつかのオブジェクトを使用します。ユーザーfoo
とスキーマbar
だとしましょう。
foo
のデフォルトのスキーマは、インスタンスレベルとデータベースレベルの両方でbar
です。ただし、foo
がログインすると、完全修飾名を使用せずにbar
スキーマ内のオブジェクトを見つけることができません。
ここでデフォルトのスキーマが機能しないのはなぜですか?
Fooユーザーsysadmin SQL Serverの権限を持っていますか?その場合、特定のデータベースのユーザーのプロパティに設定されているものとは関係なく、すべてのsysadminユーザーにデフォルトでスキーマが割り当てられますdbo。
したがって、デフォルトのスキーマを使用するには、ユーザーはサーバーロールsysadminではなく、db_owner、db_datawriterなどのデータベースロールを持っている必要があります。
それがあなたの場合ではないかどうか教えてください。
この問題が発生する可能性のある別のシナリオ(SQL 2008 R2)..
SQL認証ログインにリンクしているユーザーがいて、既存のスキーマに関連付けようとしていました。ログインにはsysadmin権限がないため、上記の解決策は役に立ちませんでした。
最終的に、データベースがまだSQL 2000互換モードで構成されていることがわかりました。 SQL 2005に変更すると問題が解決しました。
新しいサーバーのデフォルトのスキーマはdboであると想定しています。スキーマがデータベースと共にコピーされていない場合。
解決策ではありませんが、msdnの記事を見ると、おそらくこれが役立つかもしれません。 http://msdn.Microsoft.com/en-us/library/dd283095.aspx