Идентификация пользователя (Lotus Notes)

  • Автор темы prof2008
  • Дата начала
P

prof2008

Гость
#1
Добрый день !!! Помогите пожалуйста !!!

Есть общая БД - и два пользователя Сидоров и Иванов
заходят под одним логином например "Отдел снабжения"
а вот идентифицировать никак не могу в виде (View)
хотел вставить колонку и формулу например @Enviroment(ComputerName)
чтобы разделить пользователей при отправке сообщений
но не могу получить строку хотя бы имени компьютера
есть стандартные средства ????

Lotus Notes 6 & 7

e-mail prof2008@mail.ru

Заранее спасибо.
 

Мыш

Well-Known Member
Lotus team
12.02.2008
1 084
13
#3
Если база лежит на сервере, то и @Environment на сервере выполняется, поэтому не поможет.
 
P

prof2008

Гость
#4
Спасибо за ответы !!!
"выдайте им разные ID файлы - так будет правильнее"
это и понятно !!! но ID один !!!! иначе надо лицензии покупать на 3 ПК
а нам хотелось бы чтобы работали под одной учетной записью отдел снабжения
а вот для внутр контроля кто отправлял письмо писать в отдельную колонку имя пользователя windows или имя компьютера !!!!
Или IP адрес
 
K

Klido

Гость
#8
достаточно подключить winapi и получишь практически всё про клиентское место пользователя - включая сетевое имя...
хотя да. винскриптом быстрее:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='vb'>Set WSHNetwork = CreateObject("WScript.Network")

strDomain = WSHNetwork.UserDomain
strUserName = WSHNetwork.UserName
strComputerName = WSHNetwork.ComputerName

Set IPConfigSet =
GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

Forall IPConfig In IPConfigSet
If Not Isnull(IPConfig.IPAddress) Then
For i=Lbound(IPConfig.IPAddress) To Ubound(IPConfig.IPAddress)
If strIPAddress = "" Then
strIPAddress = IPConfig.IPAddress(i)
Else
strIPAddress = strIPAddress & ", " & IPConfig.IPAddress(i)
End If
Next
End If
End Forall[/CODE]
 

susinmn

Well-Known Member
16.10.2007
529
8
33
Саратов
#9
Код:
Set WNetwork = CreateObject("WScript.Network")
Set WMIService = GetObject("winmgmts:\\" + WNetwork.ComputerName + "\root\cimv2")
Set IPConfigSet = WMIService.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

Forall IPConfig In IPConfigSet
If Not Isnull(IPConfig.IPAddress) Then
ip=IPConfig.IPAddress
End If
End Forall
 

TIA

:-)
Lotus team
15.05.2009
790
1
#10
Надо учитывать, что у клиента может быть более одного IP-адреса. Например, он имеет 2 сетевые карточки.

У меня есть пример получения через WMI. Только надо как-то отличить записи именно для сетевого адаптера, типа по не пустому MACAddress. Схема
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">такая</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='ls'> Set g_objWMIService = GetObject(\"winmgmts:\\\\\" & ComputerName & \"\\root\\cimv2\")

ObjName = \"Win32_NetworkAdapterConfiguration\"

