SQL Server Management Studioでdboのデフォルトスキーマを変更しようとすると、ALTERが失敗し、dboアカウントのスキーマは変更できないと表示されます。 「dbo」のdboデフォルトスキーマを「xxx」に変更できるトリックはありますか?
ありがとうございました!
各データベースは、サーバープリンシパル(別名ログイン)が所有しています。そのデータベース内では、所有するプリンシパルは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
です。
データベースユーザーdbo
は、sysadmin
固定サーバーロールのログインにマップされます。これが原因で、dbユーザーdbo
のデフォルトスキーマを変更できないと思います。
本当の質問はなぜdbo
のデフォルトスキーマを別のものに変更したいのですか?組み込みの詳細(固定ロール、固定ログイン/ユーザー)を使用する場合、それらをカスタマイズする方法を最小限に抑えます。
ユーザーにdbo
のデフォルトスキーマを持たせたくない場合は、ログインとデータベースユーザーを再検討して、最大権限オブジェクトにマッピングしないようにする必要があります。