0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CLRとデータベースについて(作業備忘録)

Posted at

記事にした背景

データベースの移行時にCLRとデータベース(SQL Server)について理解が浅く失敗したので備忘録として残す。

CLRとは

CLRとはCommon Language Runtimeの略称であり、共通中間言語(CIL:Common Intermediate Language)形式のプログラムを解釈し、機械語に変換して実行するソフトウェア(動作環境)のことである。

失敗した箇所

データベースの移行を旧環境でデータベースをバックアップし、新環境でリストアした。
リストア自体は上手くいったが、そのあとのCLRの設定で下記エラーが発生した。

master データベースに記録されているデータベース所有者 SID がデータベース 'db' に記録されているデータベース所有者 SID と異なります。ALTER AUTHORIZATION ステートメントを使用してデータベース 'db' の所有者を再設定し、この状態を修正してください。

補足:dbはCLRを設定しようとしていた対象のデータベース名である。

原因

エラーメッセージ通り、データベース所有者SID(Security IDentifier:セキュリティ識別子)と、masterデータベースに記録されているデータベース所有者SIDが異なっていた。

また、こちらが重要なのだが検証環境で実行したときはエラーが発生しなかった。
その理由は検証環境でデータベースをリストアしたときと、本番環境でデータベースをリストアしたときでは違うユーザーでログインしていたためである。
データベースの仕様として、リストアしたデータベースの所有者は『ログインしたユーザー』になるということを知らなかったのである。

解決策

1.データベースの所有者を変更する
例(所有者変更のコード)
alter authorization on database::[db] to [sa]

2.SQLServer認証を使用してmasterデータベースに記録されているデータベース所有者SIDと同じユーザで接続する。その状態でリストアをする。

ひとこと

正直、データベースの認証方法は気にしたことがあまりなかった(セキュリティの設定などは有識者が設定していたため)が、今回の件でユーザとデータベースが思いがけないところで関係していることを知れてよかった。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?