データベースの所有者が確認できない影響

本間 崇
SQL Server Support Escalation Engineer

現象

SQL Server Mangement Studio(以降、SSMS)から、データベースのプロパティを表示しようとしたとき、下記のエラーが出力される場合があります。

データベース '[shrinktest]' にはプロパティ Owner は使用できません。このオブジェクトにこのプロパティが存在しないか、十分なアクセス権がないためにこのプロパティを取得できない可能性があります。

また、ストアドプロシージャ等を実行した際、下記のエラーが発生する場合があります。

メッセージ 15517、レベル 16、状態 1、行 1
データベース プリンシパルとして実行できません。プリンシパル "dbo" が存在しないか、この種類のプリンシパルで権限を借用できないか、ユーザーに権限がありません。

こうした現象についてのお問い合わせをいただくことがあるので、このエントリで対処方法について記載したいと思います。

原因

これらの現象は、各データベースの所有者が確認できないために発生します。例えば、データベースの所有者となっている Windows 認証のログインとドメインアカウントが、削除された場合に発生します。

このデータベースの所有者が確認できない状況が発生しているかについては、以下のクエリを実行することで確認が可能です。プロパティが表示できないデータベースの owner_name が NULL として返されるのが確認できます。

select name,SUSER_SNAME(owner_sid) as owner_name from sys.databases

解決方法

データベースの所有者を設定することで、現象を回避いただけます。

データベースの所有者は、sp_changedbowner システムストアドプロシージャか、alter authorization ステートメントで設定可能です。sp_changedbowner システムストアドプロシージャは将来的に使用できなくなる可能性がありますので、この機会に alter authorization ステートメントの使用方法を覚えていただけるとよいと思います。以下のような構文となります。

alter authorization on DATABASE::<データベース名> to [ログイン名]

もし、こうした現象に遭遇した場合は、この方法で対処いただければと思います。

参考

タイトル:sp_changedbowner
URL:https://msdn.microsoft.com/ja-jp/library/ms178630(v=sql.105).aspx

タイトル:ALTER AUTHORIZATION (Transact-SQL)
URL:https://msdn.microsoft.com/ja-jp/library/ms187359(v=sql.105).aspx

タイトル:sys.databases (Transact-SQL)
URL:https://msdn.microsoft.com/ja-jp/library/ms178534(v=sql.105).aspx