web-dev-qa-db-ja.com

バックアップ許可

特定のデータベースにアクセスするサーバーに新しいユーザーを作成しました。

しかし、データベースをバックアップまたは復元すると、エラーが発生します。

C:\ Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup
サーバー上の指定されたパスまたはファイルにアクセスできません。必要なセキュリティ権限があること、およびパスまたはファイルが存在することを確認してください。

システム内の他のパスについては、エラーが表示されます。ユーザーとサービスアカウントにフルコントロールのアクセス許可がある場合でも。

しかし、完全なパスを入力して[OK]をクリックすると、表示できないというエラーが表示されますが、データベースをバックアップまたは復元します。パスのツリービューを表示しません。

saアカウントを使用して操作を行うと、ダイアログには問題なくすべてのパスが表示されます。

PS:db_backoperatorロールにすでにユーザーを追加しました。

どの許可が必要ですか?

25
Alan Araya

SQL認証ログインまたはWindowsログインを使用して接続していますか? SQL認証ログインの場合、WindowsのフォルダーにそのSQLログインの「フルコントロールのアクセス許可」をどのように与えますか? Windowsは、SQL Serverで作成したSQL認証ログインについては認識していません。 「サーバー上にユーザーを作成しました」という意味を正確に教えてください-どのユーザーですか?どのサーバー? SQL ServerまたはWindows?

回避策として、saまたはsysadminグループの一部であるWindowsログインとして実行するストアドプロシージャを作成し、この権限の低いユーザーに実行権限を付与することもできます。しかし、他の権限をまったく持たないpeonユーザーを追加し、それらをdb_backupoperatorロールに追加するだけで、データベースをバックアップできました。

CREATE LOGIN peon WITH PASSWORD = 'foo', CHECK_POLICY = OFF;
GO
CREATE DATABASE splunge;
GO
USE splunge;
GO
CREATE USER peon FROM LOGIN peon;
GO
EXEC sp_addrolemember 'db_backupoperator', 'peon';
GO
EXECUTE AS USER = 'peon';
GO
BACKUP DATABASE splunge
  TO DISK = 'C:\tmp\splung.bak' -- change this path obviously
  WITH INIT, COMPRESSION;
GO
REVERT;
GO

そのため、SQL Serverサービスアカウントに問題のパスに書き込むための十分な権限があることを検証します。これは事実だと言っていましたが、私が示したように、これはpeonユーザーの問題ではなく、基礎となるエンジンのファイルシステムへの書き込みの問題のようです。 peondb_backupoperatorロールに追加せずに上記のバックアップコマンドを実行すると、このエラーが発生します(実際のバックアップコマンドの近くに移動したり、ディスクのアクセス許可を確認したりできません) :

Msg 262, Level 14, State 1, Line 1
BACKUP DATABASE permission denied in database 'splunge'.
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.

これがWindowsログインの場合、ユーザーが実際に問題のフォルダーへの書き込み権限を持っていることを確認してください。 C:\Program Files\...の下の階層以外の別のフォルダーを試してください。ルートに直接書き込もうとしないでください(例:C:\file.bak)。

17
Aaron Bertrand

db_backupoperatorはデータベースロールであり、サーバーロールまたはWindowsアクセス許可ではありません。バックアップを作成するために、データベースへの必要なアクセスのみをユーザーに許可します。実際にバックアップファイルを作成するために必要なサーバーのファイル構造に対する権限は付与されません。

IIRC、ファイル構造にアクセスしてバックアップを作成するには、ユーザーは既にアクセスするためのウィンドウ/ドメイン権限を持っているか、サーバーロールsysadminを持っている必要があります。 。

また、実際にデータベースを復元するには、サーバーの役割dbcreatorが必要です。

17
RBarryYoung

私の推測では、これはWindows認証と統合セキュリティの問題です。 SQL Serverは、ログオンしているユーザーになりすまします。ログオンに使用しているWindowsユーザーのWindows ACL許可を追加してみてください。

1
usr

Windows 10(x64)、SQL Server Express 2014を実行しています。データを使用してアプリケーションのバグを解決できるように、x86 SQL Server 2005データベースにバックアップを復元しようとしています。 .bakファイルをバックアップおよび復元するときに、アクセス許可を使用して同じシナリオに遭遇しました。

ここでも同じです。私はPCの管理者です。WindowsアカウントでSQL Serverサービスが実行されていると(間違い)想定しました(Windows資格情報でSQL Managementにログオンするため)。

だから私がやったことは、Windowsのサービスに行き、SQL Serverを見つけ、プロパティを右クリックし、サービスを停止し、「ログオン」タブに移動して「ログオン」を「ローカルシステムアカウント」に変更し、 「デスクトップと対話するサービスを許可する」。サービスを開始し、私は途中でした。

私の環境は閉じられているので(開発専用)、これはすぐに修正できました。警告する必要がありますが、これはエンドユーザー向けのベストプラクティスではありません。開発者のみ。

1
JasonH