web-dev-qa-db-ja.com

SQL Server 2008のデフォルトのスキーマが尊重されていませんか?

テスト目的で、SQL2008データベースを別のサーバーにコピーしました。ログインする一般的なユーザーは、特定のスキーマのいくつかのオブジェクトを使用します。ユーザーfooとスキーマbarだとしましょう。

fooのデフォルトのスキーマは、インスタンスレベルとデータベースレベルの両方でbarです。ただし、fooがログインすると、完全修飾名を使用せずにbarスキーマ内のオブジェクトを見つけることができません。

ここでデフォルトのスキーマが機能しないのはなぜですか?

9
John Cromartie

Fooユーザーsysadmin SQL Serverの権限を持っていますか?その場合、特定のデータベースのユーザーのプロパティに設定されているものとは関係なく、すべてのsysadminユーザーにデフォルトでスキーマが割り当てられますdbo

したがって、デフォルトのスキーマを使用するには、ユーザーはサーバーロールsysadminではなく、db_owner、db_datawriterなどのデータベースロールを持っている必要があります。

それがあなたの場合ではないかどうか教えてください。

13
yrushka

この問題が発生する可能性のある別のシナリオ(SQL 2008 R2)..

SQL認証ログインにリンクしているユーザーがいて、既存のスキーマに関連付けようとしていました。ログインにはsysadmin権限がないため、上記の解決策は役に立ちませんでした。

最終的に、データベースがまだSQL 2000互換モードで構成されていることがわかりました。 SQL 2005に変更すると問題が解決しました。

1
Disillusioned

新しいサーバーのデフォルトのスキーマはdboであると想定しています。スキーマがデータベースと共にコピーされていない場合。

解決策ではありませんが、msdnの記事を見ると、おそらくこれが役立つかもしれません。 http://msdn.Microsoft.com/en-us/library/dd283095.aspx

0
Nick O'Neil