Toon posts:

[VB.NET 2005] Applicatie met DB runnen op server

Pagina: 1
Acties:
  • 107 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,

ik heb een vb.net 2005 applicatie ontwikkeld en deze wil ik nu op de andere computers vanaf een server.
De server is Small Business Server 2003 en de clients Win XP.
Via VB.net doe ik het project publishen op de server en dan vanaf een client pc start ik het exe bestand of een van de application bestanden en dan krijg ik gelijk een error:
System.Data.Oledb.OledbException
System.Security.SecurityException
het is een hele lange tekst die je bij mensen met het zelfde probleem veel ziet.
Ik heb ook een setup project gemaakt via vb.net die via een usb stick op de client gezet en geinstalleerd en dan krijg je tijdens opstarten niet de error maar als je een record wil opslaan in de DB en je drukt dus op de knop save dan krijg je alsnog dezelfde error.
Ik heb wat onderzoek gedaan en ik denk dat ik met Assembly dit probleem misschien kan oplossen,
daarmee kan je allerlei zaken instellen m.b.t. de applicatie, zo'n assembly is een onderdeel van een .exe of .dll bestand. Hieronder een interessant stukje over assembly wat ik vond in een boek:

A declarative security request that describes the assembly’s security requirements (the assembly
is responsible for declaring the security it requires). Requests for permissions fall into three categories: required, optional, and denied. The identity information may be used as evidence by the
CLR in determining whether or not to approve security requests.

In de myproject map staan 2 files m.b.t. assemblies:
AssemblyInfo.vb
app.manifest

de AssemblyInfo.vb kan je zaken instellen als titel van de app, copyright, versie enz.
met app.manifest kan je zaken instellen over de security.
in vb.net als je kijkt bij myproject dan op het tabblad appliction heb je bij startup form een knop met assembly information daarmee kan je de properties van die AssemblyInfo.vb instellen.
Als je naar het tabblad signing gaat zie je onderin een checkbox met Sign the Assembly.
Vervolgens kan je daar een key aan meegeven met eventueel paswoord.

In Configuratiescherm - Systeembeheer - .net Framework daar kan je ook dingen instellen m.b.t. de security en applicatie. Alleen daar kreeg ik de foutmelding kan assembly niet vinden.
Dus blijkbaar doet vb.net in mijn applicatie niet goed die app.manifest meenemen in het .exe bestand.

Heeft iemand ervaringen met dit probleem ? Of informatie over die assembly ?
Een oplossing voor een applicatie met DB draaien vanaf een server.
trouwens, een app zonder DB runt wel vanaf de server.
Een goede internetsite is ook zeer welkom met info betreffende dit probleem.
Als 2e oplossing vond ik DCOM and the Machine Debug Manager maar ik kon er niet op uitmaken dat dat een oplossing was voor mijn probleem dat heeft te maken met remote debugging.
Ik hoop dat iemand weet of ik daarmee het probleem kan verhelpen ?
alvast bedankt voor de moeite

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:15
het is een hele lange tekst die je bij mensen met het zelfde probleem veel ziet.
Lees die lange tekst eens.
Assembly dit probleem misschien kan oplossen,
daarmee kan je allerlei zaken instellen m.b.t. de applicatie, zo'n assembly is een onderdeel van een .exe of .dll bestand.
Ik denk dat je je eens eerst moet inlezen in de termen. Een .NET assembly is een DLL of een EXE, ... Jij hebt het waarschijnlijk over de AssemblyInfo.cs file (of .vb file). Daar kan je idd een aantal 'dingen' gaan instellen, zoals version nr, etc... maar daar kan je ook bepaalde attributen gaan definieren die voor je applicatie geldig zijn.

Jij krijgt die exception omdat je applicatie draait op een netwerk-share (waarschijnlijk ? ), en dus draait die applicatie in de 'local network zone'. Die app krijgt dus minder rechten toebedeelt dan mocht je ze vanaf je local computer runnen.

Wat kan je dus doen: mbhv de .NET wizards die je in het config panel vind je applicatie gaan 'trusten', ofwel je .NET security aanpassen.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:15
Ga ook eens na welke rechten je nodig hebt om je applicatie te laten runnen; Waarschijnlijk heb je oa de OleDbPermission nodig.

