Показать сообщение отдельно
  #15  
Старый 12.07.2013, 14:55
apanko apanko вне форума
Администратор
 
Регистрация: 15.08.2006
Сообщения: 1,629
Итак, есть три машины.

SQL отдельно, запущен под SQL-account
NAV Service отдельно, запущен под NAV-account
RTC на компе пользователя, соответсвенно под логином пользователя.

Настроены Delegation.

Надо поднять еще одну службу.
Дело не хитрое - всеж заготовки и инструкции есть (сам писал):
1. Папку скопировал
2. sc create выполнил (см выше).
3. NetTcpPortSharing службу запустил.
4. Для старой службы выполнил sc config (см выше).

В общем молодец.
Как бы не так:
Новая служба запускается, старая нет.
Проверил события - диагноз такой:


Цитата:

Service:


The service MicrosoftDynamicsNavServer
failed to start. This could becaused by a configuration error. Detailed
errorinformation:System.ServiceModel.Communication Exception: The service
endpointfailed to listen on the
URI'net.tcp://ru01nav01.mydomain.loc:7046/DynamicsNAV/Service' because access
wasdenied. Verify that the current user isgranted access in the appropriate
allowedAccounts section ofSMSvcHost.exe.config. --->
System.ComponentModel.Win32Exception: Access isdenied



Оказывается порт шаринг доступен не всем, а только:
  • LocalSystem account
  • LocalService account
  • Administrators account
  • Network Service account
Первое решение приходит сразу - сделать NAV-account админом. Но мы ж играем в безопасность по взрослому. Будем менять конфиг.
Инструкция как это делать находится тут:
http://msdn.microsoft.com/en-us/library/aa702669.aspx

А я ниже расскажу о граблях которые открыл (а открыл я их несколько).

Во-первых где этот конфиг искать:
Лучший способ - посмотреть в реестре, ключ "ImagePath" в ветке
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\servic es\NetTcpPortSharing]

Потому как поиск в каталоге Windows дает несколько ссылок (у меня был 3 и 4.5 версия, плюс под 32 и 64 битные операционки). В целом ошибиться трудно - при попытке редактировать файл от версии 3 было получено сообщение Access Denied. Ну а версию операционной системы на сервере узнать тоже не проблема.

Итак, файл найден.
Далее его надо редактировать, я добавил вот эту секцию:
Код:
<system.serviceModel.activation> <net.tcp listenBacklog="10" maxPendingConnections="100" maxPendingAccepts="4" receiveTimeout="00:00:10" teredoEnabled="false"> <allowAccounts> <!-- Ru01Nav01_NAV_SRV account --> <add securityIdentifier="S-1-5-21-1712409049-0000000000-1068023740-00000"/> </allowAccounts> </net.tcp> </system.serviceModel.activation>

Обратите внимание, как я подписал принадлежность СИДа, не через двойной слеш, как в примере. Потому как двойная черта стабильно выдавала ошибку.

Подсказать как я узнал СИД для своего NAV-account? Подсмотрел в SQL Server Management Studio, в таблице Windows Access Control. Почему там, а не в Windows Login - да просто через роль было его проще идентифицировать среди толп SID'ов прочих пользователей.

Ну и конечно - службы надо перезапустить, чтобы конфиг начал работать. Вот службы которые надо погасить перед редактированием и снова запустить после:
  1. Net.Tcp Listener Adapter
  2. Net.Tcp Port Sharing Service
  3. Net.Pipe Listener Adapter
Ответить с цитированием