Das Microsoft-Lizenzrecht ist aus Sicht eines Users (und nicht nur für ihn) ein Dschungel aus Berechtigungen und Klauseln. Oftmals stolpert man über die „90 Days reassigned“-Klausel. Während in großen Unternehmen Software zur Lizenzüberwachung zum Einsatz kommt, ist bei kleinen Firmen/Handwerksbetrieben die Überwachung oftmals „händisch“ auszuführen.
„90 Day reassigned“ bedeutet, dass eine Lizenz, die einem User/Gerät zugeteilt wurde, erst nach 90 Tagen wieder für die Verwendung eines anderen Users/Gerätes hergenommen werden darf. Diese Einschränkung findet sich in etlichen Microsoft-Lizenzbestimmungen* wieder und muss auch von verantwortlicher Stelle dokumentiert werden.
* Als Beispiel ein Auszug aus den Lizenzbestimmungen von Office 2010:
„Sie sind berechtigt, die Lizenz beliebig oft einem anderen Gerät neu zuzuweisen, jedoch nicht öfter als einmal alle 90 Tage. Wenn Sie eine Neuzuweisung ausführen, wird das entsprechende andere Gerät das „lizenzierte Gerät“. Wenn Sie das lizenzierte Gerät aufgrund eines Hardwarefehlers außer Dienst stellen, sind Sie berechtigt, die Lizenz früher neu zuzuweisen.“
Hauptsache ist bei dieser Klausel, daß überhaupt dokumentiert wird und weniger in welcher Form.
Hier ein kleiner Lösungsansatz mit HTML(Apache, PHP) und MYSQL. Ich beschränke mich hier auf die minimalsten Angaben, denn dieser Beitrag soll eher als Anregung gesehen werden und nicht als Endlösung.
Die Grundproblematik ist die Berechnung der Zuteilungsdauer.
Hier ein Beispiel der Vorgehensweise.
Errechnen der Differenz von Zuteilungsdatum und dem heutigem Datum geteilt durch 90Tage. Das Ergebnis muss danach auf die nächste Ganzzahl aufgerundet und diese wieder mit 90 multipliziert werden. Damit hat man die, auf je 90 Tage aufgerundete, Zuteilungsdauer mit Bezug auf das Zuteilungsdatum.
Jetzt errechnet man noch das Ablaufdatum in dem man die errechnete Tagesdifferenz auf das Zuteilungsdatum aufrechnet.
Als kleine Fleißaufgabe könnte man dann noch die Differenz zwischen dem heutigem Datum und den errechneten Enddatum ausgeben.
Umsetzung in der Praxis:
Über den phpmyadmin erzeuge ich eine Datenbank und darin eine Tabelle mit 3 Spalten. ID (autoincrement), Name(Text), Zuteilungsdatum (Datum).
Die Datenbank nenne ich MS-Lizenz und die Tabelle MS90D
Und erzeuge einen Eintrag: Name: Hans Meier, Zutrittsdatum 1.1.2015
Aufbau der SQL-Abfrage.
Jetzt errechne ich die Differenz in Tagen zwischen dem Zuteilungsdatum und dem heutigen Datum
1 |
select Name, Zuteilungsdatum, datediff(curDate(),Zuteilungsdatum) AS Ablaufdatum from MS90D |
1 |
select Name, Zuteilungsdatum, datediff(curDate(),Zuteilungsdatum)/90 AS Ablaufdatum from MS90D |
Das Aufrunden erledige ich durch die Nutzung des floor Befehls, welcher die Kommastellen einer Zahl abschneidet. Zum Aufrunden addiere ich dann einfach 1.
1 |
select Name, Zuteilungsdatum, floor(datediff(curDate(),Zuteilungsdatum)/90)+1 AS Ablaufdatum from MS90D |
Dies multipliziere ich jetzt wieder mit 90, um die Anzahl der Tage bis zum Ablauf der Zuteilungsfrist zu errechnen
1 |
select Name, Zuteilungsdatum, (floor(datediff(curDate(),Zuteilungsdatum)/90)+1)*90 AS Ablaufdatum from MS90D |
Diese Tage addiere ich jetzt zu dem Datum der Zuteilung, so erhalte ich das Ablaufdatum der Lizenzzuteilung für diesen User
1 |
select Name, Zuteilungsdatum, date_add(Zuteilungsdatum, Interval ((floor(datediff(curDate(),Zuteilungsdatum)/90)+1)*90)day) AS Ablaufdatum from MS90D |
In einem weiteren Feld könnte ich jetzt noch die Restlaufzeit in Tagen errechnen.
1 |
select Name, Zuteilungsdatum, date_add(Zuteilungsdatum, Interval ((floor(datediff(curDate(),Zuteilungsdatum)/90)+1)*90)day) AS Ablaufdatum, datediff(date_add(Zuteilungsdatum,Interval ((floor((datediff(curDate(),Zuteilungsdatum)/90)+0.01)+1)*90) day),curDate()) AS Resttage from MS90D |
Diese Abfrage lässt sich jetzt in phpmyadmin einfach durch Klick auf „Create View“ eine View (Sicht) erzeugen, welche dann z.B.: in einem Browser abgerufen werden kann. Als Name vergebe ich auf die Schnelle mal „MS90D-View“
Diese Sicht kann auch im phpmyadmin ausgeführt werden und man muss nicht mehr den langen SQL-Code eingeben, um ein Ergebnis zu erhalten.
Zeit, die View noch etwas komplexer zu gestalten.
Jetzt soll noch das Ausscheidedatum mit aufgenommen werden, um Lizenzen welche mehr als 90 Tage nach dem Ausscheidedatum liegen, nicht mehr angezeigt werden.
Hinzufügen der Spalte „Ausscheidedatum“.
Und die Erweiterung des SQL-Befehls
1 |
select Name, Zuteilungsdatum, Ausscheidedatum, date_add(Zuteilungsdatum, Interval ((floor(datediff(curDate(),Zuteilungsdatum)/90)+1)*90)day) AS Ablaufdatum, datediff(date_add(Zuteilungsdatum,Interval ((floor(datediff(curDate(),Zuteilungsdatum)/90)+1)*90)day),curDate()) AS Resttage from MS90D where (Ausscheidedatum is null ) or (date_add(Zuteilungsdatum,Interval ((floor(datediff(Ausscheidedatum,Zuteilungsdatum)/90)+1)*90) day) >= curdate()) |
So werden mir nur noch die Einträge angezeigt, welche
– kein Ausscheidedatum
– ein Ausscheidedatum nach dem heutigen Datum und dem innerhalb der errechneten Vorhaltezeit bei Ausscheiden eines Mitarbeiters bei Ausscheidatum vor dem heutigem Tag
haben.
Letzteres errechne ich, in dem ich nicht das Enddatum zum aktuellen Datum berechne, sondern zum angegebenen Ausscheidedatum.
Kleine Beweisführung:
Ich lege noch 2 weitere User an, jeweils mit dem Eintrittsdatum 1.1.2015. User 1 bekommt als Ausscheidedatum den 20.1.2015 und User 2 den 30.5.2015
Ich erzeuge aus der aktuellen Abfrage eine weitere View mit dem Namen „MS90D-ALL“
Um die Abfrage nun in einer HTML-Seite (oder besser PHP-Seite) abrufen zu können, vergebe ich jetzt die Userrechte im MySQL.
Ein neuer User wird (unter Rechte) angelegt. Ich nenne ihn mal „keiner“ und als Passwort bekommt er „test“
Als datenbankspezifisches Recht bekommt er auf die View „MS90D-ALL“ das „Select“-Recht.
Eine simple Abfrage als Beispiel:
Ich erzeuge eine „index.php“ mit folgendem Inhalt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html; charset=windows-1250" http-equiv="content-type"> <title>MS-Lizenz</title> <?php //Variablen Mysql $sqllink = mysql_connect('localhost','keiner','test') or die ("MySql-Server nicht erreichbar"); //Aufruf der SQL-Datenbank mysql_select_db('MS-Lizenz',$sqllink) or die ("Datenbank nicht erreichbar"); $mslizenzen = mysql_query("SELECT * FROM MS90D-ALL", $sqllink) or die ("Datenzugriff fehlgeschlagen"); $anzdaten = mysql_numrows($mslizenzen); mysql_close($sqllink); ?> </head> <body style="color: rgb(0, 0, 0); background-color: rgb(192, 192, 192);" alink="#000099" link="#000099" vlink="#990099"> <br> <table border=1 cellspacing="0" cellpadding="0" > <tr> <th >Name</th> <th >Eintritt</th> <th >Austritt</th> <th >Resttage</th> </tr> <?php for($i=0;$i < $anzdaten;$i++) { $werte = mysql_fetch_array($mslizenzen); ?> <tr> <td ><small><?php echo $werte[Name]; ?></small></td> <td ><small><?php echo $werte[Zuteilungsdatum]; ?></small></td> <td ><small><?php echo $werte[Ausscheidedatum]; ?></small></td> <td ><small><?php echo $werte[Resttage]; ?></small></td> </tr> <?php } ?> <tr> <td colspan=6 align="center"><?php echo "<small>" . $anzdaten . " Datensätze gefunden.</small>" ?></td> </tr> </table> </body> </html> |
Diese simple Abfrage ist natürlich noch nicht ausreichend um die Dokumentationspflicht der Lizenzen zu erfüllen.
Hierzu gehört eine genauere Angabe des Users, z.B.: mit Personalnummer.
Ebenso sollten die Liste der Lizenzen regelmäßig, oder bei Änderung der Mitarbeiter, ausgedruckt und an Besten noch unterschrieben werden.
Auch sind einzelne Listen für jedes MS-Produkt notwendig (sofern es diese Sperre der 90tägigen Zuteilung verlangt).
Wie Eingangs erwähnt, sollte dies aber eher eine Anregeung sein und keine Endlösung.