SQL Serverデータベースをアタッチすると読み取り専用モードでアタッチされてしまう現象と対処法を紹介します。
現象
データベースをアタッチすると、読み取り専用モードでアタッチされます。
原因
いくつか原因が考えられますが、よくある原因としてデータベースのでタッチ後にmdf,ldfファイルを移動した際に、
SQL Serverのアクセス権が外れてしまい、データベースファイルに書き込みができない場合があります。
こちらが元のデータベースファイルです。MSSQLSERVER のアクセス権がついています。
こちらが読み取り専用になってしまうデータベースファイルです。MSSQLSERVERのアクセス権がありません。
対処法
データベースファイルにMSSQLSERVERのアクセス権を付与します。ファイルに直接付与するのではなく、データベースファイルを格納しているフォルダに
アクセス権を付与するほうがおすすめです。
データベースのファイルを格納しているフォルダのプロパティダイアログを表示します。上部の[セキュリティ]タブをクリックします。
下図の画面が表示されます。[編集]ボタンをクリックします。
編集ダイアログが表示されますので[追加]ボタンをクリックします。
[ユーザー または グループの選択]が表示されますので、
NT SERVICE\MSSQLSERVER
を入力し[名前の確認]ボタンをクリックします。
MSSQLSERVERアカウントが認識されますので、[OK]ボタンをクリックしてダイアログを閉じアカウントを追加します。
MSSQLSERVER アカウントが追加できましたので、フルコントロールに設定します。
以上で設定は完了です。データベースをデタッチし、再度データベースをアタッチすると読み取り専用ではない状態でアタッチできます。
補足:データフォルダから、Usersのアクセス権を削除する
このままの設定でも問題ありませんが、SQL Serverインストール状態では、データを格納するフォルダにUsersのアクセス権はありませんので、アクセス権を削除する手順を紹介します。
アクセス権を削除したいフォルダのプロパティダイアログを表示し、[セキュリティ]タブをクリックします。下図の画面が表示されます。
ダイアログ右下の[詳細設定]のボタンをクリックします。
セキュリティの詳細設定のダイアログが表示されます。ダイアログ左下の[継承の無効化]ボタンをクリックします。
下図の[現在継承されているアクセス許可で実行する処理]のダイアログが表示されます。すべてのアクセス権を削除してしまうと設定が大変ですので、
今回は[継承されたアクセス許可をこのオブジェクトの明示的なアクセス許可に変換します]のタイルをクリックします。
アクセス継承が無効になり、下図の画面が表示されます。
削除したいUsersのエントリーをクリックして選択します。選択後ダイアログ下部の[削除]ボタンをクリックします。エントリーが削除できます。
Usersのエントリーをすべて削除しました。[OK]ボタンをクリックします。
データを格納しているディレクトリのUsersのアクセス権を削除できました。
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2023-11-29
作成日: 2022-01-03