34

ストアド プロシージャ内から xp_cmdshell を実行しようとすると、エラー メッセージが表示されます。

インスタンスでxp_cmdshellが有効になっている。ユーザーに実行権限が付与されましたが、まだ例外が発生しています。

オブジェクト 'xp_cmdshell'、データベース 'mssqlsystemresource'、スキーマ 'sys' に対する EXECUTE 権限が拒否されました</p>

問題の一部は、これが共有クラスターであり、インスタンスに単一のデータベースがあるため、すべての管理者権限を持っていないことです。そのため、アクセスして許可を与えることはできません。

4

6 に答える 6

61

SQL Serverインスタンスのsysadminロールのメンバーではないユーザーの場合、xp_cmdshell拡張ストアドプロシージャへのアクセスを許可するには、次のアクションを実行する必要があります。さらに、手順の1つを忘れた場合は、スローされるエラーをリストしました。

  1. xp_cmdshellプロシージャを有効にします

    メッセージ15281、レベル16、状態1、プロシージャxp_cmdshell、行1 SQL Serverは、このサーバーのセキュリティ構成の一部としてこのコンポーネントがオフになっているため、コンポーネント'xp_cmdshell'のプロシージャ'sys.xp_cmdshell'へのアクセスをブロックしました。システム管理者は、sp_configureを使用して「xp_cmdshell」の使用を有効にできます。'xp_cmdshell'を有効にする方法の詳細については、SQL ServerBooksOnlineの「SurfaceAreaConfiguration」を参照してください。*

  2. マスターデータベースへのパブリックアクセス権を持つ非sysadminユーザーのログインを作成します

    メッセージ229、レベル14、状態5、プロシージャxp_cmdshell、1行目オブジェクト'xp_cmdshell'、データベース'mssqlsystemresource'、スキーマ'sys'でEXECUTE権限が拒否されました。*

  3. xp_cmdshellストアドプロシージャに対するEXEC権限を付与します

    メッセージ229、レベル14、状態5、プロシージャxp_cmdshell、1行目オブジェクト'xp_cmdshell'、データベース'mssqlsystemresource'、スキーマ'sys'でEXECUTE権限が拒否されました。*

  4. sp_xp_cmdshell_proxy_accountを使用してxp_cmdshellが実行されるプロキシアカウントを作成します

    メッセージ15153、レベル16、状態1、プロシージャxp_cmdshell、行1 xp_cmdshellプロキシアカウント情報を取得できないか、無効です。'## xp_cmdshell_proxy_account ##'クレデンシャルが存在し、有効な情報が含まれていることを確認してください。*

あなたのエラーから、ステップ2または3のいずれかが見落とされたように思われます。その設定に特別なものがあるかどうかを知るために、私はクラスターに精通していません。

于 2010-01-08T16:25:54.147 に答える
51

tchester からの回答を完成させたいと思います。

(1) xp_cmdshell プロシージャを有効にします。

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO

-- Enable the xp_cmdshell procedure
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO

(2) マスター データベースへのパブリック アクセスを持つ非 sysadmin ユーザーのログイン 'Domain\TestUser' (Windows ユーザー) を作成します。

(3) xp_cmdshell ストアド プロシージャに対する EXEC 権限を付与します。

GRANT EXECUTE ON xp_cmdshell TO [Domain\TestUser]

(4) sp_xp_cmdshell_proxy_account を使用して、xp_cmdshell を実行するプロキシ アカウントを作成します。

EXEC sp_xp_cmdshell_proxy_account 'Domain\TestUser', 'pwd'
-- Note: pwd means windows password for [Domain\TestUser] account id on the box.
--       Don't include square brackets around Domain\TestUser.

(5) ユーザーに制御サーバー権限を付与する

USE master;
GRANT CONTROL SERVER TO [Domain\TestUser]
GO
于 2012-11-28T13:12:35.097 に答える
1

tchesterは言った:

(2)マスターデータベースへのパブリックアクセス権を持つ非sysadminユーザーのログインを作成します

ユーザーのデータベースリスト(サーバー/セキュリティ/接続/ユーザー名/プロパティ/ユーザーマッピング)に移動し、マスターデータベースのチェックボックスをオンにしました。ユーザーがマスターデータベースに既に存在することを示すエラーメッセージが表示されました。データベースをマスターするには、ユーザーを削除し、「ユーザーマッピング」に戻り、マスターのチェックボックスをオンにします。下の「パブリック」ボックスをオンにします。

その後、xp_cmdshellでgrantexecuteを「myusername」に再発行する必要があります

イヴ

于 2012-09-17T17:08:21.107 に答える