none
SQL2000作业问题 RRS feed

  • 问题

  • SQL2000查询分析器登陆用户为A.建了一个存储过程(改过程用于吧一个表中这个表的所有者也是A的数据拷贝到另外个服务器上)。我在作业中添加了新建了该作业,作业中的所有者选择的是A。。但是作业执行的时候就是错误(在查询分析器中执行没有问题)。用SA登陆后。。重新建立存储过程,并把作业中的所有者改成SA这样的话。显示执行成功了。这个是什么问题。难道只能SA用户
    2009年7月3日 6:00

答案

全部回复

  • 但是作业执行的时候就是错误(在查询分析器中执行没有问题

    具体的错误是什么
    SQL SERVER Engine Test
    2009年7月3日 6:26
    版主
  • If user A is not sysadmin, it doesn't have permission to access remote server. You may fix it with proxy account. 
    2009年7月3日 21:39
  • 怎么设置这个SYSADMIN

    2009年7月6日 2:44
  • I'll change job owner to sa in this case.
    2009年7月6日 2:49
  • 參照用戶的權限

    ROY WU(吳熹)
    2009年7月7日 3:53
    版主
  • 我在企业管理器中 --》安全性--》登录--》登录用户(unierp)--》右键属性--》服务器角色中 我把选中了 System administrators 但是还是没有用(原来该用户这个项没有选中)。提示作业失败。我用unierp在查询分析器中登录后执行该存储过程没有问题

    2009年7月7日 5:48
  • 我在企业管理器中 --》安全性--》登录--》登录用户(unierp)--》右键属性--》服务器角色中 我把选中了 System administrators 但是还是没有用(原来该用户这个项没有选中)。提示作业失败。我用unierp在查询分析器中登录后执行该存储过程没有问题

    把用戶添加MSDB庫為所有者權限,代理是啟用賬號是否為本地系統賬號.

    ROY WU(吳熹)
    2009年7月7日 6:46
    版主
  • *代理是启用帐户是[系统帐户].


    ---------------------------------------------------------------------------------------------------------------
    --select * from uscerp.usc_test.unierp.t_s
    --delete from uscerp.usc_test.unierp.t_s

    --exec usp_t_s

    alter proc  usp_t_s
    as

    exec sp_addlinkedserver  'TEST', ' ', 'SQLOLEDB', '192.168.1.2'
    exec sp_addlinkedsrvlogin  'TEST', 'false',null, 'unierp', 'unierp'

    insert into uscerp.usc_test.unierp.t_s
    select '1','1'
    union all
    select '2','2'
    union all
    select '3','3'
    union all
    select '4','4'

    exec sp_dropserver  'TEST', 'droplogins'

    建立了这个存储过程。
    在用户名UNIERP下登录。使用查询分析器执行该存储过程。没有问题远端的服务器 '192.168.1.2' 的表t_s
    中数据插入正常。
    但是我在建立了作业。作业的属性的的所有者都设置成了UNIERP用户。但是执行的时候错误。在windoW事件中显示
    【SQL Server Scheduled Job 'test' (0xB350642A2FA95349A99864F975A3C1A3) - Status: 失败 - Invoked on: 2009-07-07 15:18:34 - Message: 作业失败。  用户 YUQI\administrator 唤醒调用了该作业。最后运行的步骤是第 1 步(1)。】
    以上的表和存储过程都是在查询分析器中UNIERP用户登录后建立的。


    *还有一个问题是我用SA登陆查询分析器以后
    create proc  usp_t_s
    as

    exec sp_addlinkedserver  'TEST', ' ', 'SQLOLEDB', '192.168.1.2'
    exec sp_addlinkedsrvlogin  'TEST', 'false',null, 'unierp', 'unierp'

    insert into uscerp.usc_test.unierp.t_s
    select '1','1'
    union all
    select '2','2'
    union all
    select '3','3'
    union all
    select '4','4'

    exec sp_dropserver  'TEST', 'droplogins'
    一样建立存储过程。在建立作业。作业所有者为SA。作业执行的时候没有问题。通过!

    *小弟不明白了。难道一定要SA用户才能使用链接服务器,为什么查询分析器中可以执行的,在作业调度里面就执行不了了?

     

    2009年7月8日 2:13
  • Start sql agent with domain account.
    2009年7月8日 2:26
  • 怎么添加?

    2009年7月8日 2:29
  • Change it in enterprise manager -> sql agent properties.
    2009年7月8日 2:31
  • 我的SQL AGENT 启动帐户 是系统系统帐户 ..

    2009年7月8日 4:48
  • Change it to domain account.
    2009年7月8日 13:19
  • 我现在是ADMINISTRATOR哦。SQL AGENT 启动帐户 是 【系统帐户 】

    2009年7月9日 1:41
  • Local system account can't access remote server, that's why you have to start sql agent with domain account and map it to sql login on linked server.
    2009年7月9日 2:55
  • 域用户是不是在ACTIVE Directory  用户和计算机 中添加?

    如果我不是域用户,这个服务器如果不是域呢。。这个用户怎么添加?

    2009年7月10日 1:17
  • Can't start service with domain account if server is not in domain, then sql can't access remote server of course.
    2009年7月10日 1:23
  • 我是不是要把远端服务器也要加入域?

    2009年7月10日 3:01
  • Yes.
    2009年7月10日 3:08
  • 但这个我感觉也不明白了。。我在非域的服务器上用 SA用户建立的SP就可以。为什么我其他非SA用户就不可以了。。这个点从域用户来解释。不理解哦?

    2009年7月10日 3:15
  • Sql2k doesn't let non-sysadmin job owner to access remote server by default, you can try set proxy account in sql agent to bypass that.
    2009年7月10日 3:25
  • rmiao,我还是不很理解。有没有这个方面的资料。我网上找了下。都没有找到合适的。谢谢!

    我在网上看到这样写的:
    本地帐户是SQL安装时所注册用户,本地系统帐户可以没有WINDOWS 2000的网络访问权限,但它可能限制SQL Server安装与其他服务器交互, 域用户帐户使用 Windows 身份验证,即用于连接到操作系统的用户名和密码也用于连接到 SQL Server。

    现在我是用的本地账户,但是SA建立的存储过程就是可以的执行成功的。但是其他用户就怎么不可以了?
    2009年7月10日 5:47
  • Let's get it clearer, from what you posted:

    - both local and remote sql servers are not in domain;
    - you start all sql services with local system accout;
    - non-sysadmin user can access linked server in query analyzer but not in sql job;
    - sysadmin can access linked server in query analyzer and in sql job;
    - usp_t_s is the sp you tested.

    Now questions:

    - do you run same sp for sa and non-sa?
    - what's user id of non-sa?
    - you create linked server TEST in sp but not used, why?
    - how did you create linked server uscerp? How to map user in it?

    2009年7月10日 14:11
  • 我在企业管理器中 --》【安全性】--》【登陆】--》【新建登陆】--》USER:UNIERP PASSWORD:UNIERP 默认数据库选择 WUXI_ERP  然后用SA在查询分析器中登陆。分别在WUXI_ERP和master 数据库上执行下面的SQL:
    sp_configure 'allow update' , 1

    go

    reconfigure with override

    go

    delete from sysusers where name = 'unierp'

    go

    sp_adduser unierp

    go

    grant all to unierp

    go

    sp_configure 'allow update',0

    go

    reconfigure with override

    go

    在WUXI_ERP数据库中的【用户】选择UNIERP【右键】属性 中的常规选项卡中 数据库角色成员 中 db_ower 和 public  为选中项目。


    Q1.我使用这个SP,在SA用户下可以。(SP在SA用户登录查询分析器以后F5.然后在作业中调用该存储过程作业的所有者为SA).
         但如果这个SP 查询分析器中UNIERP登录后F5.然后在作业中调用该存储过程作业的所有者为UNIERP那么。执行不了该SP。
         这个点也是我很奇怪的。SA可以。unierp用户不可以。
    Q2.UNIERP
    Q3.I'M SORRY .这个事我写错误了。insert into TEST.usc_test.unierp.t_s
        select '1','1'
        union all
        select '2','2'
        union all
        select '3','3'
        union all
        select '4','4'
     
        USC-ERP 应该是替换成TEST.
    Q4. uscerp 这个事我在企业管理器中增加的。用户名和密码 都是使用的UNIERP. 也就是USC-ERP 和WUXI_ERP 数据库一样。用户名也一样。2个服务器分属异地。都不是域环境。

    2009年7月13日 1:38
  • q1. did you get same error as in your initial post when run sp with unierp?
    q4. both servers have unierp with same password and same permission in involved databases?
    2009年7月13日 2:39
  • 但为什么SA用户就可以的呢。。

    2009年7月15日 3:27
  • SQL2000查询分析器登陆用户为A.建了一个存储过程(改过程用于吧一个表中这个表的所有者也是A的数据拷贝到另外个服务器上)。我在作业中添加了新建了该作业,作业中的所有者选择的是A。。但是作业执行的时候就是错误(在查询分析器中执行没有问题)。用SA登陆后。。重新建立存储过程,并把作业中的所有者改成SA这样的话。显示执行成功了。这个是什么问题。难道只能SA用户

    你在查询分析器的中执行没有问题,当时你是以什么用户执行的?
    登陆用户A是否有执行存储过程的权限?


    SQL SERVER Engine Test
    2009年7月15日 3:39
    版主
  • A,用户在查询分析器中登录后,可以在查询分析器中执行该存储过程。。。。主要是在作业中不能运行。

    2009年7月15日 3:45
  • A,用户在查询分析器中登录后,可以在查询分析器中执行该存储过程。。。。主要是在作业中不能运行。


    在查询分析器中执行成功并不一定在sql server agent中就可以执行成功,
    对于一些涉及sqlserver外部资源访问的操作,还需要当前的启动帐户(如果你没有使用proxy)有访问相应资源的权限.
    你可以查看一下凭据(credential)的概念,还有中国风提到的文章,
    我之前写了一篇应用凭据的文章http://www.cnblogs.com/stswordman/archive/2008/10/06/1302684.html


    还有,你是否能提供一下当时的出错信息?
    SQL SERVER Engine Test
    2009年7月15日 3:51
    版主
  • 事件类型: 警告
    事件来源: SQLSERVERAGENT
    事件种类: Job Engine
    事件 ID: 208
    日期:  2009-7-15
    事件:  13:15:09
    用户:  N/A
    计算机: YUQI-ERP-SERVER
    描述:
    SQL Server Scheduled Job 'test' (0xB350642A2FA95349A99864F975A3C1A3) - Status: 失败 - Invoked on: 2009-07-15 13:15:09 - Message: 作业失败。  用户 YUQI\administrator 唤醒调用了该作业。最后运行的步骤是第 1 步(1)。.

    有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。

    这个是WINDOWS事件管理器中的描述

    2009年7月15日 5:19
  • 我是SQL2000.所以SQL2005的情况不一样的。。

    2009年7月15日 5:29
  • But proxy concept is same. 
    2009年7月15日 18:33
  • 有没有这个方面的例子。。小弟实在糊涂了。按照你们的说法是用户权限问题。大哥们的说法是要加入域并给与访问网络的权限。但是我没有加入到域。用SA用户怎么可以?
    还是请高手们指点~

    2009年7月16日 3:08
  • Take look at proxy in books online.
    2009年7月16日 18:25