WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

DB のアタッチ

by WebSurfer 2010年9月13日 23:56

SQL Server の既定のインスタンスに接続するためには、まず当該 DB をデータベースエンジンにアタッチしなければなりません。無知な素人(自分のこと)は、たぶんここでハマります。また時間を無駄にすることがないように備忘録を残しておきます。

ポイントは ACL の設定です。アタッチする前に、SQL Server のサービスアカウントに、データ/ログファイル (.mdf, .ldf) があるフォルダに対するフルコントロール権限を与えることが必要です。

ACL の設定

そのことは、MSDN ライブラリ「Windows サービス アカウントの設定」(SQL Server 2005 の記事ですが、このあたりは最新版でも同じ)に書いてあったのですが、隅っこのほうに小さく書いてあって気がつくのにかなり時間がかかりました。(笑)

「SQL Server サービスに対する Windows 権限の確認」のセクションに以下のように書いてあります。

"MSSQLServer サービスの開始アカウント: アカウントは、データまたはログ ファイル (.mdf、.ndf、.ldf) が常駐するフォルダーに対するフル コントロール権限を持っている必要があります。"

なお、Express Edition の場合は、上記の MSDN ライブラリのページに書いてあるアカウント名、グループ名を以下のように読み替えてください。(下の「2013/7/1 追記」に注意)

アカウント: MSSQL$SQLEXPRESS(正確には NT SERVICE\MSSQL$SQLEXPRESS)
グループ:  SQLServerMSSQLUser$<computer_name>$SQLEXPRESS

ASP.NET 開発環境で作った mdf ファイルを App_Data フォルダごとサーバーにコピーして、それをアタッチするのであれば、App_Data フォルダへのフルアクセス権を与えなければなりません。上の画面は、その場合の設定です。

ホスティングサービスが提供する SQL Server を使う場合は知らなくて済む話ですが、自サーバーを構築しようとするとこのあたりは避けて通れません。

ただ、ホスティングサービスの場合、mdf ファイルをコピーしてサーバーに張り付けることができないところに別の苦労があるのですけどね。

------- 2013/7/1 追記 -------

SQL Server の Express 版をインストールすると、デフォルトでは「名前つきインスタンス」となり、インスタンス名は SQLEXPRESS になります。(詳しくは、別の記事 SQLEXPRESS は「名前つきインスタンス」名 を参照してください)

上記のアカウント名 MSSQL$SQLEXPRESS、グループ名 SQLServerMSSQLUser$ComputerName$SQLEXPRESS はデフォルトで SQL Server Express をインストールした場合のものです。

Express 版でも、既定のインスタンスまたは SQLEXPRESS 以外の名前つきインスタンスとしてインストールできますが、その場合は上記の名前とは異なってきますので注意してください。具体的には以下のようになるはずです。

<アカウント名>
既定のインスタンス: NT SERVICE\MSSQLSERVER
名前つきインスタンス: NT SERVICE\MSSQL$<instance_name>

<グループ名>
既定のインスタンス: SQLServerMSSQLUser$<computer_name>$MSSQLSERVER
名前つきインスタンス: SQLServerMSSQLUser$<computer_name>$<instance_name>

------- 2014/6/12 追記 -------

正しく権限が設定できていても、アタッチしたデーターベースが「読み取り専用」となることがあります。

その場合は以下のようにすると「読み取り専用」を解除することができます。

SQL Server Management Studio を起動する ⇒ オブジェクトエクスプローラに表示されている当該データベースを右クリック ⇒ 出てくるコンテキストメニューの[プロパティ(R)]をクリック ⇒ 「データーベースのプロパティ」ダイアログが表示される ⇒ 「ページの選択」ウィンドウで[オプション]を選択 ⇒ 「その他のオプション/状態/読み取り専用データベース」を False に設定(下の画像参照)

「読み取り専用」の解除

Tags: ,

SQL Server

About this blog

2010年5月にこのブログを立ち上げました。その後 ブログ2 を追加し、ここは ASP.NET 関係のトピックス、ブログ2はそれ以外のトピックスに分けました。

Calendar

<<  2018年12月  >>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

View posts in large calendar