web-dev-qa-db-ja.com

SQL Server 2008:dboのデフォルトスキーマを変更するにはどうすればよいですか?

SQL Server Management Studioでdboのデフォルトスキーマを変更しようとすると、ALTERが失敗し、dboアカウントのスキーマは変更できないと表示されます。 「dbo」のdboデフォルトスキーマを「xxx」に変更できるトリックはありますか?

ありがとうございました!

4
user962143

各データベースは、サーバープリンシパル(別名ログイン)が所有しています。そのデータベース内では、所有するプリンシパルはdbo(別名* [〜#〜] d [〜#〜] * ata * [〜#〜] bとして知られています。 [〜#〜] * ase * [〜#〜] o [〜#〜] * wner)。データベースプリンシパル(別名ユーザー)は本名を失います。

たとえば、私が所有するデータベースの場合:

select  [user].name as UserName -- Database specific
,       [login].name as LoginName -- Server wide
from    sys.databases d
join    sys.database_principals as [user]
on      [user].sid = d.owner_sid
join    sys.server_principals as [login]
on      [login].sid = d.owner_sid

「dbo」、「Andomar」を印刷します。所有者をsaに変更する場合:

exec sp_changedbowner 'sa'

クエリは「dbo」、「sa」を返します。

データベースを所有するユーザーのデフォルトのスキーマは変更できません。常にユーザー名dboで、デフォルトのスキーマ名dboです。

7
Andomar

データベースユーザーdboは、sysadmin固定サーバーロールのログインにマップされます。これが原因で、dbユーザーdboのデフォルトスキーマを変更できないと思います。

本当の質問はなぜdboのデフォルトスキーマを別のものに変更したいのですか?組み込みの詳細(固定ロール、固定ログイン/ユーザー)を使用する場合、それらをカスタマイズする方法を最小限に抑えます。

ユーザーにdboのデフォルトスキーマを持たせたくない場合は、ログインとデータベースユーザーを再検討して、最大権限オブジェクトにマッピングしないようにする必要があります。

3
Thomas Stringer