In de MSDN staat echter dit:
This class is intended for future use when the .NET Framework Data Provider for OLE DB is enabled for partial trust scenarios. The .NET Framework Data Provider for OLE DB currently requires FullTrust permission
(Dit is wel ivm 1.1; ik weet niet hoe het in .NET 2.0 zit)
Dit wil dus zeggen dat je applicatie under full trust moet draaien.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op vrijdag 27 oktober 2006 @ 09:56:
Ga ook eens na welke rechten je nodig hebt om je applicatie te laten runnen; Waarschijnlijk heb je oa de OleDbPermission nodig.

In de MSDN staat echter dit:

[...]

(Dit is wel ivm 1.1; ik weet niet hoe het in .NET 2.0 zit)
Dit wil dus zeggen dat je applicatie under full trust moet draaien.
Ja dat klopt, dat heb ik ook in mijn tekst bovenaan gezegd.
Ik zei ook dat je via .net framework dat kon instellen, alleen het probleem is dat ie elke keer een foutmelding geeft als ik die .exe open van het betreffende project, de foutmelding is:
Unable to load assembly : locatie\bestand.exe
Dus zoals ik al zei denk ik dat vb.net niet goed de assembly in de .exe file stopt.
Dus als dat wel gebeurd dan kan ik idd die app full trust geven.
In vb.net kan je dat ook instellen bij myproject tabblad security en daar geef ik aan FULLTRUST application, maar dat is blijkbaar alleen voor mijn pc en niet voor de andere pc's.

Verwijderd

Topicstarter
Ik vond trouwens ook nog het volgende:
Security Policies: Caspol.exe utility,
Set up overall security policy for utility a machine or user from an operating system level.

Viewing the Permissions.

If you are viewing an assembly's permission sets for diagnostic reasons than you may want to use the -all option with CASPol. You would want to do this because when the assembly is run, its being run by a user. When a user runs a program the machine and user policies are combined including the application domain's policy. Using the -all option lets you see both the user and machine permission sets at the same time.

Dat is een utility van vb.net CASPoll heet het en daarmee schijn je ook permissions te kunnen instellen. Iemand daar ervaringen mee ? het bestand staat in de map van je .net framework.

Verwijderd

Topicstarter
whoami schreef op vrijdag 27 oktober 2006 @ 09:53:
[...]
Lees die lange tekst eens.
[...]

Ik denk dat je je eens eerst moet inlezen in de termen. Een .NET assembly is een DLL of een EXE, ... Jij hebt het waarschijnlijk over de AssemblyInfo.cs file (of .vb file). Daar kan je idd een aantal 'dingen' gaan instellen, zoals version nr, etc... maar daar kan je ook bepaalde attributen gaan definieren die voor je applicatie geldig zijn.

Jij krijgt die exception omdat je applicatie draait op een netwerk-share (waarschijnlijk ? ), en dus draait die applicatie in de 'local network zone'. Die app krijgt dus minder rechten toebedeelt dan mocht je ze vanaf je local computer runnen.

Wat kan je dus doen: mbhv de .NET wizards die je in het config panel vind je applicatie gaan 'trusten', ofwel je .NET security aanpassen.
Die lange tekst heb ik inmiddels 3/4 keer gelezen, zal een paar interessante stukken eruit geven:

System.Data.OleDb.OleDbException: De bewerking moet worden uitgevoerd op een query die kan worden bijgewerkt.

************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll

