SSMSを使用しています。約5つのログインがあります。特定のログインについて、sysadmin以外のすべてのサーバーの役割を持っています。これはSQLログインです(Windows認証ではありません)。ユーザーロールでは、ほとんどすべてのデータベースに対するすべての権限があります。一部のデータベースでは、データリーダーしかありません。
SSMSを使用してデータベースのバックアップを作成しようとしたとき、およびボタンをクリックしてバックアップ先を選択しようとすると、次のエラーが発生します。
「C:\ Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Backup
サーバー上の指定されたパスまたはファイルにアクセスできません。必要なセキュリティ権限があること、およびパスまたはファイルが存在することを確認してください。
サービスアカウントが特定のファイルにアクセスできることがわかっている場合は、[検索]ダイアログボックスの[ファイル名]コントロールにファイルの完全パスを入力します。
私はdb_ownerとすべての権限を持っていますが、このエラーが発生しています。しかし、ファイル名フィールドでパスを手動で選択すると、エラーなしでバックアップを取ることができます。
なぜそれが起こるのですか?このユーザーに、これらのエラーメッセージなしでバックアップを取得してもらいたい。 (しかし、ユーザーにsysadminを与えることはできません)。どうすれば解決できますか?
私はすでに、SQLクエリとsqlcmd
を使用してバックアップを取ることを述べたいくつかの記事を書いています。しかし、私はそれがSSMSを使用して動作することを望みます。
これが私の質問に対する回答です。SSMSは "xp_fixeddrives"を使用してPCのドライブを一覧表示します。バックアップパスの選択またはディレクトリの参照に使用されるボタンをクリックすると、SSMSによって同じものが使用されます。
「exec xp_fixeddrives」がsysadmin以外のアカウントで実行されたときにレコードを返さないため、エラーが生成されます。sysadmin権限を持つユーザーを使用して同じことを実行すると、「exec xp_fixeddrives」がドライブのリストを返します。したがって、これはSSMSの問題であり、SQLエージェントサービスが実行されるフォルダまたはアカウントへのアクセス許可などの問題ではありません(私は同じものをテストしました)。
SSMSがアクションを実行するためにsysadmin権限を持っている必要があると想定している他の多くの機能があります。
オブジェクトエクスプローラーのほとんどのノードはそれを前提としています。オブジェクトのスクリプトは、頭上で知っている1つの例です。
例:VIEW ANY DEFINITIONでユーザーを作成し、そのユーザーとしてSSMSにログインします。ノードを展開すると必ずエラーが発生します。理論的にはノードを表示できるはずです(もちろん、ログインはクエリを介してメタデータを表示できます)。
CREATE LOGIN ViewAnyThing WITH PASSWORD = 'NotTheRealPassword';
GRANT VIEW ANY DEFINITION TO ViewAnyThing;
これは、SQLログイン権限の問題ではありません。 SQL Serverサービスアカウントは、バックアップの場所にアクセスできません。これを修正するには、SQL Serverサービスを実行するアカウントへのパスへのアクセスをウィンドウで許可する必要があります。