Set colItems = g_objWMIService.ExecQuery(\"Select * from \" & Objname & \" \" )

Forall IPConfig In colItems
Set CurrDoc = New NotesDocument(g_CurrDB)
CurrDoc.form = Objname
CurrDoc.ComputerName = g_ComputerName
Forall eachProp In IPConfig.Properties_
If Not(Isnull(eachProp.Value)) And EachProp.name <> \"Index\" Then
NotesFieldName = \"x_\" & EachProp.name
Call AddValue( CurrDoc, NotesFieldName, eachProp.Value)

End If
End Forall
Call CurrDoc.Save(1,1)
End Forall

Sub AddValue( WorkingDoc As NotesDocument, FieldName As String, PropVal As Variant)
Dim TempItem As NotesItem
Set TempItem = WorkingDoc.GetFirstItem(FieldName)
Dim NewValue
Dim CountInt As Integer
Select Case Typename(PropVal)
Case \"STRING\"
NewValue =PropVal
Case \"STRING( )\"
NewValue =PropVal
Case \"INTEGER\",\"LONG\",\"BOOLEAN\",\"BYTE\"
NewValue =Cstr(PropVal)
Case \"VARIANT( )\" , \"INTEGER( )\"
Redim NewValue(Ubound(propVal)) As String
For CountInt = Lbound(PropVal) To Ubound(propVal)
NewValue(CountInt) =Cstr(PropVal(CountInt))
Next
Case Else
NewValue = Inputbox (\"\",\"\",Typename(PropVal))
End Select

If tempItem Is Nothing Then
Call WorkingDoc.replaceItemValue(FieldName, NewValue)
Else
TempItem.Values = Arrayappend(TempItem.values,NewValue)
End If
End Sub[/CODE]
В результате получаем документы приблизительно такого
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">содержания</div></div><div class="sp-body"><div class="sp-content">x_Caption [00000008] Intel® PRO/100 VE Network Connection
x_Description Intel® PRO/100 VE Network Connection - Packet Scheduler Miniport
x_DHCPEnabled False
x_IPEnabled True
x_IPXEnabled False
x_MACAddress 00:0E:7D:23:31:BC
x_ServiceName E100B
x_SettingID {F0C5EAE5-6F2D-4D14-B360-86068341D3F6}
x_DatabasePath %SystemRoot%\\System32\\drivers\\etc
x_DeadGWDetectEnabled True
x_DNSEnabledForWINSResolution False
x_DNSHostName computer
x_DNSServerSearchOrder 190.254.0.1, 190.254.0.2
x_IPAddress 190.254.0.15
x_IPConnectionMetric 20
x_IPFilterSecurityEnabled False
x_IPSecPermitIPProtocols 0
x_IPSecPermitTCPPorts 0
x_IPSecPermitUDPPorts 0
x_IPSubnet 255.255.0.0
x_KeepAliveTime 7200000
x_PMTUDiscoveryEnabled True
x_TcpipNetbiosOptions 0
x_WINSEnableLMHostsLookup True
x_WINSScopeID
Во, susinmn точнее написал.
 
O

oshmianski

Гость
#11
мои
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">5 копеек</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='ls'>'WinAPI для определения windows имени пользователя и ip машины
Private Const LOG_MAX_IP = 5 'To make a buffer... i dont think you have more than 5 ip on your pc..
Private Const LOG_MAX_COMPUTERNAME_LENGTH = 31

Private Type LOG_IPINFO
dwAddr As Long ' IP address
dwIndex As Long ' interface index
dwMask As Long ' subnet mask
dwBCastAddr As Long ' broadcast address
dwReasmSize As Long ' assembly size
unused1 As Integer ' not currently used
unused2 As Integer '; not currently used
End Type

Private Type LOG_MIB_IPADDRTABLE
dEntrys As Long 'number of entries in the table
mIPInfo (LOG_MAX_IP) As LOG_IPINFO 'array of IP address entries
End Type

Private Type LOG_IP_Array
mBuffer As LOG_MIB_IPADDRTABLE
BufferLen As Long
End Type

Declare Private Sub LOG_CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, Byval Length As Long)

Declare Private Function LOG_GetIpAddrTable Lib "IPHlpApi" Alias "GetIpAddrTable" (pIPAdrTable As Byte, pdwSize As Long, Byval Sort As Long) As Long

Declare Private Function LOG_GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (Byval lpBuffer As String, nSize As Long) As Long

Declare Private Function LOG_GetComputerName Lib "kernel32" Alias "GetComputerNameA" (Byval lpBuffer As String, nSize As Long) As Long

Private Function INNER_Get_IP_List (log_IP_List () As String) As Boolean
On Error Goto errorHandler
INNER_Get_IP_List = False

Dim Ret As Long, Tel As Long
Dim bBytes () As Byte
Dim Listing As LOG_MIB_IPADDRTABLE
Dim t1 As LOG_IPINFO, t2, t3

Call LOG_GetIpAddrTable (Byval 0&, Ret, True)

If Ret <= 0 Then Exit Function
Redim bBytes (0 To Ret - 1) As Byte

'retrieve the data
Call LOG_GetIpAddrTable (bBytes(0), Ret, False)

'Get the first 4 bytes to get the entry's.. ip installed
Call LOG_CopyMemory (Listing.dEntrys, bBytes (0), 4)

Redim log_IP_List (Listing.dEntrys - 1)

For Tel = 0 To Listing.dEntrys - 1
t1 = Listing.mIPInfo (Tel)
t2 = bBytes (4 + (Tel * Len (Listing.mIPInfo (0))))
t3 = Len (Listing.mIPInfo (Tel))
Call LOG_CopyMemory (Listing.mIPInfo (Tel), bBytes (4 + (Tel * Len (Listing.mIPInfo (0)))), Len (Listing.mIPInfo(Tel)))
log_IP_List (Tel) = INNER_ConvertAddressToString (Listing.mIPInfo (Tel).dwAddr)
Next

INNER_Get_IP_List = True
ex:
Exit Function

errorHandler:
Call INNER_ProcessError (MODULE_NAME, Err, Error, Erl, Lsi_info (2), Lsi_info (12))
Resume ex
End Function

Private Function INNER_ConvertAddressToString (longAddr As Long) As String
Dim myByte (3) As Byte
Dim Cnt As Long

Call LOG_CopyMemory (myByte(0), longAddr, 4)

For Cnt = 0 To 3
INNER_ConvertAddressToString = INNER_ConvertAddressToString + Cstr (myByte (Cnt)) + "."
Next Cnt

INNER_ConvertAddressToString = Left$ (INNER_ConvertAddressToString, Len (INNER_ConvertAddressToString) - 1)
End Function[/CODE]
использовать аккуратно - можно повалить notes
 

iosif88

Well-Known Member
14.10.2009
97
1
#12
Всем большое спасибо за активную помощь.

Set WNetwork = CreateObject("WScript.Network")
Set WMIService = GetObject("winmgmts:\\" + WNetwork.ComputerName + "\root\cimv2")
Set IPConfigSet = WMIService.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

Forall IPConfig In IPConfigSet
If Not Isnull(IPConfig.IPAddress) Then
ip=IPConfig.IPAddress
End If
End Forall
Вам susinmn, отдельное спасибо, ваш код я и применил ;)
 

