访问存储过程时出错

时间:2012-11-16 11:06:44

标签: sql-server sql-server-2005-express database-permissions

我们有一个.NET3.5 Windows窗体应用程序,它在同一台服务器上调用ASP.NET SOAP Web服务。然后,此Web服务将数据再次保存在同一服务器上的SQL Server Express 2005数据库中。

该应用程序已在内部部署,并已部署到我们的许多客户,并按预期工作超过18个月。然而,本周,在我们的主要客户站点,应用程序已开始在其部署的10台服务器中的4台上生成错误消息。所有Web服务方法都使用相同的连接字符串,但只影响一个Web方法。

连接字符串具有以下格式:

Data Source=MYSERVER\SQLEXPRESS;Initial Catalog=MyDatabase;
Persist Security Info=True;User ID=MyUser;Password=MyPassword

当应用程序调用一个特定的Web服务方法时,它会产生错误:

  

无法找到用户'MyDatabase',因为它不存在或您   没有许可。

应用程序没有对此进行任何更改,但客户的IT人员可能已对这些服务器进行了更改。 MyUser已被授予存储过程的权限,并且能够连接到所有其他Web服务接口。

令我困惑的主要问题是错误消息表明不存在的用户是MyDatabase,它是连接字符串中的Initial Catalog名称。

我与客户一起现场,并验证应用程序仍然正确设置,并且所有其他Web服务接口都正确连接到数据库。

对于可能的原因或我可以检查的其他事情的任何建议都会感激不尽。

1 个答案:

答案 0 :(得分:1)

我强烈建议不要删除dbo。这是架构名称。简单地删除它将意味着DB使用默认模式,这可能是dbo。所以它什么都不会做。但是,通过在调用过程时不使用模式名称,您可能会遇到命名冲突。例如,如果在DB中的两个不同模式中有一个具有相同名称的过程,并且您尝试在没有模式名称的情况下调用它,则DB将不知道要调用哪个过程,从而导致异常。