SQL Serverオペレーティングシステムエラー5:「5(アクセスが拒否されました。)」


153

私はSQLを学び始めており、作業用のデータベースを提供する本を持っています。以下のファイルはディレクトリにありますが、問題はクエリを実行するとこのエラーが発生することです。

メッセージ5120、レベル16、状態101、行1物理ファイル「C:\ Murach \ SQL Server 2008 \ Databases \ AP.mdf」を開けません。オペレーティングシステムエラー5: "5(Access is denied。)"。

   CREATE DATABASE AP
      ON PRIMARY (FILENAME = 'C:\Murach\SQL Server 2008\Databases\AP.mdf')
      LOG ON (FILENAME =     'C:\Murach\SQL Server 2008\Databases\AP_log.ldf')
      FOR ATTACH
    GO

本の中で著者はそれはうまくいくはずだと言っていますが、私の場合はうまくいきません。調べたのですが、何が問題なのかよくわからないので、この質問を投稿しました。


バックアップファイルが既に存在する場合は、サービスに書き込み権限があることを確認することに加えて、「読み取り専用」属性がないことを確認してください。
jumxozizi 2016年

回答:


133

SQL Serverデータベースエンジンサービスアカウントには、新しいフォルダーの読み取り/書き込み権限が必要です。

チェックアウトこれを

修正するために、私は次のことを行いました:

データファイル(S :)およびログファイル(T :)のフルコントロールを備えたファイルセキュリティ権限にAdministratorsグループを追加しました。

データベースを接続し、それは正常に動作します。

ここに画像の説明を入力してください

ここに画像の説明を入力してください


4
時には、SQLサーバーは、以外の別のユーザー・グループの下で実行されますAdministrators Group
JDandChips

57
また、サーバーサービスだけでなく、SQL Server Management Studioを管理者として起動すると役立つ場合があります。
david.barkhuizen 2014年

1
私にとっては、次のリンクの解決策が機能しました:stackoverflow.com/a/19061137/365188
Ozair Kafray

3
私にとっては、SQL Serverエージェントサービスアカウントをローカルシステムに変更することができました。
singhm0077

22
あなたのSQL Serverインスタンスは、サービスアカウントで実行されている場合(例えば、鉱山があるMSSQL$SQLEXPRESS)、あなたのようにフォルダのアクセス許可リストにアカウントを追加する必要があることは明らかではないかもしれない:NT Service\MSSQL$SQLEXPRESS
ブライアン・レイシー

109

古い投稿ですが、Windows 7で実行されているSQL Server 2014で機能する手順を次に示します。

  • コントロールパネル->
  • システムとセキュリティ->
  • 管理ツール->
  • サービス->
  • [SQL Server(SQLEXPRESS)]をダブルクリックし、右クリックして[プロパティ]をクリックします。
  • [ログオン]タブを選択します
  • 「ローカルシステムアカウント」を選択します(デフォルトは、使いにくいWindowsシステムアカウントでした)。
  • -> OK
  • 右クリック、停止
  • 右クリック、開始

ボイラ!

ログオンアカウントの設定はインストールのオプションの1つであったと思いますが、そうである場合はデフォルトではなく、この問題をまだ認識していない場合は見落としがちでした。


5
私は多くのオプションを試しましたが、あなたの答えはうまくいきます。ありがとうmickeyf。
vicky 2016

2
Win 10でもSQL Server 2014で動作します。ありがとう。
Johan Foley 2017年

7
-1これを行うことは、最初にこのユーザーを設定するという全体的な考えに反します。これはセキュリティ機能であり、これを行うことで回避できます。
NullUserException

2
WOW ..カントは人々がこの「答え」に飛び込んだと信じています。これは大きなセキュリティ問題を引き起こすかもしれません。そうでなければ、最初にそのユーザーを設定する理由はないでしょう?とにかく、それは彼らの場合のセキュリティ問題とこれを考えない人々のための「解決策」です。
curiousBoy 2018年

