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 つのデータベース内の多くのテーブルの構造が依然として大きく異なることがわかりました。 。そこで、スムーズに練習できるよう、SQL Server 2005 用のサンプル データベース AdventureWorks を Microsoft ダウンロード センターからダウンロードし、SQL Server 2008 にアタッチすることにしました。 SQL Server 2008 のスーパー管理者アカウント "sa" を使用してインスタンス SQLSERVER2008 にログインしました。
SQL Server 2005 のサンプル データベース AdventureWorks をアタッチすると、次のエラーがポップアップ表示されました:
よく見てくださいメイン メッセージ「物理ファイルを開いたり作成しようとしたときに、CREATE FILE でオペレーティング システム エラー 5 (アクセスが拒否されました。) が発生しました...」を見ると、データ ファイルの操作権限が次のとおりであることがわかります。付属品が足りない。一般的な思考習慣によれば、操作権限が不足しているファイルには十分な操作権限を付与します。たとえば、一部のネチズンは、「添付するデータ ファイルと対応するログ ファイルへのアクセス許可をすべてのユーザーに付与します。」と述べました。承認プロセスは次の 3 つのスクリーンショットに示されています (データ ファイルとログ ファイルの両方が承認されている必要があることに注意してください)。
(図 1: データ ファイルの認証後)
(図 2: データ ファイルの認証後)
(図 3: ログ ファイルの認証後)
データ ファイルとログ ファイルをそれぞれEveryone に添付する [読み取りと実行] と [読み取り] アクセス許可を取得した後、SQL Server 2008 でデータベースを再度アタッチしようとしたところ、アタッチが成功したことがわかりました。このまま問題は解決するでしょうか?これは正しいことなのでしょうか? 「実際のデータベース管理プロセスで、データ ファイルやログ ファイルのアクセス許可をEveryoneに拡大する場合、それは間違いなく間違っています。データベースのセキュリティが大きく損なわれるため、Everyone には [読み取りと実行] と [読み取り] 権限のみが付与されますが、データ漏洩の危険性は残ります。
データ ファイルが通常にアクセスできる場合は、データ ファイルに最小限のアクセス権が与えられるようにする必要があります。以前はEveryoneに許可していたので、すべてのユーザーまたはアカウントが対応するファイルを操作できましたが、これは明らかに安全ではありませんでした。では、最小限のアクセスを許可するにはどうすればよいでしょうか?考えてみてください。SQL Server 2008 を使用して対応するデータ ファイルを添付すると、「アクセスが拒否されました」エラー、つまり権限が不十分です。つまり、現在 SQL Server 2008 にはこれらのファイルにアクセスする権限がありません。以下の図に示すように、ファイルを右クリックしてファイルのプロパティに移動し、ファイルのアクセス許可を確認します。
(対応するデータ ファイルの元のアクセス許可)
グループまたはユーザーは SYSTEM と xrm の 2 つだけです。 このデータ ファイルを操作する権限を持つユーザーのみです。図に示すように、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 AUTHORITYLocalService」であることがわかりました。もユーザーグループです。つまり、(Everyone ではなく) [Local Service] ユーザー グループにのみアクセス許可を付与すれば、SQL Server 2008 の sa アカウントを使用してデータベースを接続できるはずです。このためには、対応するデータ ファイルとログ ファイルのEveryone に付与されたアクセス許可を削除し、対応するデータ ファイルとログ ファイルのアクセス許可を LocalService ユーザー グループに付与し、対応するデータベースを再度アタッチしてみて、添付ファイルが確かに成功できるかもしれません!言うまでもなく、[Local Service] ユーザー グループにオペレーティング システムの承認を付与する方が、Everyone に付与するよりもはるかに安全であることは間違いありません。
上記の方法では、データファイルの元の権限範囲を変更しました(元の権限範囲はSYSTEM、[ローカルシステム]ユーザーグループ、xrmシステム管理者のみです)。より良い方法は、データ ファイルのアクセス許可スコープを変更しないことです。SA として接続およびログインしている SQL Server 2008 のインスタンスも、対応するデータ ファイルにアクセスできます。この目標を達成するには、対応するインスタンスのログイン ID を SYSTEM [ローカル システム] ユーザー グループに変更するだけで済みます。SYSTEM は対応するデータ ファイルのアクセス許可内のユーザー グループでもあり、SQL Server インスタンスはローカルシステムのセキュリティが向上します。次の図に示すように、SQL Server 構成マネージャーで、対応する SQL Server インスタンスのログイン ID を [ローカル システム] に変更できます。 (インスタンスのログイン ID は LocalSystem に変更されます)
次に、対応するインスタンス サービスを再起動し、SA として SQL Server 2008 の対応するインスタンスに再接続してログインし、データベースの接続を試みます。データベースも正常に接続できます。 ! ! !
実際、対応するデータベースをアタッチするために、SQL Server 2008 の対応するインスタンスに SA として接続してログインする必要が特にない場合は、SQL Server 2008 の対応するインスタンスに接続するときに [理由は、[Windows 認証] は現在のオペレーティング システムのユーザーのアクセス許可を使用し、そのアクセス許可は通常十分な大きさであるためです。また、[SQL Server 構成マネージャー] でインスタンス サーバー上で実行できる操作は、Windows の [サービス] 上でも実行できます
SQL Server アタッチド データベースのエラー 5123 のより正しい解決方法-関連記事は、PHP 中国語 Web サイトにご注意ください。