PDA

Vollständige Version anzeigen : Server - Zeit


Ohnesorg
03.07.2001, 11:35
Hallo,

diesmal nicht ganz so dabbisch, hoffe ich doch... :D

Folgendes Problem besteht:
In meiner Datenbank darf sich jeder User nur einmalig anmelden. Bei uns in der Firma sind - aufgrund älterer Rechner - BlueScreens und Access - Abstürze an der Tagesordnung. Schmiert einem User der Rechner ab, wird er aus der Usertabelle nicht abgemeldet.
Die Abmeldung kann nur von der Entwicklungsgruppe (2 Personen) durchgeführt werden.
Nun sieht es aber so aus, dass wir - im Gegensatz zu einigen KollegInnen - weder an Feiertagen noch am Wochenende arbeiten. Das Problem dürfte jetzt offensichtlich sein:
Ich bastel an einem Tool, welches an bestimmten Tagen oder zu bestimmten Uhrzeiten den entsprechenden User abmelden kann. Das Problem hierbei ist, wenn ich die aktuelle Uhrzeit und das Datum abfrage, wird Grundsätzlich die Workstation als Quelle verwendet. Ein paar spitzfindige Nasen finden es lustig sich daran vorbei zu hacken, indem sie an ihrer Workstation Datum und Uhrzeit ändern.
Wir gehen jetzt her und wollen den Server nach Datum und Uhrzeit fragen, da kein normaler User außerhald der IT die Möglichkeit hat da herum zu doktorn.

Frage:
Besteht die Möglichkeit die Uhrzeit und das Datum des Servers abzufragen und wenn ja: Wie zum Geier geht das??? :D

A.S.
03.07.2001, 11:51
Hallo Ohnesorg,

für NT schau mal hier vorbei:
http://www.mvps.org/access/api/api0039.htm

------------------
HTH

Arno

dmsman
03.07.2001, 11:57
Hi OhneSorg :)

passt zwar jetzt nicht zu deinem thema aber wie meldest du denn deine user in der db ab, aus der usertabelle ? kannst mir das mal genauer beschreiben? das wär echt nicht schlecht, denn ich bastle auch gerade an einer facharbeit herum !
danke für deine hilfe...

Ohnesorg
03.07.2001, 12:53
Hallo,

@Arno
Herzlichen Dank :D Werde ich gleich mal ausprobieren. Ich vergaß zu erwähnen: Es ist ein NT-Netzwerk, basierend auf Novell.

@dmsman

Es ist ganz einfach:
1)
Du erstellst eine Tabelle mit allen Userangaben, die Du brauchst um den User verwalten zu können. Zusätzlich benötigst Du eine Spalte für einen boolschen Wert.

2)
Benötigst Du ein Formular. Am Besten ungebunden mit zwei Datenfeldern. Eins für den Login-Namen in der Datenbank und eines für die Eingabe des Passwortes. Das Passwortfeld bekommt als Eingabeformat "Kennwort" zugewiesen, damit niemand das Passwort während der Eingabe auslesen kann.
In das Formular kommt noch eine Schaltfläche zum Abbrechen, und eine zum Anmelden.

Nun passiert folgendes:
Der Benutzer gibt sein Login und sein Kennwort ein und drückt die Anmeldetaste.
Der Code, der sich dahinter verbirgt öffnet die User-Tabelle, sucht nach dem Login und vergleicht das eingegebene Kennwort mit dem in der Tabelle. ( if EingabeKennwort = UserTabelleKennwort then ... )
Der angegebene Benutzername (das Login) wird in einer Variable gespeichert. Aber bitte nicht in einem Formular sondern als globale Public Variable in einem Modul, damit Du immer darauf zugreifen kannst, wenn Du es brauchst.

Stimmen die beiden Kennwörter überein, wird das boolsche, zusätzliche Feld auf True gesetzt. Das Anmeldeformular wird geschlossen und z.B. das Hauptmenü wird geöffnet.

Stimmen die Kennwörter nicht überein, gibt es eine Fehlermeldung und sonst weiter passiert nichts.

