Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[VB.NET 2005] Window Service security probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik probeer om een window service te maken die elke dag in de database kijkt of er bij de datum van vandaag records zijn die dan moeten worden weergegeven. ik heb een goede tutorial gevonden en die grotendeels aangehouden: http://www.devcity.net/PrintArticle.aspx?ArticleID=190.
ik heb het project lokaal gemaakt en gepublished en via die bat file op bovenstaande site geinstalleerd, vervolgens start ik de service en dan krijg ik deze foutmelding:

The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security.

Ik heb daarnaar gegoogled en vond een aantal redenen: dat ik niet genoeg lokale rechten heb op de pc, maar ik ben lid van de administators groep. Een andere mogelijke oplossing zou zijn om in je registry de eventlog permissions moest upgraden naar read rechten, dat heb ik ook geprobeerd, dat hielp ook niet.
Bij ServiceProcessInstaller heb ik de account op NetworkSystem gezet. Als ik deze op localsystem zet is mijn eerste probleem opgelost. Maar dan komt mijn volgende probleem waarvoor ik deze post eigenlijk start en dat is deze melding:

The Microsoft Jet database engine cannot open the file 'databaselocatie\dbnaam.mdb'. It is already opened exclusively by another user, or you need permission to view its data.

Deze ontstaat bij het openen van de database verbinding, ik heb het op de volgende manier gedaan:

Visual Basic .NET:
1
2
3
Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaselocatie\dbnaam.mdb;")
Dim cmd As New OleDbCommand(" SELECT COUNT(*) FROM tabel WHERE datum = #" & Date.Today.ToShortDateString & "#", cn)
cn.Open()


Zowel bij networksystem als localsystem geeft ie deze foutmelding en de database staat op een server, maar wordt door niemand exclusief geopend of iets.

Ik hoop dat iemand mij op weg kan helpen of een oplossing weet voor dit probleem

Verwijderd

Topicstarter
ook als ik met file.exists("locatie-op-de-server\test.txt") test of een bestandje op de server aanwezig is die wel bestaat geeft ie schrijft ie false weg naar de log, dat doet ie zowel met localservice als networkservice account. lokaal bestandje vindt ie wel. het is dus sowieso een security permissions issue. dit als extra informatie op bovenstaande bericht

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 29-11 17:06
Het lijkt mij een kwestie van de account waaronder de service draait rechten te geven op de map waar de database in staat. Als hij geen rechten heeft, dan mag hij dus ook de database niet openen.

Hail to the king baby!


Verwijderd

Topicstarter
urk_forever schreef op dinsdag 23 oktober 2007 @ 12:36:
Het lijkt mij een kwestie van de account waaronder de service draait rechten te geven op de map waar de database in staat. Als hij geen rechten heeft, dan mag hij dus ook de database niet openen.
mijn account waaronder ik ingelogd bent heeft voldoende rechten op die map, anders zou ik die database ook niet kunnen aanmaken of die tekst file niet kunnen aanmaken en verwijderen.
met normale vb.net projecten maak ik ook een connectie naar die map voor databases, alleen daar staan de projecten ook op de server, nu draait het window service project lokaal. dat zou ook het probleem kunnen zijn, maar wat is daar de oplossing voor ?

Als ik de database lokaal zet dan werkt het wel.

