.net - Sådan sikres en netværksmappe, der indeholder en Access-database, mens du stadig tillader et WinForms-program at oprette forbindelse til databasen

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er overtaget støtte på en VB.Net WinForms ansøgning, og det firma, jeg støtter til, har mistet kildekoden til ansøgningen. Jeg har installations-cd'en til applikationen, og installations-trinene til en netværksinstallation er:



  1. Kopier adgangsdatabasen til applikationen til en placering på serveren.

  2. Opret en del i den mappe, der indeholder databasen, og giv alle fuld adgang.

  3. Installer applikationen på klientens skrivebord via en ClickOnce-installation.

  4. Første gang applikationen kører, anmoder databasen sig om. Hvis databasen findes på det angivne sted, gemmes databasepaden i registreringsdatabasen og bruges til databaseforbindelserne.



Fra en dekompilering af applikationssamlingen kan jeg bestemme, at følgende kode bruges til at etablere databaseforbindelserne (jeg ville have foretrukket, at forbindelsesstrengen var i programindstillingerne, men ikke sådan held, desværre).


OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder();
builder.ConnectionString = "Data Source=" + sDatasource;
builder.Add("Provider", "Microsoft.Jet.Oledb.4.0");
builder.Add("Jet OLEDB:Database Password", "....");
builder.PersistSecurityInfo = true;
gconn = new OleDbConnection(builder.ConnectionString);


Nu er problemet jeg har, følgende: Denne applikation bruges på college, og trin 2 i opsætningen forårsager et sikkerhedsproblem for kollegiet, da åbningen af ​​mappen i denne grad gør det muligt for nogen at kopiere og udføre kode på serveren. Og kollegiet har oplevet, at eleverne finder og udnytter sådanne sikkerhedsspørgsmål. Er der nogen måde, at adgangen kan begrænses til den mappe, der indeholder databasen, så eleverne ikke kan kopiere og udføre kode på serveren, men så at applikationen stadig kan oprette forbindelse til og bruge adgangsdatabasen? Husk at Jeg har ikke kildekoden på nuværende tidspunkt for at ændre forbindelsesstrengen, der bruges til forbindelserne.


UPDATE:


Nogen jeg ved, har foreslået, at jeg bruger Runas i en batchfil til at køre applikation med en bestemt bruger i domænet og derefter kun give brugerrettigheder til mappen med adgangsdatabasen. Ville dette være en gennemførlig løsning?

Bedste reference


Jeg tror ikke, at du virkelig kan gøre denne opsætning sikker, men du kan gøre noget for at holde det bedre:


Sæt adgangen db til en 'lokal mappe' inde i en VM ... Sæt den mappe på et separat volumen inde i VM, som kun indeholder den mappe ... gøre det volumen vedvarende ...


derefter opret en del efter behov ...


På den måde kan eleverne kun gøre det begrænset til VM (uden hensyntagen til Blue Pill eller lignende). Du kan endda bruge nogle VMWare Workstation-funktioner til at vende tilbage til VM til en kendt god tilstand osv. Hvis det er nødvendigt ...

Andre referencer 1


Hvorfor ikke bruge den dekompilerede kode til at genopbygge applikationen? Derefter for en proxy overveje at indføre en webservice. Måske er dette alt for meget arbejde ... men webtjenesten ville give mulighed for mere sikkerhed i forbindelsen fra klientapplikationen til dataene, mens du gemmer MDB'en bag tjenesten.

Andre referencer 2


Hvis nogen er interesseret, vil jeg skitsere her, hvordan jeg lykkedes at få denne applikation til at fungere uden nogen ændringer i kilden (i betragtning af at jeg endnu ikke har en fungerende kilde!) Og alligevel har databasemappen sikret for alle brugere .



  1. Jeg oprettede en bruger på serveren, som ville være den bruger, der ville have fulde rettigheder til databasemappen. Jeg oprettede den samme bruger på min klientmaskine med nøjagtig samme adgangskode som på serveren, men det er kun fordi jeg ikke har et domænecontroller setup.

  2. Jeg har ændret ClickOnce-installationen og ændret den til en MSI-installation og installeret programmet til Programfiler på serveren.

  3. Jeg delte derefter denne mappe (som også inkluderede Access-databasen) og gav læs rettigheder til alle, men fuld rettigheder til den bruger, jeg oprettede i første trin .

  4. Derefter oprettede jeg en indpakningsprogram i .Net, der lancerede hovedapplikationen med legitimationsoplysninger for brugeren, der har fulde rettigheder til applikationsmappen. Min indpakningsprogrammer læser bruger- og adgangskodeoplysningerne fra en krypteret fil, der er gemt på serveren. Jeg obfuscated lanceringsapplikationen for at skjule dekrypteringsalgoritmen til læsning af brugernavn og adgangskode.

  5. Endelig oprettede jeg en genvej til launcher-applikationen på hver arbejdsstation.



Nå, det er sådan, jeg har løst det, og det fungerer godt ... næsten 100\% !! ;) Den eneste mindre (og meget mærkelige) hik, jeg har, er dette ... efter en genstart af en klientmaskin, vil en adgang nægtes ved at starte applikationen inden for de første 4 minutter at starte. besked, når applikationen kører med den angivne bruger forsøger at skrive til registret. Hvis ansøgningen startes efter 4 minutter i opstart (ja, jeg timede det !!), så pludselig skriver til registret fungerer fejlfrit. Meget underligt problem faktisk, og en som måske vil jeg sætte et særskilt spørgsmål om stackoverflow ... måske kender nogen her årsagen til denne underlige anomali ved opstart.


Alligevel. Tak til alle for dine tanker og ideer, de hjalp meget med at få mig til en løsning.