我正在一个相当大的项目上做一些维护编程,这个项目是由现在离开公司的人开始的......
我刚刚备份了公司的一个数据库,然后将其重新附加到我们的测试服务器上。这似乎工作得很好。
然后我通过程序的常规登录程序,该部分似乎也可以工作。
但是,一旦我在程序中找到需要执行存储过程的点,我就会收到错误,告诉我Invalid object name 'Informix.dbo.customer'
。
在原始数据库上运行相同的函数可以正常工作,并返回我希望看到的数据。
我发现的类似错误的解释似乎是指Schemas,但这就是事情有点奇怪的地方。原始数据库显然没有拥有任何Schema;在它的“Security”文件夹中,它只有一个“Users”文件夹,包含dbo,一个“Roles”文件夹,包含“Database Roles”文件夹,包含常用的db_owner等内容,还有一个名为“Application Roles”的空文件夹”
备份和还原数据库上的Security文件夹中充满了各种废话。除了dbo之外还有三个用户,一个“Schemas”文件夹,“Certificates”文件夹,两个加密密钥文件夹......我无法删除其中任何一个。
根据我对SQL登录系统的有限理解,我登录的用户从此随机垃圾集中获取非dbo权限,因此被拒绝访问dbo拥有的数据库部分
根据我自己的理解,导致这些Invalid object name
错误的问题的核心是什么?而对于实际问题,我该怎么做才能纠正这种情况,实际上我正在使用我在测试数据库上工作的程序,就像在现场测试数据库一样?
答案 0 :(得分:11)
如果我理解正确,你正在数据库(SomeDB)中执行一个过程(SomeProc)并且它给出错误Invalid object name 'Informix.dbo.customer'
?这仅仅意味着SomeProc在名为“Informix”的数据库中名为“dbo”的模式中找不到名为“customer”的对象。这有几个可能的原因:
您需要进行更多调查以找出原因在您的情况下,但作为一个完整的猜测,您的生产服务器同时具有Informix和SomeDB数据库,但您的测试服务器只有SomeDB?
最后,在发布问题时,请始终包含您的SQL Server版本(2000/2005/2008)和版本(Express,Standard,Enterprise);在谈论模式和权限时,它们可能非常重要,因为功能和行为可能不同。
答案 1 :(得分:1)
对象的所有者可能存在问题(在您的情况下为SP)。 检查SQL管理工作室中的所有者