SQL Server データベース エラー 5123 の解決方法

SQL Server データベース エラー 5123 の解決方法

なぜなら、SQL Server 2005 に基づくデータベース チュートリアルがあり、そこで使用されているサンプル データベースは AdventureWorks for SQL Server 2005 だからです。しかし、私のコンピューターには SQL Server 2008 がインストールされており、サンプル データベースは AdventureWorks for SQL Server 2008 です。最初は、サンプル データベース AdventureWorks for SQL Server 2005 と AdventureWorks for SQL Server 2008 のデータベース構造は似ているはずだと考えていましたが、実際に実行してみると、2 つのデータベース内の多くのテーブルの構造がまだ大きく異なっていることがわかりました。

そこで、スムーズに実習を行えるように、Microsoft ダウンロード センターから SQL Server 2005 用のサンプル データベース AdventureWorks をダウンロードし、SQL Server 2008 にアタッチすることにしました。

SQL Server 2008 スーパー管理者アカウント「sa」として SQLSERVER2008 インスタンスにログインします。

サンプル データベース AdventureWorks for SQL Server 2005 をアタッチすると、次のエラーが表示されます。

「CREATE FILE で物理ファイルを開いたり作成したりしようとしたときに、オペレーティング システム エラー 5 (アクセスが拒否されました) が発生しました...」というメイン情報をよく見ると、添付するデータ ファイルの操作権限が不十分であることが一目でわかりました。 一般的な思考習慣に従って、十分な操作権限を持たないファイルには十分な操作権限を付与します。たとえば、一部のネットユーザーは「添付するデータ ファイルと対応するログ ファイルへのアクセス許可を Everyone に付与する」と述べています。承認プロセスは次の 3 つのスクリーンショットに示されています (データ ファイルとログ ファイルの両方を承認する必要があることに注意してください)。

(図1:認証データファイル)

(図2:承認後のデータファイル)

(図3:認証後のログファイル)

アタッチするデータ ファイルとログ ファイルに対して Everyone に [読み取りと実行] および [読み取り] 権限を付与した後、SQL Server 2008 でデータベースを再度アタッチしようとしたところ、正常にアタッチできることが分かりました。問題はこうやって解決するのでしょうか?これは正しいやり方でしょうか? 実際のデータベース管理プロセスで、データ ファイルとログ ファイルの権限を Everyone に拡張すると、それは間違いなく間違ったアプローチになります。

データベースのセキュリティが大幅に低下するため、Everyone に [読み取りと実行] および [読み取り] 権限のみが付与されているにもかかわらず、データ漏洩のリスクが残っています。 データ ファイルには、通常どおりアクセスできるようにしながら、最小限のアクセス権しか持たないようにする必要があります。以前は Everyone を許可していたため、すべてのユーザーまたはアカウントが対応するファイルを操作でき、これは決して安全ではありません。

では、最小限のアクセス権を付与するにはどうすればよいでしょうか?考えてみてください。SQL Server 2008 を使用して対応するデータ ファイルを添付すると、「アクセスが拒否されました」というエラーが報告されます。これは、権限が不十分であることを意味します。つまり、現在の SQL Server 2008 には、これらのファイルにアクセスする権限がありません。以下に示すように、ファイルを右クリックしてファイルのプロパティに移動し、ファイルの権限を確認します。

(対応するデータファイルの元の権限)

このデータ ファイルを操作する権限を持つのは、SYSTEM および xrm グループまたはユーザーのみであることがわかりました。図に示すように、SYSTEM はユーザー グループ (つまり [Local System] グループ) であり、xrm は管理者ユーザーです。

(xrm ユーザー情報)

SYSTEM ユーザー グループと管理者ユーザー xrm は、どちらもこのデータ ファイルとログ ファイルを操作する権限を持っています。ただし、SQL Server 2008 のスーパー管理者 SA としてインスタンスにログインした後、SQL Server にはこのデータ ファイルにアクセスする権限がありません。つまり、SQL Server 2008 スーパー管理者 SA としてインスタンスにログインした後、ログインした ID は SYSTEM ユーザー グループに含まれず、管理者 xrm でもありません。

それは何でしょうか? 現在の SQL Server 2008 インスタンス サービスの関連情報を確認することで確認できます。次の図に示すように、Sql Server 構成マネージャー (つまり、SQL Server 構成マネージャー) を開いて、現在接続されているインスタンス サービスの関連情報を確認します。

(現在のインスタンスサービスに関する関連情報)

現在のインスタンス SQLSERVER2008 のログイン ID は「NT AUTHORITY\LocalService」であり、これはオペレーティング システムによって承認された [ローカル サービス] であることがわかります。ローカル サービスはユーザー グループでもあります。つまり、[Local Service] ユーザー グループ (Everyone ではなく) にのみ権限を付与すると、SQL Server 2008 で sa アカウントを使用してデータベースをアタッチできるようになります。

このためには、対応するデータ ファイルとログ ファイルに対して Everyone に付与した権限を削除し、対応するデータ ファイルとログ ファイルに対して LocalService ユーザー グループに権限を付与して、対応するデータベースを再度アタッチしてみます。実際に正常にアタッチできることがわかります。言うまでもなく、[Local Service] ユーザー グループにオペレーティング システムの承認を付与することは、Everyone に付与するよりもはるかに安全です。