Beendet ein User das Hauptmenü, wird er gefragt, ob er die Datenbank wirklich verlassen will. Bestätigt er die Abfrage mit Ja, wird sein Userlogin in der Usertabelle gesucht und die Boolsche Variable wird auf False gesetzt. Nicht vergessen mit Quit() die Datenbank zu beenden!! :D

------

Weiter im Text:
Um eine doppelte Anmeldung des Users (1 User = 2mal angemeldet) zu verhindern kann das Anmeldeformular beim Suchen des Logins auch abfragen, welchen Wert das boolsche Feld hat.
Ist es True, wird eine MessageBox mit einer Fehlermeldung ausgegeben und die Datenbank wird beendet.

Im Grunde genommen ist es sehr einfach, aber ein gewaltiger Haufen Schreibarbeit... mir bluten jetzt noch die Finger und das ist ein Jahr her! :D

Ohnesorg
03.07.2001, 13:27
Und es geht weiter mit den Prob's.
Bin ich denn wirklich soooo dämlich?
:mad:

Ich benötige für das Problem den Namen des Servers im Server-Namens Format... was auch immer dies sein mag.

Bis jetzt habe ich schon verschiedenes ausprobiert und die - von Arno gelinkte - Lösung bringt mir nicht mehr und nicht weniger als einen Null - String.
Zur Zeit verwende ich zum Beispiel "\\Server"
oder "\\Server\Public\" ob mit oder ohne Backslash am Ende... es funzt nicht!

Kann mir da wer weiterhelfen??? Ach Bittäääää

Gruß
eine verzweiselte Seele zwischen Access - Himmel und Access - Hölle

MarioR
03.07.2001, 14:01
Hallo Ohnesorg,

kurz und geschmacklos :D

In der DOS-Eingabeaufforderung kannst Du mit
NET TIME \\SERVER
die Zeit eines Servers abfragen (ich hab's jetzt leider nicht mit NT probieren können).
Kannst Du die Ausgabe nicht in eine Datei umlenken und da wieder raus lesen?

Ohnesorg
03.07.2001, 16:38
Hi!!

argh! *grummel*

Danke für den Tipp, Mario.
Leider ist unsere EDV etwas geschickter als meiner einer. Was noch schlimmer ist... ich sitze nicht in der EDV. Die Hälfte der Net-Befehlsargumente ist abgeschaltet, bzw. wurden nicht gestartet. Sprich... ich komme an "Net Time \\Server" nicht dran.

Gibt es vielleicht die Möglichkeit das Ganze mit der IP - Adresse zu umgehen??
OK! Das fällt vermutlich unter die Rubrik "Hacken". Nur wenn diese Saftnasen (entschuldigt bitte den Ausdruck, aber ich hatte einen wesentlich heftigeren in den Fingerspitzen bereit gehabt) versuchen mich zu ärgern und mir keine Chance geben richtig zu arbeiten, werde ich mir wohl anders helfen können.

Das Umleiten einer Bildschirmausgabe in eine Datei hingegen ist das geringfügigste Problem. Auch der Mehraufwand von 5 Minuten um das ganze auch noch in den Quelltext zu bringen stellt keine großartige Herausforderung dar. Nur müsste ich dazu den Server finden.

Kann es sein, dass die Server mit Referenznamen arbeiten? Soll heißen: Ich frage mit "whoami" ab, in welche Server ich eingeloggt bin. Davon suche ich mir den aus, den alle verwenden und nehme diesen als Zeit und Datumsquelle. Wenn jetzt aber die Namen, die mir angezeigt werden keine Servernamen sondern lediglich Zeiger sind, mit denen ich nichts anfangen kann.... habe ich wohl geloost, oder?

Aber was rege ich mich auf!? Wenn es nicht funktioniert müssen die eben sehen, wie sie zurecht kommen. (Ich werde wegrationiert, denn normalerweise vertrete ich nicht diese Einstellung)

P.S.: Hat jemand einen Job für mich? :D

Gruß
Ohnesorg 'mit Galgenhumor und ohne lachen im Gesicht' :mad:

Ohnesorg
04.07.2001, 07:50
Einmal nach oben damit... das MUSS doch zu knacken sein... :D

Wile E G
04.07.2001, 10:18
Hi mitsorg (wenn ich dich recht verstehe, wäre eine namensänderung angebracht ;) )