2
なんらかの作業を行うよりもセキュリティの方が重要だと考える人は、SQLサーバーをオフに切り替えるだけです!
Ivan

44

アクセス拒否の問題を回避するために、私はSSMSを管理者として起動しました。これにより、ローカルドライブからデータベースを接続できました。データベースは別のSQLおよびWindowsインスタンスで作成されました。


3
これは私にとっては... Windows 10 Homeで完全にローカルなセットアップを見てこの問題を見つけただけで、以前は別の理由でmdfとldfを "所有者"にしていた-多分関連がある
マイクM

3
これも私にとってはうまくいきます。Windows 10とMicrosoft SQL Server 2012を使用しています。SQLManagement Studioを管理者として実行してから、Adventure Work Sampleデータベースを接続できます。
arsho

1
これにより、作業ドメイン環境で実行しているときのWindows 10 Proの問題も解決されました。
PerPlexSystem 2017

同じ-Domain Env、SSMS 2017.x、Win10 Pro。他のマシンから切り離され、新しいマシンに取り付けられました。
TravisWhidden

44

これは、SQL Serverが.bakファイルを含むフォルダーへの適切な権限を持っていないため、このエラーが発生するWindows関連の問題です。

最も簡単な回避策は、.bakファイルを、必要なすべての権限を持つデフォルトのSQLバックアップ場所にコピーすることです。他のものをいじる必要はありません。でSQL Server 2012の、この場所は、

D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup (SQL 2012)
C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup (SQL 2014)
C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Backup (SQL 2016)

@AdamLevitt SQLの複数のバージョンがインストールされているか、以前にインストールされていますか?正しい場所に配置しますか?
Hammad Khan

1
@hmd、ありがとう。修正は、2012バックアップディレクトリにエクスポートすることでした。
Adam Levitt、2015

1
このソリューションはSQL Server 2014でも機能します。パスはC:\ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Backup
Nick King

これが答えになるはずです!!
Axel

MS SQL Express 2016でも同様の問題がありました。解決策は、.mdfファイルを次のフォルダーに置くことでした:C:\ Program Files \ Microsoft SQL Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Backup
jirikadlec2

14

私はこの問題を抱えていました。管理者としてSQL Serverを実行するだけです


1
UACのように「管理者として実行」は私のために働いた。アカウントAdministratorとしてログインする必要はありませんでした(ただし、管理者グループに属しています)。
Mike Cheel、2017

1
はい、同じことを行い、管理者として実行すると、すべてが大丈夫でした。
クライド

12

はい、そうです。最初にsqlserverのサービスアカウントを見つける必要があります。ctrl+ alt + deleteを同時に押すと、タスクマネージャーでそれを確認できます。次に、 "C"の読み取り/書き込み権限を与える必要があります。 :\ Murach \ SQL Server 2008 \ Databases」をサービスアカウントに追加します。


10

問題は、SQL Serverがmdfおよびldfファイルにアクセスするための権限がないためです。これらの手順はすべて機能します。

  1. MSSQLSERVERサービスのスタートアップユーザーアカウントを直接変更できます。ファイルに対するより優れた特権を持つユーザーアカウントを使用できます。次に、データベースをアタッチしてみます。
  2. または、読み取り権限と書き込み権限をオンにして、mdfおよびldfファイルのプロパティのセキュリティタブでユーザーをファイルに割り当てることもできます。
  3. Windows管理者アカウントで起動し、管理者として実行オプションでSQL Serverを開き、Windows認証でログインして、データベースを接続してみます。


5

私にとってはSQL Server Management Studioで次のように解決されました-管理者としてログイン(Windows認証としてログインしました)-mdfファイルを添付します([データベース]を右クリック|添付|追加)-管理者としてログアウト-としてログイン通常のユーザー


4