De app draait idd op een netwerk-share en ik weet dat ik mbhv de .NET wizards die je in het config panel vind je applicatie gaan 'trusten', ofwel je .NET security aanpassen.
Alleen zoals je in mijn reactie op WHOAMI kunt lezen krijg ik daar een foutmelding bij.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:15
Dus zoals ik al zei denk ik dat vb.net niet goed de assembly in de .exe file stopt.
Dus als dat wel gebeurd dan kan ik idd die app full trust geven.
In vb.net kan je dat ook instellen bij myproject tabblad security en daar geef ik aan FULLTRUST application, maar dat is blijkbaar alleen voor mijn pc en niet voor de andere pc's.
Zoals ik al zei: je exe is een assembly. Dat hij gaangeeft dat hij die assembly niet kan vinden, wil wellicht zeggen dat je een verkeerd path opgeeft in die wizard naar je exe.
Als je het via die wizard doet, zal je het trouwens denk ik ook op iedere pc waar die app gaat runnen moeten instellen.
Waarom wil je 'm trouwens vanaf die share loaden ? Kan je het gewoon niet omzeilen door die exe lokaal te kopieren, en 'm dan lokaal op te starten ? Laat je users een batch file opstarten, doe daar een copy, en voer je copy uit.
(Of kijk anders eens naar programma's zoals AutoUpdate+ bv).
System.Data.OleDb.OleDbException: De bewerking moet worden uitgevoerd op een query die kan worden bijgewerkt.
Aha; dat is al heel wat anders, en deze error heb je helemaal niet in je Topicstart opgenomen.
Over welke query gaat het hier ? Een select of een Update ?
Heb jij (je applicatie of de credentials waaronder die app draait) wel rechten om iets aan die DB te veranderen ? Het gaat hier om een access DB vermoed ik ?
Alleen zoals je in mijn reactie op WHOAMI kunt lezen krijg ik daar een foutmelding bij.
op
mijn reactie dus. ;)
Trouwens, we hebben hier ook een mooie edit knop...

https://fgheysels.github.io/


Verwijderd

Topicstarter
ja WHOAMI het gaat op een access DB, is een kleine test, het is een UPDATE.
het is gewoon 1 veld die een string waarde naar de access DB schrijft m.b.v. databinding en een dataset. Lokaal kan ook ja, normaal zit je dan met als je iets update dat ze het dan weer moeten kopieeren, maar dat kan je IDD met een BAT file oplossen. Ik geef 100 % zeker de goede locatie van de .exe file op, want ik selecteer hem via een openfiledialog zeg maar, dus dat kan niet missen eigenlijk.
En de client heeft rechten tot de Map waarin de DB staat. Weet jij wat het verschil is tussen die SETUP project of dat je een project PUBLISH. Want bij de setup krijg ik die fout pas als ie een record naar de DB schrijft en bij de publish krijg ik die fout al als ik de app opstart.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:15
Het gaat om 2 verschillende fouten; die ene fout heeft te maken met het feit dat je applicatie te weinig rechten heeft omdat ze vanop een netwerk-share wordt uitgevoerd, en de CLR die applicatie niet onder 'full trust' laat uitvoeren. Dat is een probleem omdat je blijkbaar voor OleDb toegang full-trust nodig hebt.

Je 2de error is een heel ander probleem, en heeft te maken met het feit dat je geen write - access hebt op je databank.

Waar je in je TS zegt dat je dezelfde error krijgt (publish en setup project), ben je niet juist; het zijn 2 verschillende errors.

En doe eens niet al die CAPS gebruiken; waar je hoofdletters moet gebruiken gebruik je ze niet (begin v/e zin), en verder zet je hier en daar een woord in CAPS. Dat leest irritant.

