2010-06-16 95 views
0

我们使用SQL Server 2008作为我们的RDBMS,并且我们有一个拥有不同用户的数据库,而不是dbo作为它的所有者。找不到存储过程

问题是在一台机器上存储过程无法运行,除非它的所有者被提及。

如果我们连接到我们的数据库使用该用户,并尝试执行以下操作:

exec ourSP 

我们得到了一个“找不到ourSP”错误,但能正常工作:

exec user.ourSP 

不有谁知道什么会导致这种奇怪的行为?

+1

你是说你连接到数据库作为“用户”,它没有看到它?你可能想通过你的连接做一个简单的测试来调用SELECT USER_NAME()来确保你连接的方式如何(或者在SQL Profiler中检查它) – 2010-06-16 14:52:21

+0

原来,尽管日志记录为'user 'SELECT USER_NAME()返回'dbo',但我不知道如何做到这一点。我执行sp_change_users_login来自动修复登录问题,但没有任何更改。 – Beatles1692 2010-06-19 07:30:50

回答

0

看起来,如果用户在服务器安全区域被选中为SysAdmin,那么在建立到数据库的连接时,它将具有dbo用户名,并将其视为dbo。

0

检查在其下连接正在取得用户的默认架构 - 可能使用查询

select default_schema_name from sys.database_principals where name = '~user_name~' 

对象在用户的默认模式和DBO然后搜索。除非明确命名,否则不会考虑其他架构,就像在第二个查询中所做的那样。

在此基础上,似乎a)用户设置不正确或b)您没有按照您期望的用户进行连接。