Avatar billede davidabk Nybegynder
15. juni 2011 - 19:19 Der er 10 kommentarer

Hvordan vælges database ud fra login oplysninger

Hej
Jeg har et system som jeg overvejer at klargøre til at smide ud på www så virksomheder kan oprette "sit eget" system og bruge det.
Jeg vil dog helst oprette det således at hver virksomhed har sin egen database. Men hvordan bestemmes hvilken database der skal bruges ud fra et brugernavn/password?

Jeg har overvejet at lave en login side for hver virksomhed, med det besværliggør login delen noget!
Jeg syntes også at det virker lidt usikkert at oprette alle brugere i en overordnet login-database som vælger database på baggrund af brugerens login.

Forslag og ideer er velkommen!
Avatar billede repox Seniormester
15. juni 2011 - 19:33 #1
Hvorfor overhovedet bruge forskellige databaser?
Avatar billede majbom Novice
15. juni 2011 - 19:36 #2
hvilken server ligger det på?

du har vel én bruger på serveren pr. virksomhed.

hos mange webhoteller har man kun én database til rådighed, men går ud fra at du bruger noget andet end one.com, uoeuro og alle de andre "billige" hoteller?
Avatar billede davidabk Nybegynder
15. juni 2011 - 20:15 #3
Måske er det bare mig.. men jeg syntes at der er en større sikkerhed i at man ikke har et hav af tabeller med et virvar af navne. Derfor ønsket om en database pr virksomhed, med en ensartet tabelstruktur.

Det kan være at jeg selv opstiller en server i et datacenter for at opnå den fleksibilitet jeg ønsker.
Avatar billede repox Seniormester
15. juni 2011 - 20:41 #4
Det er bare dig - det du skaber er bare 'security through obscurity' hvilket som oftest bare bider forfatteren i røven.

Du skal huske på at den bedste sikkerhed konsekvent vil være ikke at have tillid til dine brugeren - valider altid input - uanset anvendelse. Du kan dele dine tabeller op i nok så mange databaser; hvis nogen finder en vej ind er tilgængeligheden for dem den samme som for dig.
Avatar billede davidabk Nybegynder
15. juni 2011 - 21:01 #5
repox - foreslår du så at der oprettes et sæt tabeller for hver virksomhed, eller bare de samme tabeller og så en tabel der fortæller hvilke felter i tabellerne den enkelte virksomhed har adgang til??
Avatar billede repox Seniormester
15. juni 2011 - 21:26 #6
Normalisering af databasen - altså, det sidste.
Du opretter tabeller der fortæller hvilke entries der tilhører hvilken virksomhed.
Avatar billede davidabk Nybegynder
15. juni 2011 - 22:04 #7
Ja.. det lyder som den løsning jeg havde håbet på at undgå.. Det kommer til at betyde en masse snask i mine queries.

Tak for hjælpen repox!
Avatar billede repox Seniormester
15. juni 2011 - 22:41 #8
Jeg er lidt nysgerrig efter hvad du mener med 'snask'? Personligt ville jeg kun adskille databaserne, såfremt databaserne tjente forskellige formål. Men det er jo en og samme applikation du snakker om?

Forestil dig at skulle vedligeholde databasen for x antal kunder når du videreudvikler (videreudvikling er trods alt grundstenen i at beholde kunderne) - en ændring i en tabel (tilføjelse, rettelse eller lignende at et felt eller flere) ville betyde du skulle gøre det for hver af databaserne.

Jeg har en løsning med omkring 15 kunder - de bruger den samme database til denne applikation; disse kunder har endda logins til deres egne ansatte/brugere i samme løsning. Jeg skal kun rette et sted når jeg videreudvikler features.

I samme omgang, på arbejdet, har vi en løsning der hoster omkring 100 kunder. Denne løsning er fordelt på 5 databaser.
Hver af databaserne er fordelt henover nogle forskellige funktionaliter og muligheder; men her er det også nødvendigt at have udvikling på forskellige niveauer for at kunne videreudvikle.
Avatar billede Slettet bruger
16. juni 2011 - 12:21 #9
Klart én database.

Du slipper ikke for "snask" i dine queries, bare fordi du isolerer kunderne i hver dares database.
- husk at langt det meste "datakriminalitet" er inside-jobs ~ Sælgere der "låner" hinandens kunder.

Jeg bøvler selv med et web-system der tilbyder funktionalitet til organisationer, og indenfor hver af disse, en bunke brugere.

Min løsning:
Når en person logger ind, lægger jeg to id'er i $_SESSION: OiD og UiD (meget store integers)

Og inden jeg foretager mig NOGET i databasen, sikrer jeg at de to id'er "hører sammen".

Derudover har jeg en "adgangs-tabel" med kun 2 felter: Ressource og iD (OiD / UiD)
- er det en OiD har alle tilhørende UiD'er adgang.

Og endelig 5 adgangsniveauer (for hver "ressource"):
Admin - Må ændre på brugeradgang - og er ellers Editor
Editor - Må oprette/ændre/slette alt
Author - Må oprette men kun ændre/slette egenoprettede
Reader - Må læse alt indenfor ORG (som ikke har specifik læse-adgang)
Poster - Må oprette nyt men ikke læse/ændre/slette (medmindre de har specifik læse-adgang)

Og for lige at sætte trumf på: brugergrupper - så man kan give adgang til mange på én gang.
- og fjerne alle sjoverens rettigheder ved at slette en enkelt flueben.

Ja, gu' det svært, men men der ER ingen let (og praktisk) vej udenom sikkerhed.
Måden at holde det ud på, er at benytte en håndfuld (testede) functions med meningsfyldte navne..
Avatar billede davidabk Nybegynder
16. juni 2011 - 14:33 #10
Jeg kan godt se jeres pointe!
Det jeg mener med 'snask' :-) er at man skal tjekke/skrive i en tabel der fortæller hvordan alt er kædet sammen med en virksomhed, hver gang noget skal gøres.
Det er da heller ikke skræmmende, men jeg havde håbet på at undgå det, nu hvor systemet virker til en virksomhed.

En virksomheds brugere har også adgang til at tilføje samarbejdspartnere med adgang til dele af systemet og de sager det indeholder.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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