Get Windows Local & Domain User SID and Login User Name

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Developer
Ветеран
Сообщения: 457
Зарегистрирован: 26 Март 2012, 16:18

Get Windows Local & Domain User SID and Login User Name

Сообщение Developer » 15 Декабрь 2018, 15:00

Привет всем!

Есть ли рабочий пример в коде Clarion получения SID (GUID) и Login имени текущего локального и доменного пользователя Windows из приложения Clarion без прав администратора? :wink:
С Уважением, Developer

kreator
Ветеран
Сообщения: 3107
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Get Windows Local & Domain User SID and Login User Name

Сообщение kreator » 15 Декабрь 2018, 16:05

Eсть функция getUserName. Без домена, кажется.С доменом надо разбираться отдельно. Могу посмотреть, что есть у нас. На память - из реестра вытаскивается. Но могу ошибаться. А зачем?
We are hard at work… for you. :)

Developer
Ветеран
Сообщения: 457
Зарегистрирован: 26 Март 2012, 16:18

Get Windows Local & Domain User SID and Login User Name

Сообщение Developer » 15 Декабрь 2018, 16:25

kreator писал(а):
15 Декабрь 2018, 16:05
Eсть функция getUserName. Без домена, кажется.С доменом надо разбираться отдельно. Могу посмотреть, что есть у нас. На память - из реестра вытаскивается. Но могу ошибаться. А зачем?
Разграничение доступа и протокол: кто, когда и что делал и под каким логином был зарегистрирован пользователь работавший с приложением Clarion с SQL сервером :mrgreen:

Kreator, посмотри пожалуйста.

Через системные утилиты есть такая возможность, а вот из кода Clarion пока не обнаружил :?
С Уважением, Developer

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 835
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

Get Windows Local & Domain User SID and Login User Name

Сообщение RaFaeL » 15 Декабрь 2018, 21:38

Если пользователь работает с SQL сервером, зачем это все делать в Кларионе? Это надо делать триггером на стороне сервера

Вот этот код используем для авторизации по текущему пользователю домена

