2010-06-16 4 views
0

Мы используем SQL Server 2008 в качестве нашей РСУБД, и у нас есть база данных, в которой у нее есть другой пользователь, а не dbo.Сохраненная процедура не найдена

Проблема заключается в том, что хранимая процедура не может работать, если не указан ее владелец.

Если мы подключим к нашей базе данных с помощью этого пользователя и попробуйте выполнить следующие действия:

exec ourSP 

мы получаем «не удалось найти ourSP» ошибка, но это работает отлично:

exec user.ourSP 

Значит ли кто-нибудь знает, что может привести к такому странному поведению?

+1

Вы говорите, что вы подключены к базе данных как «пользователь», и она не видит ее? Вы можете сделать простой тест через ваше соединение, чтобы позвонить SELECT USER_NAME(), чтобы убедиться, что вы подключены, как вы думаете (или проверить его в SQL Profiler). –

+0

Оказалось, что, несмотря на регистрацию как пользователя 'SELECT USER_NAME() возвращает' dbo ', но я не знаю, как это возможно. Я выполнил sp_change_users_login для автоматического исправления ошибок входа, но ничего не изменилось. – Beatles1692

ответ

0

Похоже, что если пользователь проверяется как SysAdmin в области безопасности в зоне, он будет иметь имя пользователя dbo при создании соединения с базой данных и будет рассматриваться как dbo.

0

Проверка схемы по умолчанию пользователя, под которым соединение делается - возможно, используя запрос

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

Объекты искали в пользовательской схемы по умолчанию, а затем DBO. Никакие другие схемы не рассматриваются, если вы не назовете их явно, как это было во втором запросе.

На этой основе представляется вероятным, что: a) пользователь настроен неправильно или b) вы не подключаетесь как пользователь, которого вы ожидаете.

Смежные вопросы