25

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

しかし、データベースをバックアップまたは復元しようとすると、次のエラーが表示されます。

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

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

しかし、フル パスを入力して [OK] をクリックすると、表示できないというメッセージが表示されますが、データベースのバックアップまたは復元は行われます。パスのツリー ビューが表示されないだけです。

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

PS: 既にユーザーをdb_backoperatorロールに追加しています。

どのような権限が必要ですか?

4

5 に答える 5

18

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

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

また、実際にデータベースを復元するには、ユーザーに Server Role dbcreatorが必要です。

于 2012-04-28T19:58:50.120 に答える
17

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

回避策として、sysadmin グループの一部である Windows ログインとして実行するストアド プロシージャを作成し、saこの権限の低いユーザーに実行権限を与えることもできます。ただし、他の権限をまったく持たない 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ユーザーの問題ではなく、基盤となるエンジンのファイル システムへの書き込み機能に問題があるようです。peonロールを追加せずに上記のバックアップ コマンドを実行すると、次のdb_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)。

于 2012-04-28T21:16:37.840 に答える
1

私の推測では、これは Windows 認証と統合セキュリティの問題であると思われます。SQL Server は、ログオンしているユーザーを偽装することがあります。ログオンしている Windows ユーザーに Windows ACL 権限を追加してみてください。

于 2012-04-28T19:53:16.767 に答える
1

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

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

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

私の環境は閉鎖されているため(開発のみ)、これは私が始めるための簡単な修正でした. これはエンド ユーザーにとってベスト プラクティスではありません。私たち開発者のためだけに。

于 2015-09-09T16:15:45.870 に答える