Avatar billede Simon Praktikant
30. oktober 2006 - 10:38 Der er 10 kommentarer og
3 løsninger

XML fil som database - sikkerhed

XML filer på harddisken er meget enkle og velegnede til databaser for diverse applicationer. Men hvad sker der hvis computeren mister strømmen lige når xml-filen er ved at blive skrevet til, eller hvis programmet går ned? Står brugeren så lige pludselig med en ubrugelig fil, og tab af alle sine data? Jeg tager her udgangspunkt i .NET.

Hvor sikkert er det at benytte en xml-fil på harddisken som database for en application? Og hvad kan man gøre for at forbedre sikkerheden? Kan filsystemet selv genskabe filen osv.?
Avatar billede segato Nybegynder
30. oktober 2006 - 12:40 #1
Det jo et problem du ikke kan komme uden om, når en applikation crasher så ryger alt du har i hukommelsen. Dette ville også ske med en database. At du lige når at skrive til filen ville være meget uheldigt men det kan selvfølgelig ske at filen så bliver invalid. Hvis du kræver højsikkerhed, med samtidighed af brugere, transaktioner osv osv skal du anvende noget andet. Dette kunne f.eks. være en database ellers findes der også det der hedder MessageQueues som besidder nogle vældig gode egenskaber. Men som sagt kan man sagtens anvende xmlfiler hvis du ikke behøver transaktioner og ikke har flere brugere på en gang, man sørger bare for ens applikation ikke crasher.
Avatar billede hacked Nybegynder
30. oktober 2006 - 12:47 #2
Strøm:
Uanset hvad så vil filen blive corrupt ved det scenarie. Det kommer selvfølgelig i høj grad an på hvor meget der skal skrives til disk.
Du kan inden du skriver til filen tage en backup.

is file corrupt?
if(yes)
  then replace with backup
else
  use real file.

Såfremt det ikke er meget data du skal gemme kan du serialisere et objekt med data til disk.
Se eksempel: http://www.codeproject.com/csharp/objserial.asp
Avatar billede hacked Nybegynder
30. oktober 2006 - 12:53 #3
Du kunne også bruge en lightweight Access database.
Avatar billede segato Nybegynder
30. oktober 2006 - 12:58 #4
Hej Malkor,

Du vil opnå samme problem. Hvad vil der ske hvis strømmen går lige midt i en kopiering, eller midt i en serialisering. Og jeg vil absolut heller ik anbefale Access, da den hverken er transaktionel som er det han faktisk søger eller specielt velegenet i sikre systemer.
Avatar billede hacked Nybegynder
30. oktober 2006 - 13:18 #5
segato>>

Mit forslag gik udelukkende ud på, at miste så lidt data som muligt. Det nye data vil gå tabt, men ikke det gamle.
Man vil normalt ikke gemme det hele på en gang. Du kan vælge at opbygge dit program så det gemme brugerens ændringer midlertidigt.

Fx.

1 ændring = gem
2 ændring = gem
3 ændring = gem

Altså programmet gemmer en midlertidig fil bagom brugerens ryg. Jo flere gange du gemme jo mindre data vil du miste.

"da den hverken er transaktionel som er det han faktisk søger"
Spørger kan jo udspecificere nærmere hvad han ønsker. Jeg kan ikke læse tanker :)
Avatar billede hacked Nybegynder
30. oktober 2006 - 13:19 #6
*han/hun
Avatar billede arne_v Ekspert
30. oktober 2006 - 13:29 #7
hvis data er penge værd så er en UPS og en RAID controller med batteri backup
på cache en god ting

en database som understøtter transaktioner bør altid komme op konsistent - enten
er ændringerne med eller så er de ikke

generelt er XML bedst til readonly data - jeg ville stort set altid vælge database
til data som skal modificeres
Avatar billede Simon Praktikant
31. oktober 2006 - 16:11 #8
Jeg er en han :-)

Der er kun tale om at én bruger skal tilgå databasen af gangen. Jeg benytter en xml-fil, da det er så simpelt at gemme et DataTable fra .NET.

eks MitDataTable.WriteXml(@"c:\minfil.xml");

Programmet skal holde styr på timer og lønninger for medarbejdere i en lille virksomhed med 1-5 ansatte. Så databasen skal ikke tilgås mange gange i sekundet. Jeg kan find leve med at man skal trykke "gem" for at ændringerne er gemt.

Sikkerheden kan som malkor skriver i sit første indlæg forbedres kraftigt ved at læse om filen er corrupt, og i så fald erstatte den med en backup-fil.
Avatar billede Simon Praktikant
01. november 2006 - 15:41 #9
Tak for jeres sparing. Hvis I smider svar får I point.
Avatar billede segato Nybegynder
01. november 2006 - 16:13 #10
Svar ...
Avatar billede hacked Nybegynder
01. november 2006 - 22:38 #11
Hermed et svar :)
Avatar billede Simon Praktikant
03. november 2006 - 21:58 #12
... også arne_v :-)
Avatar billede arne_v Ekspert
03. november 2006 - 22:15 #13
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester