#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» на большинстве серверов, которые я пробовал.
На одном сервере он вернул «гостевой».
Проверьте это.