eine echte idee hab ich net, tut mir leid, bin kein profi.

aber wie wärs mit folgenden denkansätzen:
1. die ipadresse (bzw den servername) müsstest du doch unter dem explorer mit netzlaufwerk verbinden/trennen irgendwie rausfinden können? (oder auch nicht, ist bloß ne idee)

2. wenn der unwahrscheinliche fall vorliegt, daß euer intranet mit dem internet verbunden ist, dann hole die doch die atomzeit aus der tu braunschweig? oder aus greenwich?
müsste irgendwie zu bewerkstelliegen sein, weiß aber selbst nicht wie, ist nur so ne idee, da du sagst du brauchst nur eine definitiv, immergleiche uhrzeit.

HTH
Wile E.G.

Ohnesorg
04.07.2001, 12:10
*sniff*

Hi Wile,

Danke für den Tipp....
Das mit der Atom-Zeit ist eine saumäßig gute Idee!!! Entschuldigt bitte den AAusdruck, aber da muss man doch erst einmal drauf kommen!!! :D

Selbst wenn ich den Braunschweiger Server anzapfen könnte... bei uns in der Firma haben ca 70% aller Mitarbeiter keine Zugangsberechtigung für das Internet.
Unsere EDV tyrannisiert nämlich ganz gerne! (hoffentlich ließt das niemand von denen!!!) :rolleyes:
Das bedeutet, dass etwa 80% der Datenbank-User die Uhrzeit und das Datum nicht abfragen können und dementsprechend nicht mehr mit der Datenbank arbeiten können.


Auf die Idee mit dem Explorer die Servernamen herauszusuchen bin ich auch schon gekommen. Aber Access findet keinen der Server... :mad:

Die ersten beiden Teile der IP habe ich. Da fehlen mir nur noch die letzten beiden...
Die Bitte mir die IP zu geben wurde mit lautem gelächter und einem aufgelegten Telefonhörer abgelehnt.
Ich könnte mich ja mit der Datenbank vollautomatisiert durch unser wunderprächtiges Firmennetz hacken!

Die Senkel bekommen ja schon einen Anfall, wenn eine Datenbank die Registry schreibt und ließt!

Aber dennoch Danke für die Tipps.
Kann es sein, dass ich hier der einzige bin, der von seiner EDV so heftig kastriert wird?
Ich brauch einen anderen Brötchengeber! Hat wirklich niemand einen Job für mich? :)

Gruß
Ohnesorg 'mit kastrierten Möglichkeiten'

Wile E G
04.07.2001, 12:34
hi
und wenn du die ipadresse deines computers in der firma angibst? den musst du halt immer laufen lassen. (und keinen ran lassen der die Uhrzeit ändert) oder nimm irgendeinen anderen computer, der immer an ist und sags keinem, dass du dessen uhrzeit abfragst. (oder miete eine ariane rakete und lade die edv auf einen kleinen ausflug ein...)
oder ärgere die edv solange, bis sie den datums-änderungszugriff auf JEDEM computer sperrt und keiner kann dich mehr ärgern.

gruß wile e.g.

Wile E G
04.07.2001, 12:42
hi

vielleicht gibt es bei euch einen anderen rechner in der firma (backup server?) zu dem jeder zugang hat und du fragst dessen zeit ab? oder du gibst die adresse deines rechners an, den darfst du dann nur nicht abschalten ;) ).
oder hast du es schon bei JEDEM rechner (+laptop) zu dem du zugriff hast schonmal mit dem net befehl versucht? vielleicht hat die edv einen übersehen.
oder du bewirbst dich bei einenm job in deiner eigenen edv (5.kolonne)
oder du mietest eine ariane rakete und lädtst die edv zu einem ausflug ein.......
gruß
wile e.g.
(nachtrag: aha, er hat die letzte mail also doch noch gepostet, bevor er abschmierte, sorry, für den z.T. doppelten Inhalt)

