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
)。