上記の方法では、データ ファイルの元の権限範囲を変更しました (元の権限範囲には、[ローカル システム] ユーザー グループである SYSTEM と、システム管理者である xrm のみが含まれます)。

より良い方法は、データ ファイルの権限スコープを変更しないことです。SQL Server 2008 インスタンスに SA としてログインして、対応するデータ ファイルにアクセスできます。

この目標を達成するには、対応するインスタンスのログイン ID を SYSTEM [ローカル システム] ユーザー グループに変更するだけです。SYSTEM は対応するデータ ファイルのアクセス許可範囲内のユーザー グループでもあり、SQL Server インスタンスはローカル システムとして実行されるため、セキュリティが強化されます。次の図に示すように、SQL Server 構成マネージャーで、対応する SQL Server インスタンスのログイン ID を [Local System] に変更できます。

(インスタンスのログインIDを変更する)

(インスタンスのログインIDはLocalSystemになります)

次に、対応するインスタンス サービスを再起動し、SQL Server 2008 の対応するインスタンスに SA として再接続してログインし、データベースのアタッチを試みます。データベースも正常にアタッチできます。 ! !


実際、対応するデータベースをアタッチするために、対応する SQL Server 2008 インスタンスに SA として接続する必要がない場合は、対応する SQL Server 2008 インスタンスに接続するときに、認証に [Windows 認証] を選択すると、前の記事で説明したように、他の変更を加えずにデータベースをアタッチできます。その理由は、[Windows 認証] では現在のオペレーティング システムのユーザーの権限が使用され、その権限は通常十分に大きいためです。また、[SQL Server 構成マネージャー] のインスタンス サービスに対して実行できる操作は、Windows の [サービス] でも実行できます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • 図書館管理システムの SQL Server データベース設計例
  • SQL Server データベースにおける raiserror 関数の使用法の詳細な紹介
  • SqlServer データベースの中国語文字化け問題の解決方法
  • SQL Server Free Edition をインストールし、SQL Server Management Studio (SSMS) を使用してデータベースに接続する方法
  • SQL Server 2000/2005/2008 でデータベース ログを削除または圧縮する方法
  • SQL Server データベースのテーブル名とフィールドの比較
  • SQL Server データベースが回復保留状態にある場合の解決策
  • ServerManager の起動時にデータベースに接続できないエラーを解決する方法

<<:  SVN のインストールと基本操作 (グラフィック チュートリアル)

>>:  vue の webpack -v エラー解決の概要

推薦する

Linuxファイル削除後にスペースが解放されない問題の詳しい説明

序文システム領域の使用量が大きすぎて消去する必要がある場合、または特定のファイルを消去する必要がある...

MySQLの誤操作後にbinlog2sqlを使用して素早くロールバックする方法の詳細な説明

序文日常の仕事や勉強では、データベースを操作するときに「不注意」によるミスを犯すことは避けられません...

JavaScript で 9 グリッドのモバイル パズル ゲームを実装

この記事では、Jiugonggeモバイルパズルゲームを実装するためのJavaScriptの具体的なコ...

Vue の 4 つのカスタム命令の説明と使用例

4つの実用的なVueカスタム指示1. Vドラッグ要件: マウスドラッグ要素アイデア:要素のオフセット...

Windows 7 で Python 3.4 を使って MySQL データベースを使用する

Python 3.4でMySQLデータベースを使用する詳細なプロセスは次のとおりです。 Window...

グローバルトーストコンポーネントをカプセル化するVueの完全な例

目次序文1. vue-cliを使う1. Toastコンポーネントを定義する2. main.jsで設定...

HTMLはフォームタグを使用して登録ページのサンプルコードを実装します。

ケースの説明: - ページ効果を実現するためにテーブルを使用する- ハイパーリンクを機能させたくない...

uniapp アプレットでウォーターフォール フロー レイアウトを実装するためのアイデアとコード

1. はじめに今、ウォーターフォールフローについて書くことは、古い内容の焼き直しと見なされますか?気...

HTMLのmarquee属性でテキストを踊らせる

構文: <marquee> …</marquee>モバイル属性マーキーを使用...

写真をアップロードして顔を認識する Vue+axios サンプルコード

目次Axios リクエストQs処理データ分析Vantアップロードファイル形式完全なコードこの記事では...

CSS に基づいて MaterialUI ボタン​​クリックアニメーションを実装し、それを React コンポーネントにカプセル化します。

序文フロントエンドフレームワークのヘビーユーザーとして、私はテクノロジーを選択する際にそのエコロジー...

Dockerボリュームのファイルマッピング方法

背景ブロックチェーン ログ モジュールで作業しているときに、コンテナーが実行されている場合は、ログ ...

UTF-8 および GB2312 ウェブエンコーディング

最近、多くの学生から Web ページのエンコーディングについて質問を受けています。gb2312 と ...

MySQL 8.0 の非表示列に対する基本操作

目次01 非表示の列を作成する02 非表示の列に対する基本操作03 非表示の列メタデータ04 主キー...

ウェブデザインの発展と西洋建築の類似点は何でしょうか?

歴史は常に驚くほどうまく繰り返される。西洋建築とウェブデザインは、どちらも工学と芸術の組み合わせです...