Wile E G
04.07.2001, 12:54
hi hab noch eine idee...
kopiere eine kleine datei auf den server und lies die erstellungszeit aus. weis zwar selbst nicht, wie ich sowas machen würde aber theoretisch müsste es gehen.
gruß wile e.g.

Ohnesorg
04.07.2001, 15:52
Hi Wile,

freut mich!! :D
Mal im Ernst!! Da sind ja einige Ideen dabei!
Besonders gefällt mir die Idee mit der Ariane Rakete. Leider ist es dazu schon zu spät, denn ich würde meine lieben KollegInnen aus der EDV am liebsten auf der Mir sehen... zum dem Zeitpunkt, an dem sie in die Erdatmosphäre eingetreten ist, selbstverständlich! :D :D :D

Das mit der Datei auf einem Server, auf den jeder Zugriff hat würde zumindest teilweise funktionieren. Da habe ich dann das aktuelle Datum.
Aber ich brauche ja nicht nur das Datum sondern auch die Uhrzeit.
Ich könnte mir in meinen süßen, kleinen, zarten Baby-Popo beißen, dass ich überhaupt gesagt habe "Klar, ist kein Problem mit dem Tool. Hast Du am Mittwoch!"
Es ist fertig... allerdings fragt es die Zeit der Workstation ab. Wenn irgendein Abteilungskasper, der versucht sich durch halbe Netzwerk zu hacken, auf die dumme Idee kommt die Uhrzeit einfach nur zu verändern, bin ich geliefert!

Ich habe es auch schon so geregelt, dass mein Rechner alle 15 Sekunden die aktuelle Uhrzeit liefert. Das hat auch funktioniert (Ähnlich wie Deine Idee mit der IP Adresse meines Rechners.). Das Problem ist nur... habe ich vor 20 Minuten erfahren... mein Login wird automatisch um 19 Uhr aus dem Netzwerk gefeuert. Das heißt meine Server Verbindungen werden EDV Seitig gekappt und mein Rechner kann keine Uhrzeiten mehr liefern.
Ich kann also meinen Rechner Freitags laufen lassen und wer Samstags meine Uhrzeit abfragt, hat verloren, denn selbstständig einloggen ist ja nicht... *schmodder*

Ich glaube, dass ich die Programmierung aufgeben und Straßenkehrer werden sollte.

Oder hat irgendwer in diesem Forum einen Job für mich als Access - Datenbankprogrammierer? (War ernst gemeint!!)

Danke nochmal, Wile

P.S.:
Was Deine Idee mit der Bewerbung in der EDV angeht...
Um Gottes Willen!! Manchmal habe ich das Gefühl da Arbeiten wirklich nur Straßenkehrer... "Die Grafikkarte ist kaputt gegangen, weil Sie beim Starten des Rechners noch eine Diskette im Laufwerk hatten!"
Sorry, aber wer solche Sprüche bringt...
Ein Depp Vermasselt´s


Ich möchte mich für diesen Spruch schon mal im Voraus entschuldigen, aber er ist ausschließlich auf meine Firma gemünzt!

Ralf Pfiffer
04.07.2001, 21:38
Eine paar ganz andere Idee

Füge ein neues Feld in deine USERLOG Tabelle ein
Feld: Datum/zeit
Las von deinem Hauptmenü aus alle Minute das aktuelle Datum / Zeit beim entsprechenden USER eintragen.
Beim Login Datum/Zeit abfrage, ist diese älter als 1 Min ist der USER mindestens bereits 1 Minute abgemeldet
Einlogen ermöglichen ansonsten Einlogen abbrechen

Zweite Möglichkeit
Vielleicht reicht es aus aus wenn du überprüft ob die Datenbank auf dem PC schon läuft

Function LäuftAnwendung() As Integer
Dim DB As Database
Set DB = CurrentDb()
If TestDDELink(DB.Name) Then
LäuftAnwendung = -1
Else
LäuftAnwendung = 0
End If
End Function

Private Function TestDDELink(ByVal strAppName$) As Integer ' Hilfs Function für IsRunnig
Dim varDDEChannel
On Error Resume Next
Application.SetOption ("Ignore DDE Requests"), True
varDDEChannel = DDEInitiate("MSAccess", strAppName)

