0

次のスクリプトを使用して SQL Server ジョブ エージェントを構成しようとしています。

USE [msdb]
GO
CREATE USER [mydbuser] FOR LOGIN [mydbuser]
GO
EXEC sp_addrolemember N'db_datareader', N'mydbuser'
GO
EXEC sp_addrolemember N'SQLAgentOperatorRole', N'mydbuser'
GO
EXEC sp_addrolemember N'SQLAgentReaderRole', N'mydbuser'
GO
EXEC sp_addrolemember N'SQLAgentUserRole', N'mydbuser'
go
sp_configure 'show advanced options',1
go
reconfigure with override
go
      sp_configure 'xp_cmdshell',1
go
reconfigure with override
go
sp_configure 'show advanced options',0
go
reconfigure with override


use master
go
GRANT EXECUTE on xp_cmdshell to db_job
go

use master
go
EXEC sp_xp_cmdshell_proxy_account 'mydomain\db_job', 'password-1'
go

CREATE CREDENTIAL [Job3] WITH IDENTITY = N'mydomain\mydomainuser', SECRET =               N'mydomain\mydomainuser'
GO

USE [msdb]
GO
EXEC msdb.dbo.sp_add_proxy @proxy_name=N'LW_JobRunner',@credential_name=N'Job', 
@enabled=1
GO
EXEC msdb.dbo.sp_grant_proxy_to_subsystem @proxy_name=N'LW_JobRunner', @subsystem_id=3
GO
EXEC msdb.dbo.sp_grant_login_to_proxy @proxy_name=N'LW_JobRunner',         @login_name=N'mydbuser'
GO

/* Setting up job Category */

DECLARE @ReturnCode INT
SELECT @ReturnCode = 0

EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL',             @name=N'MyJob'
go

USE MASTER
GO

EXEC master.dbo.xp_sqlagent_proxy_account N'SET',
     N'DEV',            -- agent_domain_name
     N'Administrator',  -- agent_username
     N'password'        -- agent_password 

しかし、実行の最後のステップはsp xp_sqlagent_proxy_account

ストアド プロシージャ xp_sqlagent_proxy_account が見つかりませんでした。

master資格情報を使用してデータベースで実行していると確信していsaます...

そして、このため、ジョブを追加すると、次のようなエラーが発生します

sys.servers でサーバー 'myIpAddress' が見つかりませんでした。正しいサーバー名が指定されていることを確認してください。必要に応じて、ストアド プロシージャ sp_addlinkedserver を実行して、サーバーを sys.servers に追加します。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

このエラーは通常、システム管理者以外のユーザーがxp_cmdshellを実行しようとしたときに発生します。ただし、sa資格情報を使用してマスターデータベースで実行していることを確認していると述べています。

これを実行してみてください。

-- Enable non-system administrators to run the job and to execute xp_cmdshell.
EXECUTE msdb..sp_set_sqlagent_properties @sysadmin_only = 0
GO

これにより、sa以外のユーザーがxp_cmdshellにアクセスできるようになります。それが機能する場合、それはスクリプトが実行されているユーザーアカウントが非saアカウントであることを意味します。

お役に立てれば。

ラージ

于 2013-01-15T04:19:33.373 に答える