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 エラー解決の概要

推薦する

JavaScript キャンバスで 9 マスのグリッドカットの効果を実現

この記事では、9グリッドカット効果を実現するためのキャンバスの具体的なコードを紹介します。具体的な内...

Pure CSS と Flutter はそれぞれブリージング ライト効果を実現します (サンプル コード)

前回、非常に熱心なファンから、月を呼吸する光の効果にできるかどうか尋ねられました。月の大きさの写真が...

MySQL の組み込み関数 find_in_set を使用した効率的なあいまい検索の詳細な説明

一般的に使用される方法は次の 4 つです。 1.locate()メソッドを使用する一般的な使用法: ...

Vue3コンポーネントの開発詳細

目次1. はじめに2. コンポーネント開発1. コンポーネントの構成2. ヘッダーコンポーネントの開...

Windows/Mac で Docker を使用して MySQL (utf8 を含む) をインストールする

目次1. MacへのDockerのインストール2. Win 10 システムでの Docker のイン...

JavaScript 組み込みの日付と時刻の書式設定のサンプル コード

1. 基礎知識(日付オブジェクトのメソッド) 😜 getFullYear() は年を表す4桁の数字を...

Harborを使用してプライベートDockerリポジトリを構築する方法

目次1. オープンソースの倉庫管理ツール Harbor 2 インストール2.1 DockerとDoc...

MySQL の遅いクエリ操作の例の分析 [有効化、テスト、確認など]

この記事では、MySQL のスロー クエリ操作について例を挙げて説明します。ご参考までに、詳細は以下...

ブラウザでTIF形式の画像を表示する方法

ブラウザはTIF形式の画像を表示しますコードをコピーコードは次のとおりです。 <html>...

WeChatアプレットコンポーネントライフサイクルの落とし穴の記録

通常、コンポーネントのライフサイクルは、ビジネス ロジックが始まる場所です。ビジネスシナリオが複雑で...

Linuxで静的ネットワーク接続を構成する方法

Linux システムのネットワーク接続を構成するのは難しい場合があります。幸いなことに、多くの新しい...

JavaScript の useRef と useState の紹介

目次1. useStateフック2. useRefフック3. useRef と useState 4...

MySQL で最大接続数を正しく変更する 3 つの方法

MySQL データベースをインストールすると、デフォルトの MySQL データベースの最大接続数が ...

JavaScriptはオブジェクトの不要なプロパティを削除します

目次例方法1: 削除方法2: 分解補充する要約するThinking シリーズは、10 分で実用的なプ...

スネークゲームのアイデアを実現するためのJavaScript

JavaScriptゲームSnakeの実装アイデア(完全なコード実装)を参考までに説明します。具体...