If Err Then
TestDDELink = False
Else
TestDDELink = True
DDETerminate varDDEChannel
DDETerminateAll
End If
Application.SetOption ("Ignore DDE Requests"), False
End Function

Phillip-Berlin
04.07.2001, 22:11
herr lehrer ich weis was!
falls ich das richtig verstanden hab, liegt deine db auf nem server und die clients öffnen lediglich ein frontend (oder ähnlich)
wie wärs wenn du beim start der db auf dem client in irdendeinem windows ordner eine datei erstellst ... und der aplikation auf dem server sagst du sie soll alle 5 min nachsehen ob die datei auf dem jeweilig angemeldetem client verfügbar ist wenn nicht ...
dann muss die kiste abgeranzt sein und der user wird automatisch abgemeldet ...
mit dieser methode kann man übrigens auch user kicken!
nur andersherum .. man erstell eine datei ..
und im code
if blabla ist vorhanden then
me.quit
end if
ende der fahnenstange

p.s. ich hab schon am anderen ende der edv telefonleitung gesessen .. danach klopfen sich alle auf die schultern und beglückwünschen sich was sie doch alle für riesenkönner sind und diese db möchtegerns doch für deppen ...
DIE WELT IST EBEN -.... GEMEIN! :)

Scorefun
05.07.2001, 07:30
Hi Ohnesorg,

bzgl. des Servernamens koenntest Du doch auch mal versuchen, den UNC-Pfad des Netzlaufwerkes zu ermitteln auf dem Deine User arbeiten: http://www.mvps.org/access/api/api0003.htm

z.B. mit fgetUNCPath("e:")
da kommt dann sowas raus wie
\\MeingesuchterServer\pathname

und mit dieser Erkenntnis kommt mit dem Code, den Arno Dir gelinkt hatte http://www.mvps.org/access/api/api0039.htm

fgetservertime("\\MeingesuchterServer")

zumindestens bei mir in der Firma

7/5/2001 08:21:27 AM

als Ergebnis raus.

HTH

Ohnesorg
05.07.2001, 08:35
Hi Folks,

ersteinmal ein herzliches und dickes Dankeschön: DANKESCHÖN!!!!
Ich bin ganz gerührt von dieser Anteilnahme *sniff* und werde mich mal daran setzen und eine Möglichkeit nach der anderen auszutesten. Dauert natürrlich... Sodele...

@Phillip:
Die Idee mit der Datei ist an sich garnicht schlecht, birgt allerdings einen Umweg, den ich nur im alleräußersten Notfall verwenden möchte.
Das mit dem Kicken der User geht auch... ähm noch einfacher. Du gehst zu dem Kollegen und trittst ihm in den... Mal im Ernst: In einer kleinen Extratabelle ist ein einziges Feld für einen boolschen Wert. Beim starten der Datenbank wird ein Formular mit der Eigenschaft "Hidden" geladen. Alle... sagen wir mal 2 Sekunden aktualisiert sich das Formular und fragt den Wert der Boolean ab. Ist dieser False, passiert weiter nichts. Ist er aber True, wird mit quit() die Datenbank gekickt.... das geht Erfahrunfgsgemäß schneller und es läßt sich wunderbar durch die Backend steuern. ;)

Ich werde aber auf Deinen Tipp zurückkommen, wenn alle Stricke reißen.

