goodnight
Goto Top

Mit Startscript Loginevent in MySQL schreiben

Hallo,

ich möchte die Logins und Logoffs der User auf meinem Win2k3 mittels Login und Logoff Script irgendwie in eine MySQL schreiben.
Dabei sollte der Username, die Worksation und die An- und Abmeldezeit sowie das Datum erfasst werden.
Wie krieg ich das hin? Ich nehme an, dafür muss ich mit VB Script arbeiten, aber das kann ich gaar nit.
Hatte bisher immer nur ne Batch-File die beim Login ein paar Laufwerke gemappt hat und nen Drucker hinzugefügt hat.
Gibts da irgendwas fertiges oder kann mir jemand nen Ansatz zeigen?

Gruß

goodnight

Content-Key: 41546

Url: https://administrator.de/contentid/41546

Printed on: April 23, 2024 at 16:04 o'clock

Member: Dani
Dani Oct 05, 2006 at 19:09:52 (UTC)
Goto Top
Hi,
also so kannst du Datensätze einfügen.Du musst legendlich die mysql.exe auf netlogon legen. Dazu würde ich einen Benutzer unter MySQL anlegen, der nur INSERT' machen kann. Somit ist es ausgeschlossen, dass jemand Datensätze verändern kann.

G:\xampp\mysql\bin>mysql.exe --user=root --password=DEIN PW --database=test --e
xecute="INSERT INTO `users` ( `id` , `name` , `email` , `vip` , `fertig` ) VALUE  
S (NULL, 's', 's', 's', '1');"  

Gruß
Dani
Member: goodnight
goodnight Oct 06, 2006 at 17:05:59 (UTC)
Goto Top
Ich dachte schon ehr an VBS, da ich sowieso noch ein paar Sachen ausführen möchte, wie Laufwerke mappen.
Abgesehen davon kann ich das in ner Batch ja nit so gut verstecken, so dass jeder meiner Schüler sich das einfach kopieren kann (wenn er schnell genug ist) und die Abfrage beliebig manipulieren kann.


Gruß

goodnight
Member: goodnight
goodnight Oct 07, 2006 at 20:26:43 (UTC)
Goto Top
Nun, ich hab da jez was entwickelt...
Hoffe, dass irgendwer damit was anfangen kann - ist zugegebenermaßen verdammt unsauber gecodet, aber ist mein erstes Mal mit VBS

login.vbs

Dim rs, strConnectString, strSQL
Set rs = CreateObject("ADODB.Recordset")  
strConnectString = "DRIVER={MySQL ODBC 3.51 Driver};Server=localhost;UID=root;Password=abc123;Database=logins;Option=3"  
rs.ActiveConnection = strConnectString

Function MyDate()
     dteCurrent = Date()
     dteDay = Day(dteCurrent)
     dteMonth = Month(dteCurrent)
     dteYear = Year(dteCurrent)

     MyDate = dteYear & "/" & dteMonth & "/" & dteDay  

End Function

Set objNet = WScript.CreateObject("WScript.Network")  

name = objNet.UserName
computer = objNet.ComputerName

strSQL = "INSERT INTO user (ID,Name,Workstation,Datum,LogIn,LogOut) VALUES('0', '" & name & "', '" & computer & "', '" & MyDate & "', '" & time & "', '');"  
rs.Open strSQL

Dim timefile, MyFile
Set timefile = CreateObject("Scripting.FileSystemObject")  
Set MyFile = timefile.CreateTextFile("h:\timefile.txt", True)  
MyFile.WriteLine(time)
MyFile.Close

logout.vbs
Dim rs, strConnectString, strSQL
Set rs = CreateObject("ADODB.Recordset")  
strConnectString = "DRIVER={MySQL ODBC 3.51 Driver};Server=localhost;UID=root;Password=abc123;Database=logins;Option=3"  
rs.ActiveConnection = strConnectString

Set objNet = WScript.CreateObject("WScript.Network")  

name = objNet.UserName
computer = objNet.ComputerName

Function MyDate()
     dteCurrent = Date()
     dteDay = Day(dteCurrent)
     dteMonth = Month(dteCurrent)
     dteYear = Year(dteCurrent)

     MyDate = dteYear & "/" & dteMonth & "/" & dteDay  

End Function

strSQL = "INSERT INTO user (ID,Name,Workstation,Datum,LogIn,LogOut) VALUES('', '', '', '', '', '" & time & "');"  

Dim fso, fsoFile, Pfad
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Pfad = "h:\timefile.txt"  

set fso = CreateObject("Scripting.FileSystemObject")  

If fso.FileExists(Pfad) Then
  set fsoFile = fso.OpenTextFile(Pfad, ForReading , true, TristateFalse)
strSQL = "UPDATE user SET LogOut='" & time & "' WHERE Name = '" & name & "' AND LogIn = '" & fsoFile.ReadLine & "';"  
fsoFile.close
fso.DeleteFile(Pfad)
set fsoFile = nothing
set fso = nothing
Else
  MsgBox ("Fehler: timefile.txt wurde gelöscht - Ereignis wurde protokolliert.")  
strSQL = "INSERT INTO badusers (ID,Name,Zeit,Datum) VALUES('0', '" & name & "', '" & time & "', '" & MyDate & "');"  
End if

rs.Open strSQL

Zur Erklärung:

In der Login.vbs wird in ne SQL Table Username, Computername, das Datum und die Loginzeit geschrieben. Zudem wird auf eine Textdatei auf einer Userspezifischen Freigabe eingerichtet um hinterher beim Logout den User wieder zu identifizieren und um damit die Tabelle in Puncto Logout zu ergänzen.

