AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbankzugriff mit Dienst übers Netzwerk funtioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbankzugriff mit Dienst übers Netzwerk funtioniert nicht

Ein Thema von Nico B. · begonnen am 12. Mär 2010 · letzter Beitrag vom 22. Mär 2010
Antwort Antwort
Nico B.

Registriert seit: 16. Okt 2006
Ort: Riesa
67 Beiträge
 
Delphi XE7 Enterprise
 
#1

Datenbankzugriff mit Dienst übers Netzwerk funtioniert nicht

  Alt 12. Mär 2010, 09:29
Datenbank: Access • Version: 97 • Zugriff über: ADO-Komponenten
Hallo Leute,

ich bin echt am verzweifeln.
Seit Tagen habe ich folgendes Problem:

Ich habe einen Server S auf dem ein von mir geschriebener Dienst läuft.
Dieser Dienst soll mit ADO-Komponenten auf eine Access Datenbank auf einem Rechner A zugreifen.
Der Dienst meldet sich an dem Server unter dem Benutzernamen paz an.
Der Benutzername unter dem der Rechner A läuft lautet KR.
Die Access-Datenbank ist nicht von mir. Ich kann sie auch nicht anpassen. Der Datenbank-User heißt admin. Ein Passwort ist nicht vergeben.

Der Verbindungsaufbau läuft folgendermaßen:
Delphi-Quellcode:
ADOConnection.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User=admin;DataSource=\\IP_Rechner_A\mdhprogs\KR_HOST.mdb;Mode=Share Deny None;Persist Security Info=False;';
ADOConnection.LoginPromt:=false;
ADOConnection.Connected:=true;
Der Verbindungsaufbau scheitert. Ich erhalte folgende Fehlermeldung:
Das Microsoft Jet-Datenbankmodul kann die Datei '\\IP_Rechner_A\mdhprogs\KR_HOST.mdb' nicht öffnen. Sie ist bereits von einem anderen Benutzer exclusiv geöffnet, oder Sie benötigen eine Berechtigung, um die Daten lesen zu können.

Prinzipiell sollte es jedoch funktionieren.
Ich habe den Datenbankzugriff so bereits in einem normalen Programm (kein Dienst) realisiert und er hat super funktioniert.
Weiterhin läuft der Datenbankzugriff, wenn ich den Dienst beim Server unter dem User Administrator anmelde.

Hat jemand von euch eine Ahnung wie ich mein Problem lösen kann?
Nico Bäger
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

Re: Datenbankzugriff mit Dienst übers Netzwerk funtioniert n

  Alt 12. Mär 2010, 10:18
Hallo,

Dienste laufen normalerweise unter einem entsprechenden Konto, dass nicht über alle möglichen Rechte verfügt.

Um auf Resourcen im Netz zugreifen zu können, solltest Du den Dienst unter einem Konto laufen lassen, dass auf die benötigten Resourcen Zugriff hat. Alternativ könntest Du dem Dienstekonto die entsprechenden Rechte einräumen.

Hier musst Du für Dich entscheiden, welcher Weg der sicherste und am einfachsten zu handhabende Weg ist.

Bei Deiner Konstellation solltest Du darauf achten, dass auf Laufwerksebene bereits ein Zugriff für den Dienst möglich ist, eventuell könntest Du mit dem Dienst eine eigene Laufwerksverbindung mit Net Use herstellen. Wie das mit Delphimitteln geht, solltest Du hier im Forum finden.
  Mit Zitat antworten Zitat
Nico B.

Registriert seit: 16. Okt 2006
Ort: Riesa
67 Beiträge
 
Delphi XE7 Enterprise
 
#3

Re: Datenbankzugriff mit Dienst übers Netzwerk funtioniert n

  Alt 12. Mär 2010, 11:13
Hallo nahpets,