Код: Выделить всё

            mOcx = Create(0, CREATE:ole)
            mOcx{PROP:Create} = 'ADSystemInfo'
            If mOcx{PROP:Object} Then
              tcs = mOcx{'UserName'}
              mOcx{PROP:Release} = 1
              mOcx{PROP:deactivate} = 1
            End
            Destroy(mOcx)
            if clip(tcs)<>''
              objConnection = Create(0, CREATE:ole)
              objConnection{PROP:Create} = 'ADODB.Connection'
              If objConnection{PROP:Object} Then 
                objConnection{'Provider'} = 'ADsDSOObject'
                objConnection{'Open'}
                objRecordset = objConnection{'Execute("SELECT sAMAccountName, CN FROM ''LDAP://' & clip(tcs) &'''")'}
                LOC:UserName=clip(objConnection{objRecordset &'.Fields.Item("sAMAccountName").Value'})
                objConnection{PROP:Release} = 1
                objConnection{PROP:deactivate} = 1
              end
            end
            Destroy(objConnection)
Вероятно, другие item дадут другие параметры, поищи документацию

Developer
Ветеран
Сообщения: 457
Зарегистрирован: 26 Март 2012, 16:18

Get Windows Local & Domain User SID and Login User Name

Сообщение Developer » 15 Декабрь 2018, 23:53

Rafael, спасибо за пример :D

Попробую.

Примеры для получения Windows SID Current User (Local / Domain) есть в основном на C++, C#, Delphi - на Clarion ничего не обнаружил :(
С Уважением, Developer

Аватара пользователя
morkovin
Ветеран
Сообщения: 564
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

Get Windows Local & Domain User SID and Login User Name

Сообщение morkovin » 16 Декабрь 2018, 5:17

Через системные утилиты есть такая возможность, а вот из кода Clarion пока не обнаружил
Ну так запускай утилиту из клариона. Вывод перенаправь в файл и потом можно парсить его.

https://docs.microsoft.com/en-us/sysint ... psloggedon
WBR, morkovin

kreator
Ветеран
Сообщения: 3107
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Get Windows Local & Domain User SID and Login User Name

Сообщение kreator » 16 Декабрь 2018, 15:36

Вот здесь проверка на пользователя и домен - viewtopic.php?f=1&t=2148.
Есть у нас вот такое определение (сразу уж всё):

Код: Выделить всё

GLO:TempPath = GETTEMPPATH()
LOC:TempString = ''
GetRegSubKeys(REG_LOCAL_MACHINE , 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces' , LOC:RegSubKeysQueue)
loop i#=1 to records(LOC:RegSubKeysQueue)
  get(LOC:RegSubKeysQueue , i#)
  s" = GetReg(REG_LOCAL_MACHINE , 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' & clip(LOC:RegSubKeysQueue.LOC:RegSubKeyName), 'IPAddress')
  if s"[1:7]<>'0.0.0.0'
    LOC:TempString = clip(LOC:TempString) & ' ' & clip(s")
  end  
  s" = GetReg(REG_LOCAL_MACHINE , 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' & clip(LOC:RegSubKeysQueue.LOC:RegSubKeyName), 'DhcpIPAddress')
  if s"[1:7]<>'0.0.0.0'
    LOC:TempString = clip(LOC:TempString) & ' ' & clip(s")
  end  
end  
LOC:TempString = LOC:TempString[2:len(clip(LOC:TempString))]
GLO:IPAddresses = LOC:TempString
GLO:UserName = GetUserName() 
GLO:ComputerName = GetReg(REG_LOCAL_MACHINE,'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters' , 'NV Hostname')
GLO:Domain = GetReg(REG_LOCAL_MACHINE , 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters' , 'NV Domain')
А вообще есть как-бы тонкость. Вот у нас в конторе несколько доменов. В реестре, похоже, храниться домен, где зарегистрирован данный комп. Но пользователь может быть из другого домена. Пример из верхней ссылки позволяет вытащить из AD полную инфу. Но тут как бы не проколоться, потому что (как у нас) есть домен-отец и домены-дети. Если не указать домен-отца, то сервис LDAP будет искать пользователя по всему миру. А где взять имя домен-отца? Скорее это должна быть глобальная настройка, задающаяся руками.
Есть ещё фигня, которую я пытался решить, но сразу не получилось, отложил. Пользователя уволили и его запись в AD отключена, может быть отключена по причине отпуска сотрудника (такое практикуется, сотруднику бывает запрещено работать в отпуске). И вот такой пользователь пришёл на работу, отключил комп от сети, и зашёл на этот под своей отключенной учёткой. Винда пропускает проверку на отключенность в этой ситуации. Потом пользователь включает в сеть и может делать что хочет. Нужна проверка на действующий пароль. Пример из верхней ссылки ответа на это не даёт.
И ещё. Если к SQL-серверу пользователь логинится через доменную учётку, может, действительно, логично воспользоваться SQL-сервером?
We are hard at work… for you. :)

Developer
Ветеран
Сообщения: 457
Зарегистрирован: 26 Март 2012, 16:18

Get Windows Local & Domain User SID and Login User Name

Сообщение Developer » 16 Декабрь 2018, 18:53

Kreator, благодарю за пример и обозначенные возможные нюансы! :D

Как я понял, необходимо проверять на практике :wink:
С Уважением, Developer

Developer
Ветеран
Сообщения: 457
Зарегистрирован: 26 Март 2012, 16:18

Get Windows Local & Domain User SID and Login User Name

Сообщение Developer » 16 Декабрь 2018, 19:03

morkovin писал(а):
16 Декабрь 2018, 5:17
Через системные утилиты есть такая возможность, а вот из кода Clarion пока не обнаружил
Ну так запускай утилиту из клариона. Вывод перенаправь в файл и потом можно парсить его.

https://docs.microsoft.com/en-us/sysint ... psloggedon
Игорь, спасибо за отклик и предложение, но я сторонник по возможности, быть более независимым от сторонних утилит :wink:

Но как вариант - предложенное тобой решение вполне реально - буду рассматривать и проверять все предложения :wink:
С Уважением, Developer

Аватара пользователя
morkovin
Ветеран
Сообщения: 564
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

Get Windows Local & Domain User SID and Login User Name

Сообщение morkovin » 16 Декабрь 2018, 21:13

OddJob от CapeSoft:
OddJob also provides the ability to pass data to a started process (via the Standard Input as well as on the command line), which allows command line applications to be run and data passed to them, as well as retrieving the result back from the process. This opens up a huge number of command line tools to your application, from simple command line clients, to command line server, compilers and even batch files.
WBR, morkovin

Аватара пользователя
morkovin
Ветеран
Сообщения: 564
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

Get Windows Local & Domain User SID and Login User Name

Сообщение morkovin » 16 Декабрь 2018, 21:34

кто, когда и что делал и под каким логином был зарегистрирован пользователь работавший с приложением Clarion с SQL сервером
Очевидно, что такую информацию надо получать через веб-интерфейс из любой точки мира. Кларион тут не подходит.
Решение
Node.js+WebSocket+SysUtilites
WBR, morkovin

Ответить