HelenHelen

Well-Known Member
31.08.2011
74
0
#14
Добрый день, коллеги!

Скажите, пожалуйста, есть ли возможность программно получить IPшник и/или имя компа, с которого открыта сессия?

Заранее спасибо!
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 201
24
38
Киев
ToxaRat.com
#15
Добрый день, коллеги!
Скажите, пожалуйста, есть ли возможность программно получить IPшник и/или имя компа, с которого открыта сессия?
Заранее спасибо!
конечно
как по мне самый правильный это с консоли сервера: show user -xml
 

HelenHelen

Well-Known Member
31.08.2011
74
0
#16
как по мне самый правильный это с консоли сервера: show user -xml
Задача стоит немножко иная. Нужно, чтобы в отдельную базу протоколировались действия пользователя, и нужно отслеживать, с какой машины он их совершает, это для безопасников. Можно ли получить этот параметр средствами LS?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 425
351
homepage.mac.com
#18
лучше использовать то, что выдает больше инфы и не зависит от платформы
айпи может быть недостаточно, особливо для сетей с ДХЦП, а вот МАКадрес - самое оно
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 425
351
homepage.mac.com
#20
м-да, похоже "глухи" разработчики к "грамотному подходу", по принципу схватил что попало и побежал...

Добавлено:
ОН РАБОТАЕТ и возвращает все что нужно!
оно не работает на платформе в общем её понимании (а не виндовзонли), оно не возвращает деталей, кот. больше интересны секурити, чем просто IP адрес (он динамический и мало несёт информации)