Сетевая служба SQL Server как dbo

#sql-server #networking #service

#sql-сервер #сеть #Обслуживание

Вопрос:

У меня есть SQL Server 2005, работающий на Windows Server 2003. Я заметил, что когда я запрашиваю сервер из своего веб-приложения (IIS 6.0, в котором запущен пул приложений с сетевой службой) с помощью команды, содержащей "SELECT USER_NAME()" , я получаю «dbo» вместо "NT AUTHORITYNETWORK SERVICE" . У меня даже нет СЕТЕВОЙ СЛУЖБЫ, работающей как dbo в моей базе данных.

Как мне предотвратить запуск СЕТЕВОЙ СЛУЖБЫ как dbo в моей базе данных?

В качестве дополнительного примечания, я запустил тот же код и базу данных на своем ПК с Windows 7 (IIS 7), SQL Server 2008, и он вернул "SELECT USER_NAME()" как «NT AUTHORITY NETWORK SERVICE», что является именно тем, что я ожидаю. Что дает?

Редактировать: Извините, что я не внес изменения в этот пост вместо этого. Я новичок в этом. Как я уже говорил, первоначальным логином действительно была сетевая служба, и она обращается к базе данных как dbo, чего я не ожидал. У учетной записи сетевой службы не было роли системного администратора или db_owner для базы данных. Однако я просмотрел ее действующие разрешения, и они похожи на разрешения системного администратора. Я убедился, что сетевая служба не является частью локальной группы администраторов и на ней не запущена сама служба SQL server. Просматривая ответы в Google, я наткнулся на кого-то с похожей ситуацией, и в итоге они запросили sys.login_token при запуске от имени приложения, чтобы узнать, какую основную роль оно выполняет, предоставляя разрешение сетевой службе. В любом случае, уже поздно в пятницу, и мне придется продолжить в понедельник. Приветствия!

Комментарии:

1. Вы проверили, какая учетная запись для входа в систему фактически запущена на сервере 2003, используя suser_sname() ?

Ответ №1:

Если вы хотите проверить фактическое имя входа, используйте system_user или suser_sname()

Из онлайн-книг, касающихся имя_пользователя():

*Если участник Windows обращается к базе данных посредством членства в группе, USER_NAME возвращает имя участника Windows вместо группы.*

Что касается второй части вашего вопроса, не позволяя ей запускаться как dbo…

Ознакомьтесь с определением dbo здесь, но вкратце, все, что является системным администратором в вашем экземпляре, будет dbo.

Ответ №2:

Он возвращает «dbo» на большинстве серверов, которые я пробовал.

На одном сервере он вернул «гостевой».

Проверьте это.

http://msdn.microsoft.com/en-us/library/ms188014.aspx