|
16.11.2009, 19:35 | #1 |
Участник
|
Как узнать имя пользователя Axapta на SQL?
Всем привет.
Если совсем нетривиальная задача :-) : нужно на SQL сервере получить имя пользователя акспаты, который выполняет, например, операцию вставки в определенной таблице. В Аксапте такое получается легко - curuserid(). А можно ли как то получить его в SQL сервере? Заранее спасибо!
__________________
Жить все веселей!.. AX3SP3CU1 |
|
16.11.2009, 19:54 | #2 |
Участник
|
Включите на таблице аудитное поле createdby(кто создал).
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
16.11.2009, 22:35 | #3 |
Administrator
|
Если у Вас 2-хуровневая конфигурация - то доступ к SQL Server осуществляется через ODBC и либо Windows-пользователя, либо SQL-пользователя. В этом случае (если Windows-аутенфикация) - информацию о пользователе можно получить штатным монитором (по кр. мере от SQL 2005 - про 2000 не помню). А вот если у Вас - 3-хуровневая - то в БД обращается только один пользователь и БД заведомо не знает кто "попросил" этого пользователя обратиться в БД. Все это относится к AX 3.0
__________________
Возможно сделать все. Вопрос времени |
|
17.11.2009, 09:34 | #4 |
Участник
|
Цитата:
Сообщение от sukhanchik
Если у Вас 2-хуровневая конфигурация - то доступ к SQL Server осуществляется через ODBC и либо Windows-пользователя, либо SQL-пользователя. В этом случае (если Windows-аутенфикация) - информацию о пользователе можно получить штатным монитором (по кр. мере от SQL 2005 - про 2000 не помню). А вот если у Вас - 3-хуровневая - то в БД обращается только один пользователь и БД заведомо не знает кто "попросил" этого пользователя обратиться в БД. Все это относится к AX 3.0
Если так, то совет miklenew ИМХО самый простой и надежный. |
|
17.11.2009, 09:58 | #5 |
Administrator
|
Дык аксаптовский пользователь легко ассоциируется с Windows-пользователем.
А вот совет miklenew работает ТОЛЬКО для вставки записи, а не "например, для вставки записи". Плюс для того, чтобы воспользоваться его советом нужно будет на каждой исследуемой таблице включать свойство createBy (если его там нет). Но конечно, если исследовать ТОЛЬКО вставку записи в одну конкретную таблицу - то предложенный вариант - проще.
__________________
Возможно сделать все. Вопрос времени |
|
17.11.2009, 10:07 | #6 |
Участник
|
Цитата:
Ну включить еще поле modifyedby - не думаю, что это сильно скажется на производительности. |
|
17.11.2009, 10:17 | #7 |
Administrator
|
А я как написал?
Цитата:
А потом modifiedBy позволит контролировать только операции обновления. А вот операции выборки или удаления в этом плане неконтролируемы (из SQL Server)
__________________
Возможно сделать все. Вопрос времени |
|
17.11.2009, 10:18 | #8 |
Участник
|
|
|
17.11.2009, 10:24 | #9 |
Участник
|
|
|
17.11.2009, 10:37 | #10 |
Участник
|
Цитата:
п.с и отчеты обычно не вставляют строки |
|
17.11.2009, 11:39 | #11 |
Участник
|
есть системные таблицы, у которых не включены системные поля ( Поскольку таблицы системные, то возможности включить эти поля для них не представляет возможности . На SQL при вставке записи можно сгенерить заполнение этих полей (либо добавление записей в другую таблицу или БД)
Приложение в основном трехуровневое
__________________
Жить все веселей!.. AX3SP3CU1 |
|
17.11.2009, 11:41 | #12 |
Участник
|
Боюсь у вас ничего не получится.
|
|
17.11.2009, 12:13 | #13 |
Участник
|
интуитивно я догадывался, что врятли, но хочется услышать мнения других :-))
Хотя мне кажется, что если держать какое-то подключение к АОС, в режиме "мониторинга", то можно как-то узнать... Хотя затраты по времени, возможно, окажуться критическими.
__________________
Жить все веселей!.. AX3SP3CU1 |
|
17.11.2009, 12:37 | #14 |
Administrator
|
А смысл? Это тоже самое что зайти с помощью монитора активности (Activity Monitor) в самом SQL Server
__________________
Возможно сделать все. Вопрос времени |
|
17.11.2009, 10:21 | #15 |
Участник
|
2 Didukh84: так вам необходимо в целом знать кто что делал или на лету. Например, кто запустил какую-то тяжелую операцию или отчет?
Если да, то со стороны сервера БД узнать это практически невозможно, т.к. SID-ы меняются очень быстро и вот так просто вытянуть на стороне сервера имя пользователя Аксапты практически нереально. В принципе вы можете смотреть это из АХ, попробуйте переделать под свои нужды форму SysSQLBlockingMSSQL или SysSQLBlockingOracle |
|
17.11.2009, 10:35 | #16 |
Участник
|
По коду SPID. Его видно в запросе "Активные пользователи" и в списке процессов SQL
|
|
17.11.2009, 10:38 | #17 |
Участник
|
Не факт. SPID появляется только в момент активной транзакции. Т.е. пока вы посмотрите, потом переключитесь в Аксапту, этот SPID может быть присвоен уже другому пользователю. Шанс конечно есть успеть поймать, но он далеко не 100%
|
|
17.11.2009, 10:49 | #18 |
MCITP
|
Если речь конечно идет не про триггер на стороне БД, а на "посмотреть, кто это эту хрень запустил", то ответ вы найдёте здесь, уже обсуждалось...
Иначе, ответ был дан с самого начала...
__________________
Zhirenkov Vitaly |
|
17.11.2009, 15:54 | #19 |
Участник
|
Цитата:
Как правило, хватает времени чтобы отловить товарища с особо напряжными транзакциями. |
|
17.11.2009, 11:20 | #20 |
Administrator
|
2ZVV: Там есть один мааленький нюанс, не отмеченный в статье. Hostname будет всегда сервером с АОС, а loginname - учетной записью пользователя, от имени которой запущен АОС.
Исключение будут составлять подключения вне DAX - типа запуски SQL Management Studio и т.д. А вот в Oracle каким-то образом передается информация типа Form: Admin@LedgerTable - как объект, пославший запрос (DAX 4.0). Из этой информации несложно догадаться кто есть кто
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 17.11.2009 в 11:24. |
|
Теги |
login, spid, логин |
|
|