ДАНО:
1. У нас есть большой и красивый RDP-сервак, на нем есть куча баз локальных, на нем разрабатывают.
2. У нас есть куча юзеров, которые сидят в разных базах на этом серваке и разрабатывают. Также они разрабатывают и в серверных базах, подключаясь к серверу 1С.
3. Все юзеры условно разрабатывают в куче баз от имени "Администратор".
НАЙТИ:
Какой пользователь в какую базу зашел?
Вроде бы винда и 1С - это хорошие, удобные и понятные системы. НО!
1. Нельзя понять, какая конкретно база запущена в каком процессе 1cv8.exe по строке запуска, т.к. там просто локальное имя базы (спасибо, 1С - вы как всегда очень круты!)
2. В ТЖ нет информации о пользователе терминальной сессии.
Как вы решаете эту проблему?
Да, проще завести всем юзера, но иногда это клиентская база и там есть специальный юзер, которому разрешено все и именно от его имени идет разработка. Да и вообще так исторически сложилось.
В идеале было бы неплохо получить на выходе список запущенных 1cv8.exe с реальным именем базы на сервере и с именем пользователя RDP, который этот процесс запустил. Ну и засунуть это в Zabbix или еще куда.
(2) это могут быть разные сервера 1с. это еще и файловые базы.
Вообще, хотелось бы обойтись командной строкой винды, если это вообще можно. Есть вообще способ узнать, к какой конкретно базе подключился конкретный процесс 1сv8.exe?
Консоль кластера не показывает юзера ОС, который подключился к базу - она показывает комп и юзера базы, а комп всегда один, юзер базы - тоже.
(3) С файловой можно только подключиться к базе по COM и получить список текущих соединений к БД.
Можно узнать пользователя соединения и номер этого соединения по значению "Designer" в поле "ИмяПриложения".
Все остальное можно только в К-С варианте.
Есть вообще способ узнать, к какой конкретно базе подключился конкретный процесс 1сv8.exe?
Только процесс-мониторинг(стороннее ПО для ОС) ответит на этот вопрос. 1С ничего не говорит.
Что конкретно? Как понять, что К-С варианте запущен конфигуратор для базы Х и от юзера ОС У (под базой имею ввиду ее имя в кластере, а не у юзера в спсике баз)?
(10) про юзера ОС я и так знаю - это юзер, под которым запущен 1cv8.exe с ключом DESIGNER. Остается простой вопрос - как понять, к какой базе этот 1cv8.exe подключен.
(7) в том, что с базой работает условное количество разработчиков, никогда не узнаешь, какой список разрабов нужно туда завести. Тем более в конфигуратор два юзера одновременно для одной базы зайти не могут, поэтому заводить туда пользователей излишне. Мне нужно просто узнать, для какой базы на кластере запущен конкретный процесс 1cv8.exe.
(9)Если вы каким-то чудесным образом сопоставите база - пользователь - номер сеанса в базе, то тогда вы сможете решить свою задачу. 1С про PID в масштабах ОС ничего не знает
(9) Так пусть сами себя и заводят. Вопрос же организационный. Зашел под Админом, завел себе пользюка, вышел, и работаешь под собой... А то получается "пользюков нам заводить лень, пусть будет все анонимно, а вот силы и время лучше потратим на аппаратно-программные средства, которые помогут нам срывать покровы с этой таинственной анонимности"...
Ну как-то нелогично, имхо...
Я понимаю, что это в нашей традиции - специально создавать себе трудности...
(13) чтобы завести себя, нужно иметь доступ. Тем более часто нужно просто попасть в конфигуратор и что-то посмотреть, зачем для этого заводить пользователя?
И вот советов я не просил - у меня есть четкий кейс. не знаете - не отсвечивайте.
(1)
в виндовом мониторе ресурсов на закладке ЦП есть таблица "связанные дескрипторы", где можно увидеть файлы, к которым обращается (обращался?) процесс, где, среди прочего, будут файлы журнала регистрации и блокировок файловой базы - т.е. папка с базой.
Кроме того, среди дексрипторов будут и файлы из папкок "%appdata%\Local\1C\1cv8\b8bc06f9-a67c-4315-9449-72f927b68432", которые можно связать со списоком баз пользователя.
Не знаю, как всё это получить кодом, я не настоящий сварщик.
В Process Explorer можно в список работающих процессов добавить колонки User name и Command Line. Будет показывать имя пользователя(Windows) запустившего процесс 1cv8.exe параметры запуска с именем базы(любой) и пользователя 1С. Эта же информация присутствует в свойствах процесса.
Это даже таскменеджер винды умеет, не говоря о tasklist, который даже не под админом выдает все процессы. Но проблема в том, что в строке запуска есть только название базы в списке, а как она называется на сервере - тайна, покрытая мраком.
(24) кстати, а по имени базы можно найти базу в списке баз пользователя, это должно быть проще, чем выдергивать "связанные дескрипторы", но это не 100% надежно, т.к. получить одинаковые названия баз в списке можно. Платформа при это не даст запустить базу, ругаясь на дубли имён баз, но тем не менее. Только сейчас понял, что, похоже, платформа берёт данные для запуска так же - из списка баз по имени базы, вот и не любит одинаковые названия баз.
(24)Если можем получить юзера ОС и имя базы в списке (насколько я понимаю, это список баз юзера ОС?) по процессу, то как вариант - лезем на сервере в паку users, открываем там папку этого юзера там, где-то в папке AppData находим файл ibases.v8i - и в нем находим базу по имени и смотрим все параметры подключения.
Может взлетит...
В опщем и целом 1С - это в части администрирования RDP штука непростая, к пользователю враждебная. Вроде бы она знает, от какой учетки стартует, но, видимо, создаватели ее не посчитали это полезной информацией или просто не умеют (склоняюсь ко второму).