CREATE FILEでオペレーティングシステムエラー5が発生しました(アクセスが拒否されました。)


13

SQL Server Management Studioで次のスクリプトを実行しようとしています。

USE [master]
GO

CREATE DATABASE [test1] ON PRIMARY (
  NAME = N'test1', 
  FILENAME =
    N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1.mdf',
  SIZE = 70656KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB)
LOG ON (
  NAME = N'test1_log',
  FILENAME =
    N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1_log.ldf',
  SIZE = 164672KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)

しかし、私はエラーが発生しています:

メッセージ5123、レベル16、状態1、行2
CREATE FILEは
、物理ファイル
'C:\ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ を開くまたは作成しようとしたときにオペレーティングシステムエラー5(アクセスが拒否されました)を検出しましたDATA \ test1.mdf '。

メッセージ1802、レベル16、状態4、行2
CREATE DATABASEが失敗しました。リストされている一部のファイル名を作成できませんでした。関連するエラーを確認してください。

すでにユーザーのすべての役割のアクセス許可を持っていますが、何が問題なのか考えていますか?


1
「あなたのユーザー」またはあなたのサービスを実行しているユーザー?サーバープロセスは、ユーザーではなくそのファイルを作成しようとします。

1
ファイルが既に存在するかどうかを確認できますか?(おそらく以前の試行から)存在し、SqlServerによって開かれている場合、アクセス拒否エラーが発生します

1
サービス-> SQL Server->ダブルクリック-> 2番目のタブページ(接続?)

1
@thiagocfb Start-> Run-> services.msc SQL Serverが見つかるまでサービスのリストをスクロールします。右クリック
-swasheck

1
また、プレーンを実行しようとしましたCREATE DATABASE [test1]; GOか?
-swasheck

回答:


19

許可エラーが発生しています。SQL Serverを実行しているアカウントには、データベースファイルが含まれるフォルダーに対する必要な権限がありません。

(アカウントではなく)SQL Serverを実行しているアカウントに、C:\ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DATAのフルコントロールを与える必要があります。


はい、問題はサービスを実行していたユーザーでした!:)ありがとう!
thiagocfb

一般に、SQL Server WindowsサービスはNetwork Serviceアカウントで実行されます。したがって、PCでも同様である場合は、このアカウントの各ディレクトリで適切な権限を変更する必要があります。
RBT

3
少なくとも非管理ユーザーとしてSSMS guiを実行する場合、最初の接続操作では、SSMSを実行するユーザーIDにもそのフォルダーのアクセス許可が必要です。最初のアタッチ中に管理者としてSSMSを実行するとこれが解決され、後で問題なく管理者以外で実行できます。
-tbone

6

コメントスレッドに基づくと、インストール中に少し横になったように聞こえます。インストーラーを使用すると、デフォルトのデータディレクトリを選択し、指定したサービスアカウントに対する適切なアクセス許可をそのディレクトリに設定します(想定します)。

あなたにCREATE DATABASE声明あなたは場所を指定しているが、その場所は、元の設定に指定されたものでしたか?サービスアカウントは変更されましたか?

これをテストする方法は、単にジェネリックを実行することです

CREATE DATABASE [test1]; 
GO

同じエラーが発生する場合は、おそらくサービスアカウントが変更されているか、NTFSアクセス許可に関する何かが変更されています。

解決パス(これもコメント文字列に基づく)は、SQL Serverを実行しているサービスに、指定したパスに対するR / Wアクセス許可があることを確認するためのものです。これをする:

スタートservices.msc- >ファイル名を指定して実行- > -> SQL Serverが見つかるまでサービスのリストをスクロールします->右クリック->プロパティ->ログオンタブ

次に、アカウントがそのディレクトリに対して適切な権限を持っていることを確認して、必要な処理を実行します。


2

指定されたパスに誤った数のスペースがあるようです。そのため、フォルダーツリーと一致していません。
SQLサーバーは、存在しないパスを作成しません。

編集
元の投稿の内容:

...\Microsoft SQL         Server\...
...\Microsoft SQL     Server\...

これは既存のパスではなく、コロンで囲まれているため、そこにどのくらいのスペースがあるかが関係していると思います。


スペースの数が間違っていますか?どこ ?ファイルエクスプローラーにこのパスをコピーして貼り付けると、このフォルダーに到達します@ __ @

@thiagocfbので、パスを開くと、それらのファイルが表示されますか?
-swasheck

「貼り付け」では、1つのケースに9文字、もう1つのケースに5文字がMicrosoft SQLありServer、との間にあります。あなたのポストは@marc_sによって編集されたので、今は表示されません

私はないtest1.mdf、それは私がこのクエリを作成しようとしています一つだ、いくつかの.mdfファイルのファイルを参照してください@swasheck

@Luis Siquotああ、そうですね、クエリをコードとして表示するように設定している間、私の間違いだったに違いありません。

0

質問セクションに投稿する上記のスクリプトは正しいです。FILENAMEで言及したファイルパスが間違っている可能性があります。

以下のスクリプトを使用してください。単に動作し、スクリプトで使用するファイルパスを確認します。

Use Master
go

CREATE DATABASE test1 ON  PRIMARY 
( NAME = N'test1', 
  FILENAME = N'D:\test1.mdf', 
  SIZE = 70656KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1014KB)
 LOG ON 
( NAME = N'test1_log', 
  FILENAME = N'D:\test1_log.ldf', 
  SIZE = 164671KB , MAXSIZE = 1048GB , FILEGROWTH = 10%)
GO
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.