Einzelnen Beitrag anzeigen

Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#20

Re: Login-Funktion: nur ein Benutzer mit bestimmten Zugangsd

  Alt 22. Aug 2005, 16:14
Zitat von romber:
doch wie kann ich den Inhalt der Spalten für meinen Zweck benutzen?
Die Spalten, die dich interessieren werden, sind:
  • hostname
  • program_name
  • nt_username
  • loginame
Bei program_name möchte ich noch bemerken, dass da nur was erscheint, wenn du in den Projektoptionen deines Delphi Programms die Versionsinfo mit reinkompilierst, und unten in der Liste einen Wert für Produktname setzt.

loginame ist der Login, mit dem du dich in der Datenbank einloggst. Vorausgesetzt, du nutzt die Windowsauthentifizierung beim SQL Server... Da steht dann sowas wie computername\windowslogin

Mit diesen beiden Spalten hast du doch sämtlich Informationen, die du brauchst. Um deinen Windowslogin im Delphi rauszufinden, kannst du mal die Forensuche bemühen, da sollte sich was finden lassen, ansonsten, kuck dir die beigelegte Komponente mal an. Beim Programmstart verbindest du dich mit dem SQL Server, in eine x-beliebige Datenbank. Sollte nach Möglichkeit eben nicht die Master Datenbank sein. In deiner Datenbank erstellst du eine View
SQL-Code:
create view vwLogins as
select hostname, program_name, nt_username, loginame from master.dbo.sysprocesses
where program_name='Dein Programmname'
wobei 'Dein Programmname' dem Produktnamen in den Delphi Projektoptionen entsprechen muss. Diese View muss also nicht in der Master Tabelle erzeugt werden. Auf diese View gibst du lediglich Lesezugriff für all deine Benutzer im Netz.

Zitat von romber:
Den Datensatz wird doch einfach so erstellt, sobald eine Anwendung mit dem MSSQL Server verbindet.
Korrekt... Und um jetzt zu prüfen, ob die Anwendung schon sonstwo läuft, zählst du einfach die Records aus deiner View, die deinem nt_username entsprechen. Ist die Anzahl 1, so bist du der erste. Ist sie grösser eins, so läuft die Anwendung bereits.


Zitat von romber:
Habe versuch, ein Paar neuen Spalten in der Tabelle zu erstellen um dann damit etwas anzufangen, doch das ging nicht.
Böser Fehler... sysprocesses ist eine Systemtabell vom SQL Server, und da fummelt man nicht dran rum. Würd mich wundern, wenn du da überhaupt was ändern darfst.

Also nochmal zusammengefasst... Lege dir eine Datenbank an, erstelle die besagte View, und vergib die Recht an deine Domain User im SQL Server auf diese View. Bei deinem Programmstart verbindest du dich einfach mit der Datenbank. Wenn alles korrekt konfiguriert ist, brauchst du dazu kein Login und Passwort, da der Windowsaccount dafür benutzt wird. Fehlt das schon fehl, weil du diesem Windowsaccount nicht erlaubst, in die DB einzuloggen, kannst du ja schon gleich den Programmstart verweigern. Ansonsten zählst du die Records in der View die deinem nt_usernam entsprechen, also etwa

select count(*) as N from vwLogins where nt_username='DeinWindowsLogin' Ist N=1, so darfst du das Programm starten. Ist N > 1, halt nicht.
Angehängte Dateien
Dateityp: zip wininfo_141.zip (2,1 KB, 16x aufgerufen)
  Mit Zitat antworten Zitat