der Benutzer paz ist auch Administrator an meinem Server.
Damit sollte mein Dienst also alle notwendigen Rechte haben.
Ich kann auch mit dem Nutzer paz auf das Verzeichnis zugreifen in dem die Access-DB liegt.

Meinst du wirklich, dass das an dem UNC-Pfad liegt?
Unter der gleichen Konstellation nur eben mit dem Administrator-Konto funktioniert der Zugriff ja auch.
Ich habe aber auch schon überlegt ein Netzlaufwerk zu verbinden, so weit ich mich schlau gemacht habe, funktioniert das aber erst nach einer Benutzeranmeldung. Ich möchte zukünftig aber, dass der Dienst funktioniert auch ohne das sich jemand an meinem Server anmeldet.

Das ist eine echt verzwickte Sache.
Nico Bäger
  Mit Zitat antworten Zitat
Nico B.

Registriert seit: 16. Okt 2006
Ort: Riesa
67 Beiträge
 
Delphi XE7 Enterprise
 
#4

Re: Datenbankzugriff mit Dienst übers Netzwerk funtioniert n

  Alt 12. Mär 2010, 11:39
Hey Leute,

hab gerade in meinen Dienst eine Abfrage auf FileExists eingebaut, die prüft, ob mein Dienst die \\IP_Rechner_A\mdhprogs\KR_HOST.mdb überhaupt sieht.

Und ich bin ja aus allen Wolken gefallen. Obwohl sowohl Administrator als auch paz beide in der Administratorengruppe sind, sieht der Dienst die Datei nur, wenn er unter dem Administratorenkonto läuft.

Scheinbar haben meine beiden Nutzer also trotz allem unterschiedliche Rechte.
Weiß jemand von euch, welches Recht meinem paz fehlt und wie ihm dieses Recht geben kann?
Nico Bäger
  Mit Zitat antworten Zitat
Nico B.

Registriert seit: 16. Okt 2006
Ort: Riesa
67 Beiträge
 
Delphi XE7 Enterprise
 
#5

Re: Datenbankzugriff mit Dienst übers Netzwerk funtioniert n

  Alt 15. Mär 2010, 08:27
Hallo Leute,

neue Woche neues Glück.

Hat jemand eine Idee wie ich mein Problem lösen kann?
Nico Bäger
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Datenbankzugriff mit Dienst übers Netzwerk funtioniert n

  Alt 15. Mär 2010, 18:28
Hi,

versuche mal dies:

Im Explorer Datenbankeigenschaften->Sicherheit->Hinzufügen Domänencomputer/Netzwerkdienst,
Rechte auf Ändern.

Auf dem Server S, den Dienst als Lokaler Dienst/Netzwerkdienst laufen lassen.

Den Benutzernamen usw. kannst du dann weglassen. Was nun besser geht Domänencomputer oder Netzwerkdienst
musst du sehen, da ich es im Moment nicht prüfen kann. Sollte aber klappen.

Viele Grüße
  Mit Zitat antworten Zitat
Nico B.

Registriert seit: 16. Okt 2006
Ort: Riesa
67 Beiträge
 
Delphi XE7 Enterprise
 
#7

Re: Datenbankzugriff mit Dienst übers Netzwerk funtioniert n

  Alt 16. Mär 2010, 07:33
Hallo Alter Mann!

Wie meinst du das?
Zitat:
Im Explorer Datenbankeigenschaften->Sicherheit->Hinzufügen Domänencomputer/Netzwerkdienst,
Rechte auf Ändern.
Soll ich im Windows Explorer auf die mdb-Datei rechtsklicken? Oder soll ich das irgendwie im Access machen?
Nico Bäger
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

Re: Datenbankzugriff mit Dienst übers Netzwerk funtioniert n

  Alt 16. Mär 2010, 08:29
Hallo,

habe bei einem Dienst mal eine Lösung der folgenden Art eingebaut:
Delphi-Quellcode:
function NetzlaufwerkVerbinden(Laufwerk: string;
                               Pfad: string;
                               Username: string;
                               Password: string;
                               RestoreAtLogon: Boolean) : DWORD;
