【发布时间】:2014-03-12 17:39:22
【问题描述】:
我正在尝试解决一个正在燃烧的问题,我花了最后一天没有成功。 我有一台运行 SQL Server 2008 的数据库服务器、一个数据库和一个存储过程。
存储过程逻辑包含以下语句:
IF EXISTS
(
SELECT *
FROM dbo.sysobjects
WHERE id = OBJECT_ID( '<StoredProcedureNameHere>' )
AND OBJECTPROPERTY( id, N'IsProcedure' ) = 1
)
BEGIN
-- Do something here
END
现在,问题:
如果我从 Management Studio 脚本运行查询以执行正在调查的存储过程,它会正常工作并执行“-- 在此处执行操作”逻辑。 但是,从 Web 服务调用的完全相同的存储过程不起作用。 我禁用测试整个 IF EXISTS(---) 块并且检索到的信息是正确的。
我的初步结论是应该有任何权限设置(我显然不知道)为我的用户帐户在数据库(因此在 sysobject 表上)配置,使我能够成功获取不是代替的信息Web 服务用于访问数据库的用户帐户。
任何人都知道我应该验证任何标准设置以使其正常工作吗?
提示 - 数据库和 Web 服务组件都运行良好。在数据库服务器崩溃并且运营团队需要重建数据库服务器之后,所有此类问题都开始出现。在询问数据库的状态时,他们说他们能够备份数据库,并且必须在构建新服务器后立即恢复正常工作。
任何帮助将不胜感激。
谢谢,
【问题讨论】:
-
你真的检查了 thw webservice 使用的帐户的权限吗?
-
这有点奇怪...我认为storedprocs在他们自己的权限下运行(SQLAgent?),因此无论哪个帐户执行它都应该执行相同的操作。我唯一的想法是指定完整的表名 server.msdb.dbo.sysobjects - 我将不得不关注这个问题,很好奇这里的答案是什么
-
1) Web 服务可以在 web.config 中指定一个连接字符串 - 或者如果不是,该连接字符串应该在应用程序的某处。 2)如果连接字符串中未指定用户名/密码(SSPI),则它使用运行 Web 服务的 Windows 用户进行连接,在这种情况下,您需要查看 IIS
-
Stored Procs 将在登录用户的 id 下运行。它可能是。 1) web 服务:web.config 中的连接字符串 - 或者如果不是,连接字符串应该在应用程序的某处。 2)如果连接字符串中未指定用户/密码(SSPI),则它使用运行 Web 服务的 Windows 用户进行连接,如果是这样,您需要查看 IIS,并找出运行应用程序池的用户.这可能会变得混乱,因为新版本的 IIS 使用应用程序池身份 - 这些身份不会显示为真实用户,但仍然可以在数据库中授予他们权限。
标签: sql sql-server web-services database-permissions sysobjects