我正在尝试使用以下脚本配置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
的最后一步是
找不到存储的proccedure xp_sqlagent_proxy_account。
我确定我使用master
凭据在sa
db上执行它...
因此,在添加作业时我会收到类似
的错误在sys.servers中找不到服务器'myIpAddress'。验证 指定了正确的服务器名称。如有必要,执行 存储过程sp_addlinkedserver将服务器添加到sys.servers
如何解决此问题?
答案 0 :(得分:0)
当非sysadmin用户尝试执行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帐户。
希望这有帮助。
拉吉