この時点では、実際のサーバー権限は重要ではありません。すべて大丈夫に見えます。SQL Server自体にフォルダのアクセス許可が必要です。
バージョンによっては、SERVERNAME $ MSSQLSERVER権限を追加してフォルダにアクセスできます。それ以外の場合は、デフォルトのBACKUPディレクトリ(インストールした場所か、デフォルトでc:\ programfiles(x)\ MSSQL \ BACKUP)にある必要があります。


2

次の手順を実行しても、同じエラーメッセージが表示される可能性があります。

1. login as SA user (SSMS)
2. Edit the file permissions to say "everyone" full access (windows folder)
3. Delete the Log file (Windows Exploring  (this was what I had done per advise from some msdn forum) 

それでもパーミッションエラーが発生しましたが、[アタッチ]画面で下部セクションにLOGファイルが表示され、エラーメッセージは同じままであることに気付きました。

これが同じことをした人を助けることを願っています。


0

非常にシンプルなソリューション。

  1. システム管理者でログイン
  2. mdfおよびldfファイルを「C:\ Program Files(x86)\ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA」にコピーします。他のすべてのデータファイルはこの場所にあります。
  3. そこからアタッチしてください

1
プログラムファイルディレクトリにデータを保存しないでください。SQlサーバーをインストールするときに、デフォルトの場所を変更する必要があります
OrangeKing89

0

私はアプリケーションでエンティティフレームワークを使用していて、この問題がありました。フォルダとWindowsサービスに権限を設定し、機能しません。その後、アプリケーションを管理者として起動し(exeファイルを右クリックして[管理者として実行]を選択)、それが機能します。大丈夫。


0

Visual Studioプロジェクト.MDFAPP_DATAフォルダー(またはどこに置いても)内のファイルでこのエラーが発生した場合、私が行った方法は、DATAここにある既存のフォルダーからアクセス許可をコピーすることでした(SQL Express 2014を使用してサポートしています)古いアプリ):

C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS2014\MSSQL\DATA

(注:実際のインストールパスはさまざまです-特にインスタンス名が異なる場合)

DATA最初に管理者としてフォルダをダブルクリックしてアクセス権があることを確認してから、フォルダのプロパティを開き、フォルダに対して同じように模倣しAPP_DATAます。私の場合、行方不明のユーザーがいましたMSSQL$SQLEXPRESS2014(インスタンスに名前を付けたためSQLEXPRESS2014です-あなたのユーザーは異なる場合があります)。これは、SQL Serverサービスのユーザー名でもあります。


0

何らかの理由で、すべての正しい権限を設定しても、私の場合は役に立ちませんでした。エラーのdb.bakために復元できなかったファイルがあり5(Access is denied.)ました。ファイルは他のいくつかのバックアップファイルと同じフォルダーに配置され、すべての権限は他のファイルと同じでした。このdb.bakファイル以外のすべてのファイルを復元できました。SQL Serverサービスのログオンユーザーを変更しようとしても、同じ結果が得られました。何の効果もなくファイルをコピーしようとしました。

次に、実行して同じファイルを作成しようとしました

type db.bak > db2.bak

ファイルをコピーする代わりに。そして出来上がり!db2.bak正常に復元されました。

バックアップファイルの読み取りに関する他のいくつかの問題が5(Access is denied.)、MS SQLのように誤って報告されているのではないかと思います。


0

Linuxでは、/var/opt/mssql/data/フォルダーに移動してターミナルを開きsudo、*。mdfおよび* .ldfファイルのアクセス許可を以下のように変更しました。この場合yourDB、データベースファイル名に置き換え、myUser現在ログに記録されているユーザー名に置き換えます。

chmod 755 yourDB.mdf
chown myUser yourDB.mdf

chmod 755 yourDB.ldf
chown myUser yourDB.ldf

その後、問題なく再接続しました。


0

これは、SSMSログインユーザーが.mdfファイルに対する権限を持っていないことを意味します。これは私にとってそれがどのように機能したかです:

SSMS(管理者として実行)を開いて管理者ユーザーとしてログインし、データベースを右クリックして[追加]をクリックし、.mdfファイルを選択して[OK]をクリックしました。できました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.