[ Voor 27% gewijzigd door whoami op 27-10-2006 10:39 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
Oke sorry, zal geen caps meer gebruiken, het was meer ter verduidelijking.
Het rare is dat als ik lokaal inlog via administrator account dat ie het dan wel doet.
Zelfs als ik het project lokaal op de schijf zet doet ie het nog niet. En die .net framework, het trusten van een applicatie werkt ook nog steeds niet. Ik ga effe checken of de user database rechten heeft. Zo niet, dan effe die rechten instellen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:15
Zelfs als ik het project lokaal op de schijf zet doet ie het nog niet.
Wat doet ie dan niet ? Welke fout krijg je dan precies ? Die 'updateable query ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Dit is de fout die ik dan krijg.

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.Security.SecurityException: System.Security.Permissions.SecurityPermission
at Timer.frmMain.DoAlarm()
at Timer.frmMain.tmrTimer_Tick(Object sender, EventArgs e)
at System.Windows.Forms.Timer.OnTick(EventArgs e)
at System.Windows.Forms.Timer.Callback(IntPtr hWnd, Int32 msg, IntPtr idEvent, IntPtr dwTime)


************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
RegexAssembly4_0
Assembly Version: 0.0.0.0
Win32 Version: n/a
CodeBase:
----------------------------------------
IEExecRemote
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/ieexecremote/1.0.5000.0__b03f5f7f11d50a3a/ieexecremote.dll
----------------------------------------
Timer
Assembly Version: 1.0.2020.29824
Win32 Version: n/a
CodeBase: http://www.wonkosworld.co.uk/apps/Timer.EXE
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
Microsoft.VisualBasic
Assembly Version: 7.0.5000.0
Win32 Version: 7.10.6001.4
CodeBase: file:///c:/windows/assembly/gac/microsoft.visualbasic/7.0.5000.0__b03f5f7f11d50a3a/microsoft.visualbasic.dll
----------------------------------------

************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the machine
rather than being handled by this dialog.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:15
Dat is dus die fout die je krijgt omdat je app vanaf je netwerkshare gedraaid wordt:
- ofwel applicatie 'trusten'
- ofwel local intranet zone security settings verhogen (niet echt aangeraden)

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op vrijdag 27 oktober 2006 @ 11:57:
Dat is dus die fout die je krijgt omdat je app vanaf je netwerkshare gedraaid wordt:
- ofwel applicatie 'trusten'
- ofwel local intranet zone security settings verhogen (niet echt aangeraden)
Ik kan die applicatie niet trusten omdat ie dan die foutmelding geeft: unable to load assembly
Weet jij daar een oplossing voor ? ik heb ook al daarvoor op internet gezocht, zonder succes vooralsnog

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:15
Is dat de enige melding die je krijgt, of is dat nog iets uitgebreider ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op vrijdag 27 oktober 2006 @ 12:31:
Is dat de enige melding die je krijgt, of is dat nog iets uitgebreider ?
ja helaas wel, dat is de enige melding die ik krijg.

[ Voor 3% gewijzigd door Verwijderd op 27-10-2006 12:36 ]


Verwijderd

Waarom gebruik je Publish niet waar 't voor bedoeld is: ClickOnce deployment?
Je laat dan de clients niet de exe op je server aanroepen, maar laat ze eenmalig setup.exe in de server directory waarnaartoe je gepublished hebt runnen. Hierdoor wordt de applicatie op de client geinstalleerd (einde OleDB security issues), en elke keer als je 't programma start checkt 'ie of er misschien een nieuwe versie gepublished is en installeert die dan.
In vb.net kan je dat ook instellen bij myproject tabblad security en daar geef ik aan FULLTRUST application, maar dat is blijkbaar alleen voor mijn pc en niet voor de andere pc's.
Da's ook weer logisch: FullTrust is hier ook alleen op die server, niet op de clients die via een share die applicatie op de server willen runnen. En op die clients kun je dat ook niet zomaar wijzigen zoals je gemerkt hebt, omdat de assembly (jouw applicatie) niet als locale assembly herkend wordt: die staat nl. alleen op de server...

Gewoon ClickOnce gebruiken, dus. :)

Verwijderd

Topicstarter
Ja dat dacht ik ook, had ik dus ook al geprobeerd maar als ik die setup.exe run krijg ik zo'n please send report of don't send scherm. Dus het installeren lukt niet eens.
Wat zou daar de oorzaak van kunnen zijn ? Pc rechten van de client op de server ?
Want wat ik me af vroeg is of er ook .dll bstanden lokaal worden weggeschreven als je een setup draait ? Of andere bestanden die moeten worden weggeschreven ? Dan zou het kunnen dat de client niet de juiste machtigingen daarvoor heeft. Bedankt voor je reactie

Verwijderd

Topicstarter
Ik heb net nog een aantal testen gedaan en het ligt aan de lokale rechten van de ingelogde gebruiker, als ik lokaal als admin inlog en dan via een user zonder lokale admin rechten maar met schrijf rechten op de map op de server waar de applicatie draait dan kan ik de applicatie gewoon draaien en records naar de database schrijven. Maar als ik met die user van de server op dezelfde pc op het domein inlog en dan de applicatie wil draaien krijg ik die fout met dat report, dat komt dus omdat die account geen lokale admin rechten heeft, alleen schrijf rechten op de applicatie map op de server.
Mijn vraag is eigenlijk: hoe kan je toch de applicatie goed starten zonder de user lokale admin rechten te geven ?

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Impersonation is de term.

Je schrijft een module die enkel de dingen doet en kan doen die extra rechten nodig hebben.
Je zorgt er dan voor dat er Impersonation gebruikt wordt om enkel en alleen die code te gebruiken. Zorg er dan natuurlijk wel voor dat die code extra veilig is.

ASSUME makes an ASS out of U and ME

Pagina: 1