データベースの所有者が確認できない影響
本間 崇
SQL Server Support Escalation Engineer
現象
SQL Server Mangement Studio(以降、SSMS)から、データベースのプロパティを表示しようとしたとき、下記のエラーが出力される場合があります。
また、ストアドプロシージャ等を実行した際、下記のエラーが発生する場合があります。
メッセージ 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