[ Voor 3% gewijzigd door Verwijderd op 23-10-2007 12:43 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 23 oktober 2007 @ 12:39:
[...]
mijn account waaronder ik ingelogd bent heeft voldoende rechten op die map, anders zou ik die database ook niet kunnen aanmaken of die tekst file niet kunnen aanmaken en verwijderen.
Dat boeit helemaal niet (hoe je ingelogd bent), het gaat om de account waar de service onder draait. Dubbelklik je service en kijk op het 2e tabblad. Een service staat per definitie los van een al dan niet ingelogde gebruiker.

[ Voor 15% gewijzigd door RobIII op 23-10-2007 12:44 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 29-11 17:06
Jou account wel, maar het NETWORK account bijvoorbeeld niet. Om te testen kan je bijvoorbeeld de service onder jouw account laten draaien. Dan weet je zeker dat daar de problemen liggen.

Hail to the king baby!


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:14
LocalNetwork zal in de 'Local Network' security zone draaien, en deze heeft dus geen rechten om bij fileshares bv te komen ....


ook even kijken naar geparametriseerde queries

[ Voor 19% gewijzigd door whoami op 23-10-2007 12:49 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
RobIII schreef op dinsdag 23 oktober 2007 @ 12:43:
[...]

Dat boeit helemaal niet, het gaat om de account waar de service onder draait.
Ik heb gekeken in de properties van de service en daar stond een Local_Service account.
Ik heb deze aangepast naar mijn account op de server die dus rechten heeft op die database map
en toen de service opnieuw gestart en toen kreeg ik weer diezelfde foutmelding. Ik heb de ProcessInstaller account op netwerkservice staan. Ik heb bij die service properties tabblad log on ook een netwerkservice account, moet ik die dan proberen ? ik weet alleen daar het wachtwoord niet van.

Verwijderd

Topicstarter
whoami schreef op dinsdag 23 oktober 2007 @ 12:48:
LocalNetwork zal in de 'Local Network' security zone draaien, en deze heeft dus geen rechten om bij fileshares bv te komen ....


ook even kijken naar geparametriseerde queries
oke, maar ik heb nu mijn server account genomen die dus wel server rechten heeft en nu werkt het nog niet, krijg ik nog dezelfde foutmelding. waar kan het nog meer inzitten ?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gebruik a.u.b. de edit-knop (Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/tweakers/images/icons/edit.gif) als je iets toe te voegen hebt in plaats van achter elkaar te posten.

[ Voor 34% gewijzigd door RobIII op 23-10-2007 12:54 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Mag ik vragen waarom je voor een dagelijkse check een windows service schrijft? Waarom start je het programma niet gewoon via de task schedular? Die heeft Microsoft speciaal voor jouw gemaakt om op vaste tijden een programma te starten. Window services worden voornamelijk gebruikt voor het schrijven van servers of programma's die op basis van een event (bijv. FileSystemWatcher) een aktie moeten uitvoeren.

En wat is eigenlijk de database lokatie? Als je rechten problemen of foutmeldingen krijgt betreffende een bestand helpt het niet echt dat je als bestandsnaam 'databaselocatie\dbnaam.mdb;' doorgeeft. Staat deze bij jouw op de C:\ drive, of staat deze op een windows share? In het tweede geval, wat zijn dan zowel de rechten op de share en de directory waar het mdb bestand staat?

Je noemt allerlei problemen en vervolgens geef je aan dat deze al zijn opgelost, maar over het probleem zelf (bestand kan niet worden geopend) geef je totaal geen informatie.

If it isn't broken, fix it until it is..


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:45

TeeDee

CQB 241

Dus: Maak even voor jezelf een overzicht waar je je applicatie hebt draaien, waar je Access file staat en welke rechten je aan je applicatie hebt toegekend.

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
het is gewoon een test om wat meer over window services te leren. de database locatie is een locatie op server, \\server\databases bijvoorbeeld. het is een windows share ja en mijn account heeft gewoon read and write rechten op die map. Ik noem 2 problemen waarvan ik er 1 zelf opgelost heb ja en die ander ik zelf niet uitkom. En ik heb de info gegeven die ik heb, de foutmelding + de source code waardoor het ontstaat. Wat wil je nog meer weten dan ? je weet wat voor applicatie het is, waarde database staat, wat de rechten zijn, wat de foutmelding is, wat de source code is. Ik denk dat ik aardig wat info heb gegeven.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:45

TeeDee

CQB 241

En heeft jouw applicatie nu dus genoeg rechten om op de windows share te komen?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 23 oktober 2007 @ 13:01:
het is gewoon een test om wat meer over window services te leren. de database locatie is een locatie op server, \\server\databases bijvoorbeeld. het is een windows share ja en mijn account heeft gewoon read and write rechten op die map.
Maar \\server is standaard niet opgenomen in de trust zone he? ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
En heeft jouw applicatie nu dus genoeg rechten om op de windows share te komen?

blijkbaar niet anders kwam ie niet met die foutmelding.

Maar \\server is standaard niet opgenomen in de trust zone he?

nee, dat zou dan de oplossing zijn. alleen hoe realiseer ik dat ? stel je dat lokaal in of op de server ? en doe je dat met die .net framework 2.0 configuration uit je administration tools ?
Ik heb in het project zelf wel aangevinkt: this is a full trust application.

[ Voor 32% gewijzigd door Verwijderd op 23-10-2007 13:18 ]


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:45

TeeDee

CQB 241

Verwijderd schreef op dinsdag 23 oktober 2007 @ 13:06:
blijkbaar niet anders kwam ie niet met die foutmelding.
Dus, zorg je dat je je rechten goed zet.

Of je checkt even of het gaat werken als je het e.e.a. Trust.
Of je gaat met Impersonation aan de slag.
Verwijderd schreef op dinsdag 23 oktober 2007 @ 13:53:
[...]
Als ik die impersonation class dan aanmaak moet ik die dan aanroepen met username, password en domain voordat ik de database connectie maak ?
Probeer eens wat dingen zou ik zeggen. Persoonlijk denk ik dat je beter je rechten (of je Trust) goed kan zetten dan in VB.net code Impersonation te gaan implementeren.

[ Voor 35% gewijzigd door TeeDee op 23-10-2007 13:59 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
Als ik die impersonation class dan aanmaak moet ik die dan aanroepen met username, password en domain voordat ik de database connectie maak ?

Verwijderd

Topicstarter
is het niet zo dat ik de window service verkeerd toepas ?
moet je niet de window service op de server laten draaien met de database connectie
en dan een client een request ofzo laten doen naar die service die op de server draait en dat die
dan de data retouneert ? beetje het principe van sql server. je maakt verbinding die die sql server (service) en je vraagt data aan hem en hij geeft het terug. is dat niet de werking van een windows service ?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik heb het al eerder gezegd en doe dat nu voor de laatste keer:
RobIII schreef op dinsdag 23 oktober 2007 @ 12:53:
Gebruik a.u.b. de edit-knop ([afbeelding]) als je iets toe te voegen hebt in plaats van achter elkaar te posten.
Zie daarvoor ook topickick binnen 24 uur

Voor de rest zou het je netjes staan als je je eens even zélf verdiept in de materie in plaats van hier door te vragen op antwoorden die we je geven.

[ Voor 25% gewijzigd door RobIII op 23-10-2007 15:09 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:45

TeeDee

CQB 241

Verwijderd schreef op dinsdag 23 oktober 2007 @ 14:23:
is het niet zo dat ik de window service verkeerd toepas ?
moet je niet de window service op de server laten draaien met de database connectie
en dan een client een request ofzo laten doen naar die service die op de server draait en dat die
dan de data retouneert ? beetje het principe van sql server. je maakt verbinding die die sql server (service) en je vraagt data aan hem en hij geeft het terug. is dat niet de werking van een windows service ?
Geen idee.
Maar als jij geen antwoord geeft op openstaande vragen, opmerkingen of überhaupt zelfwerkzaamheid toont wordt het erg lastig. Het is ook erg vervelend dat je meteen een andere vraag neerzet en meteen het onderwerp van een voorgaande vraag teniet doet.

Je zegt dat je bezig bent om het e.e.a. te leren: doe dat dan ook en vraag niet aan ons hapklare brokken.

edit:
right, dit stond al een poosje open... voortaan even refreshen dus...

[ Voor 4% gewijzigd door TeeDee op 23-10-2007 15:26 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Probeer anders eerst eens de mdb op dezelfde machine als de service te zetten en dan te kijken of het werkt.

Verder geef je zelf aan dat het service account NetworkSystem. Jij bent niet NetworkSystem. NetworkSystem (van de machine die bij de share probeert te komen) moet de juiste rechten krijgen.

Een en ander wordt iets eenvoudiger als een domain controller aanwezig is, want dan kun je simpelweg een account speciaal voor de service op de DC aanmaken. Deze user kun je vervolgens read/write rechten geven op de directory EN de share (beide moeten los van elkaar worden gezet) en vervolgens kun je ook de service onder dat account draaien. Het voordeel van een dergelijke user is dat je zelf als die user op een machine (Terminal Service) kunt inloggen en zelf de share proberen te benaderen.

Als alles eenmaal werkt moet je niet vergeten het account zo in te stellen dat het account niet als 'user' account gebruikt kan worden voor Terminal Servicice of console login.

If it isn't broken, fix it until it is..


Verwijderd

Topicstarter
bedankt voor het advies ik ga ermee aan de slag
Pagina: 1