Get Windows Local & Domain User SID and Login User Name

Clarion, Clarion 7

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

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

Get Windows Local & Domain User SID and Login User Name

Сообщение Developer »

Привет всем!

Есть ли рабочий пример в коде Clarion получения SID (GUID) и Login имени текущего локального и доменного пользователя Windows из приложения Clarion без прав администратора? :wink:
С Уважением, Developer
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Get Windows Local & Domain User SID and Login User Name

Сообщение kreator »

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

Get Windows Local & Domain User SID and Login User Name

Сообщение Developer »

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

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

Через системные утилиты есть такая возможность, а вот из кода Clarion пока не обнаружил :?
С Уважением, Developer
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Get Windows Local & Domain User SID and Login User Name

Сообщение RaFaeL »

Если пользователь работает с 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
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Get Windows Local & Domain User SID and Login User Name

Сообщение Developer »

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

Попробую.

Примеры для получения Windows SID Current User (Local / Domain) есть в основном на C++, C#, Delphi - на Clarion ничего не обнаружил :(
С Уважением, Developer
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Get Windows Local & Domain User SID and Login User Name

Сообщение morkovin »

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

https://docs.microsoft.com/en-us/sysint ... psloggedon
WBR, morkovin
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Get Windows Local & Domain User SID and Login User Name

Сообщение kreator »

Вот здесь проверка на пользователя и домен - 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
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Get Windows Local & Domain User SID and Login User Name

Сообщение Developer »

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

Как я понял, необходимо проверять на практике :wink:
С Уважением, Developer
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Get Windows Local & Domain User SID and Login User Name

Сообщение Developer »

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

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

Но как вариант - предложенное тобой решение вполне реально - буду рассматривать и проверять все предложения :wink:
С Уважением, Developer
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Get Windows Local & Domain User SID and Login User Name

Сообщение morkovin »

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
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Get Windows Local & Domain User SID and Login User Name

Сообщение morkovin »

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