Was die EDV angeht... Ich bin bei uns einmal durch UHD (User Helpdesk) gelaufen, der für unsere KollegInnen das "Sorgentelefon" spielt. Was musste ich sehen? Einer war am telefonieren... mit seiner Freundin! Drei waren damit beschäftigt nach dem Umgehen des Bordermanagers, über eine Extraleitung vermutlich, im Internet Pornoseiten anzugucken, wärend die anderen beiden Kollegen sich mit der Moorhuhnjagd vergnügt haben. Und unsereins wundert sich, weshalb im UHD sämtliche Telefone belegt sind! :(

@Ralf:
Hi Ralf,
Das Problem beim aktualisieren des Feldes, muss ebenfalls ein Datum und eine Uhrzeit abgefragt werden. Ändert der User an seiner Workstation das Datum, trägt die Datenbank das Falsche Datum ein. Über die Frontend kann es nicht aktualisiert werden, weil das Tool nur dann in Aktion treten kann, wenn ich nicht mehr da bin und die Backend nicht mehr direkt gesteuert werden kann.
Ich bedanke mich dennoch für Deine Hilfe und den Lösungsansatz recht herzlich.


@Scorefun
Hi,
eigentlich seltendämlich... ich spreche von mir! Bei der Flut an APIs und sonstigen Funktionen und Lösungen noch durchzublicken, ist es kein Wunder, dass da mal was übersehen wird. Gerade dann, wenn der Zeitdruck zu große ist. Ich werde Deinen Tipp mal austesten.
Danke Dir recht herzlich dafür! :D

* * * * * * *

Sodele... werde ich mal ans Testen gehen... :D *freu*
Selbstverständlich werde ich - sofern eine (für mich idioten-) sichere Lösung gegeben ist - den Lösungsweg hier nochmal veröffentlichen so mit Quelltext, Quellenangabe und so... :)

Wile E G
05.07.2001, 12:57
hi ohnesorg
überleg dir das mit der datei aufn server kopieren nochmal.
wenn du die das datum/uhrzeit haben willst,
kopiere eine winzige datei auf den server, frage deren erstellungsdatum und uhrzeit ab(wird beides gespeichert) und lösche die datei wieder. und das wiederholst du so alle 5 minuten. so bekommst du ein aktuelles datum + uhrzeit!
gruß wile e.g.
(allerdings ist mir klar, dass die lösung mit der server ipadresse !wesentlich! stilvoller ist, aber was machst du, wenn sich die ipadresse mal ändern sollte? (wenn die edv gemein sein will, dann kann sie verdammt viel arbeit und ernergie hineinstecken, sie sind ja auch nur menschen ;) )

volkmar
05.07.2001, 14:18
Ist ja eine wahnsinnige Korrespondenz,aber eigentlich geht es ganz einfach auf einem NT-Server.Ich lege den net time-Befehl
" net time\\servername /set/yes " in das
Anmeldescript des Logins auf dem Server.
Damit wird die Zeit für jeden lokalen PC beim
Einloggen übernommen und sollte auch gehen,wenn die Netbefehle für die Pc's gesperrt sind.
Volkmar

holgii
05.07.2001, 14:53
Hallo Volkmar,

leider ist Ohnesorg nicht in der DV-Abteilung...
Und wie er schreibt, sind sie dort alles andere, als kooperativ...

Gruß
holgii

Phillip-Berlin
05.07.2001, 18:10
@ohnesorg
das ist richtig mit der backend ... aber wir fernadministrieren .. da bietet es sich an einfach eine kleine datei auf den server zu schmeissen und dann gaaaanz in ruhe die dbs runterzuladen .. der user wird freundlichst um geduld gebeten .. per grell blinkendem popup :)

Ohnesorg
06.07.2001, 07:47
Hi!!

Die Sache hat sich erledigt...
Hier der Lösungsweg:
Auf einem der Server unserer Firma werden die ganzen Datenbanksysteme untergebracht (wusste ich auch noch nicht)
Dieser Server läuft definitiv 24 Stunden am Tag und sieben Tage die Woche.
Auf diesem Server läuft ganztätig ein Script, welches die Datenbanksysteme mit Informationen beliefert... Welcher User ist unter welcher IP eingeloggt, wieviele Anrufer befinden sich zur Zeit in der Warteschleife, Welcher Tag ist gerade und ... welches Datum haben wir.

Ich habe heute einen Termin mit der Abteiungsleitung der EDV und ich werde versuchen auf dem (langen) Dienstweg in das Script aufgenommen zu werden... vor allem, weil dieses Script in eine beliebige Tabelle schreiben kann und alle 20 Sekunden aktualisiert. *freu*

Die Sache mit net time ... kann von meinem Rechner aus tatsächlich nicht gestartet werden, da ich keine Berechtigung besitze Net - Dienste zu starten. egoistische EDV!! :(
Zum Thema EDV (und andere Sitlblüten und Erlebnisse) schaut doch mal hier nach: EDV vs User (http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=62542)