In der Logout.vbs wird die Textfile ausgelesen, um den User in der Table wiederzufinden und die aktuelle Zeit als Logout Zeit gesetzt. Zudem werden User, die die Textfile gelöscht haben bevor es zum Logout kommt, in eine extra Tabelle geschrieben. Anschließend wird die Textdatei, falls sie vorhanden war, gelöscht.


Gruß

goodnight
Member: Biber
Biber Oct 08, 2006 at 09:19:24 (UTC)
Goto Top
Moin goodnight,

erstmal danke für das Posten Deiner Lösung.

In Deinem LogOut-Skript fehlt aber noch ein INSERT in die User-Tabelle (oder ich verstehe vielleicht den Hintergrund nicht).

Durch die erste INSERT-Anweisung ( im Zweig: Login-Zeit konnte ermittelt werden) wird doch ein Update durchgeführt.
strSQL = "UPDATE user SET LogOut='" & time & "' WHERE Name = '" & name & "' AND LogIn = '" & fsoFile.ReadLine & "';"

Okay.
Aber im zweiten Fall (keine LoginZeit gefunden) schreibst Du keinen Satz in die User-Tabelle?
Sondern nur in die Bad-Users?

Oder übersehe ich etwas?
Gruß
Biber
Member: goodnight
goodnight Oct 08, 2006 at 11:13:59 (UTC)
Goto Top
Hallo,

erstmal Danke fürs Feedback!

Nein, im Fall, dass die Zeitdatei nicht gefunden wird, schreibe ich nichts in die user, da ich die Endzeit zwar habe, sie aber dem User nicht eindeutig zuordnen kann, da es auch passieren kann, dass sich der User mehrmals am Tag einloggt. Sonst wäre ja die Zuordnung über die lokale Datei nicht nötig. Daher auch kein INSERT - oder was sollte ich da reinschreiben?
Vielleicht übersehe ich da ja ne Möglichkeit?!
Bin für alles offen.

Im übrigen:
Hat jemand eine Idee, wie ich feststellen könnte ob die Datei manipuliert wurde oder wo ich sie hinlagern könnte, wo der User zwar Lese- und Schreibzugriff hat, aber sie selbst nicht finden wird? Z.B. Temp oder sowas?
Dafür müsstet ihr mein Netzwerk kennen, aber das ist ein wenig schwierig - vielleicht gibts da ja auch so ne Lösung.

Gruß

goodnight
Member: Biber
Biber Oct 08, 2006 at 12:54:09 (UTC)
Goto Top
Hmm, goodnight,

a)
nicht gefunden wird, schreibe ich nichts in die user, da ich die Endzeit zwar habe, sie aber dem User nicht eindeutig zuordnen kann
Doch. Die Kombination "username & rechnername" hast Du als eindeutige Zuordnung. Und die Logout-Zeit. Für ein neues INSERT.
Was macht es denn für einen Unterschied, ob Du einen LOGIN-Satz hast ohne LOGOUT-Zeit ( kann aus x Gründen passieren) oder einen LOGOUT-Satz ohne Login-Zeit?


b)
Hat jemand eine Idee, wie ich feststellen könnte ob die Datei manipuliert wurde oder
wo ich sie hinlagern könnte, wo der User zwar Lese- und Schreibzugriff hat, aber sie selbst nicht finden wird? Z.B. Temp oder sowas?

Machen sich Deine User einen Sport daraus?
Wenn ja: spiel doch nicht Hase und Igel mit denen. Nutzungsbedingungen unterschreiben lassen.
1. Verstoß dagegen führt zur Ermahnung, 2. Verstoß zur temporären Sperrung des Accounts, 3. Verstoß....

Oder: schreibe diese Log-Informationen nicht zusätzlich in die MySQl-Tabelle, sondern werte am Ende des Zeitraums (monatlich) oder auch auf Knopfdruck die Eventlogs der Clients aus.
Die Anmelde/Abmelde-Ereignis-IDs sind 6005 und 6006 oder so ähnlich... User- und Rechnername stehen auch drin und die Zeit ohnehin.
Und das Eventlog ist vergleichsweise einfach fälschungssicher zu bekommen (nämlich rein rechtemäßig) und außerdem kannst Du quasi nebenbei auch regelmäßig einen Blick auf die (gewichtigen) Fehler in den Eventlogs werfen.

Gruß
Biber
Member: goodnight
goodnight Oct 08, 2006 at 14:59:31 (UTC)
Goto Top
Hallo,

ja meine User machen sich einen Sport daraus, da es Schüler sind, die scheinbar leider meist nichts besseres zu tun haben. Deshalb auch die Badusers, damit ich die direkt sperren kann.
Ich kann es leider nicht eindeutig zuordnen, da es ja vorkommen kann, dass sich der User mehrmals am Tag am selben PC anmeldet - passiert sogar öfter.

Der Sinn und Zweck des Logs ist es aber primär einen Überblick über die User zu bekommen und ich fürchte, die Eventlogs auswerten ist ein wenig zu kompliziert für meine Kenntnisse.
Aber nichtsdestotrotz werfe ich da natürlich manchmal einen Blick rein.

Natürlich gibt es auch Nutzungsbedingungen, aber wenn wir die Verstöße, so wie nun in dieser Datenbank nicht eindeutig zuordnen können, sind wir einigermaßen Machtlos.

Gruß

goodnight