none
Datenbankzugriff auf MSSQL 2008 Express (Windowsauthentifizierung) von einem Webservice (*.asmx) auf dem IIS 7 RRS feed

  • Frage

  • Hallo.

    Ich hab einen Webservice (ASP.NET/C#), der auf eine Datenbank zugreift, in mehreren Versionen mit verschiedenen Datenbanken geschrieben:

    • Access (windows-authentifizierung)
    • Firebird 2.5 (Sql-authentifizierung)
    • MS SQL Server 2008 Express (windows-authentifizierung)

    Beim Debugging (VS 2008) liefen alle drei Versionen wie gewünscht. Da es ein Webservice startet ja Visual Studio den eingebauten Webserver Cassini.

    Aber nachdem ich den Webservice auf Localhost (IIS 7-Webserver) veröffenticht / deployed hatte, funktionierte der DB-Zugriff auf den MS SQL Server und auf die Firebird-Datenbank nicht mehr.

    Es gab eine SQL-Exception, da sich die ASP.NET-Anwendung auf dem IIS mit einem anderen Benutzerkonto anzumelden versucht, obwohl ich beim ConnectionString "Integrated Security=true" und "User Instance=true" gesetzt habe.

    Die Anwendung läuft auf einem Rechner in einem Netzwerk mit Domain Controller, aber ich hab's auch bei mir zuhause auch ohne Domänencontroller versucht. Und da ging's auch nicht.

    ConnectionString MS SQL 2008 Express:

     

    Data Source=.\SQLEXPRESS;AttachDbFilename=C:\inetpub\wwwroot\App_Data\DatenFabrik.mdf;Integrated Security=True;User Instance=True;

     

    ConnectionString Firebird 2.5:

    User ID=sysdba;Password=12345;Database=localhost:C:\inetpub\wwwroot\App_Data\DB99.FDB;DataSource=localhost;Charset=UTF8

    Zusammengefasst kann man sagen:

    Nach dem Deployment auf den IIS 7 (Localhost) funktionierte der Datenbankzugriff aufgrund von fehlenden Benutzerrechten für den SQL-Server nicht mehr.

    Außer bei der Access-DB: Da ging's sowohl beim Debugging auf Visual Studio / Cassini, als auch auf dem IIS 7.

     

    Please help!

     

     

    Freitag, 24. September 2010 08:38

Antworten

  • Hallo,

    Benutzerinstanzen sind nur bedingt für den Einsatz in Web-Szenarien geeignet,
    aus Herstellen einer Verbindung mit SQL Server Express-Benutzerinstanzen (ADO.NET)

     

    dediziertes ASP.NET-Hosting mit Windows-Authentifizierung:
    Eine einzelne SQL Server Express-Instanz kann in einem Intranet gehostet werden.
    Die Anwendung stellt die Verbindung über das ASPNET-Windows-Konto und nicht durch einen Identitätswechsel her.
    Benutzerinstanzen dürfen nicht in Drittanbieterszenarios oder Szenarios mit gemeinsamem Hosting verwendet werden,
    in denen alle Anwendungen dieselbe Benutzerinstanz nutzen und damit nicht mehr voneinander isoliert sind.

    Wie dort zu lesen, findet der Zugriff dort über das ASP.NET Benutzerkonto statt.
    Sinnvoller ist im allgemeinen die Datenbank an die SQL Server (Express) Instanz anzufügen.
    Und ein SQL Server Standard-Benutzerkonto zu verwenden, will man nicht mit Windows Authentifizierung arbeiten
    siehe Authentication in ASP.NET: .NET Security Guidance (für Firebird m. W. keine Option, Access definitiv nicht).

    Sowohl die Denste (SQL Server, Firebird) mußt Du sicherstellen, dass die Dienstkonten,
    Zugriff auf die Datenbankdateien haben. Für SQL Server siehe Trennen und Anfügen von Datenbanken

    Gruß Elmar

     

    Donnerstag, 30. September 2010 09:39

Alle Antworten

  • Hallo,

    Benutzerinstanzen sind nur bedingt für den Einsatz in Web-Szenarien geeignet,
    aus Herstellen einer Verbindung mit SQL Server Express-Benutzerinstanzen (ADO.NET)

     

    dediziertes ASP.NET-Hosting mit Windows-Authentifizierung:
    Eine einzelne SQL Server Express-Instanz kann in einem Intranet gehostet werden.
    Die Anwendung stellt die Verbindung über das ASPNET-Windows-Konto und nicht durch einen Identitätswechsel her.
    Benutzerinstanzen dürfen nicht in Drittanbieterszenarios oder Szenarios mit gemeinsamem Hosting verwendet werden,
    in denen alle Anwendungen dieselbe Benutzerinstanz nutzen und damit nicht mehr voneinander isoliert sind.

    Wie dort zu lesen, findet der Zugriff dort über das ASP.NET Benutzerkonto statt.
    Sinnvoller ist im allgemeinen die Datenbank an die SQL Server (Express) Instanz anzufügen.
    Und ein SQL Server Standard-Benutzerkonto zu verwenden, will man nicht mit Windows Authentifizierung arbeiten
    siehe Authentication in ASP.NET: .NET Security Guidance (für Firebird m. W. keine Option, Access definitiv nicht).

    Sowohl die Denste (SQL Server, Firebird) mußt Du sicherstellen, dass die Dienstkonten,
    Zugriff auf die Datenbankdateien haben. Für SQL Server siehe Trennen und Anfügen von Datenbanken

    Gruß Elmar

     

    Donnerstag, 30. September 2010 09:39
  • Hallo,

    vielen Dank für Deine Antwort.

    Da ich mittlerweile mit der Firebird-Datenbank gut zurecht komme,

    hab ich diese genommen.

    Dabei hab ich auf die Windows-Authentifizierung (falls sie überhaupt möglich ist) verzichtet

    und den Zugriff über die SQL-Authentifizierung erledigt.

    Jetzt klappt alles wunderbar.

    Aber dennoch sind Deine Hinweise für mich Gold wert,

    da ich jetzt genauer weiß,

    wo man die Antworten auf meine Fragen suchen muss.

    Ich hab diesen Monat 'ne Stelle als Anwendungsentwickler bekommen 

    und muss diese Dinge gut drauf haben.

    Vielen Dank für Deine Hilfe!

    Wird nicht lange dauern und ich bin wieder mit einer neuen Frage hier,

    um meinen Wissensdurst zu stillen.

    Donnerstag, 7. Oktober 2010 15:44