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


9

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

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

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

回答:


13

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

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

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


1
あなたは神であり、私はあなたの知識に頭を下げます。
イェンス

1

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

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

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


不思議なことに、互換性レベルが「SQL Server 2016(130)」である場合を除き、私はこの問題(SQL認証ログインにリンクされたユーザー、既存のスキーマに
関連付けよ

0

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

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


foo新しいサーバーのデフォルトのスキーマを設定しました。barインスタンスユーザーレベルとデータベースユーザーレベルの両方で設定されます。
John Cromartie
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.