var
  NetResource: TNetResource;
  dwFlags: DWORD;
begin
  with NetResource do begin
    dwType := RESOURCETYPE_DISK;
    lpLocalName := PChar(Laufwerk);
    lpRemoteName := PChar(Pfad);
    lpProvider := nil;
  end;
  if (RestoreAtLogon) then dwFlags := CONNECT_UPDATE_PROFILE else dwFlags := 0;
  Result := WNetAddConnection2(NetResource, PChar(Password), PChar(Username), dwFlags);
end;

function NetzlaufwerkTrennen(Laufwerk : String) : DWord;
begin
  Result := WNetCancelConnection(PChar(Laufwerk),true);
end;
Der Aufruf im Dienst kann dann in der folgenden Form erfolgen:
Delphi-Quellcode:
Var
          ini : TIniFile;
          sFreigabe : String;
          sUsername : String;
          sPassword : String;
          bNetUse : Boolean;
begin
  ini := TIniFile.Create(ChangeFileExt(ParamStr(0),'.ini'));
  sFreigabe := ini.ReadString('Netzverbindung','Freigabe','');
  sUsername := ini.ReadString('Netzverbindung','Username','');
  sPassword := ini.ReadString('Netzverbindung','Password','');
  // Prüfen, ob die gewünschte Laufwerksverbindung schon existiert.
  bNetUse := FileExists('b:\nul');
  if Not bNetUse then begin // Wenn nein
    bNetUse := NetzlaufwerkVerbinden('b:',sFreigabe,sUsername,sPassword,false) = 0;
    Case bNetUse of
      true : Logger.Log('Laufwerksverbindung konnte erstellt werden.');
    else
      Logger.Log('Es konnte keine Laufwerksverbindung nach ' + sFreigabe + ' erstellt werden.');
    End;
  end else begin
    Logger.Log('Es wird die bereits existierende Laufwerksverbindung zu Laufwerk b: genutzt.');
  end;
  if bNetUse then begin
  // Das, was Dein Programm machen soll
   ...
Hierbei wird davon ausgegangen, dass der Laufwerksbuchstabe B: frei ist und uneingeschränkt für eigene Zwecke genutzt werden kann.
Bei dieser Methode muss der Benutzer, unter dessen Anmeldung der Dienst läuft, keine Rechte im Netz haben. Die für die Laufwerksverbindung erforderlichen Benutzerinformationen werden einer INI-Datei entnommen. Das Verzeichnis mit der Accessdatenbank muss über eine Freigabe verfügen, z. B.: "\\Datenbankrechner\Accessverzeichnis" und es muss einen Benutzer mit für die Arbeit ausreichenden Rechte geben. Freigabe, Benutzer und Passwort sind in der INI-Datei zu hinterlegen.
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: Datenbankzugriff mit Dienst übers Netzwerk funtioniert n

  Alt 16. Mär 2010, 18:20
Hi

Zitat:
Soll ich im Windows Explorer auf die mdb-Datei rechtsklicken?
Ja.
  Mit Zitat antworten Zitat
Nico B.

Registriert seit: 16. Okt 2006
Ort: Riesa
67 Beiträge
 
Delphi XE7 Enterprise
 
#10

Re: Datenbankzugriff mit Dienst übers Netzwerk funtioniert n

  Alt 22. Mär 2010, 14:50
So Leute,

ich hatte jetzt endlich Zeit mich wieder mit dem Problem zu beschäftigen.
Ich habe davon abgesehen, meinen Quellcode zu ändern und stattdessen, den Nutzer paz auch auf dem Rechner A eingerichtet.
Nun kann ich meinen Dienst auf dem Server unter diesem Benutzernamen starten und es funktioniert.

Vielen Dank für eure Hilfe.
Nico Bäger
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz