Avatar billede yev Nybegynder
22. oktober 2007 - 22:41 Der er 15 kommentarer og
1 løsning

Sikkerhed i Access database med flere brugere

Hej eksperter.

Jeg har lavet en database (i Access 2003), som er tiltænkt at skulle bruges af flere brugere på én gang.

Jeg har følgende ønsker til databasen:

a) Den skal kunne bruges af flere brugere på én gang
b) De forskellige brugere skal have forskellige rettigheder
c) Nem - dvs. central opsætning af brugere, dvs. brugergrupper (såsom gæst og administrator), og ingen krav om speciel opsætning hos hver enkelt bruger. Standard bruger vil kunne logge ind som "gaest", mens administratorer har personlige logins.
d) Jeg ønsker databasen delt i front-end og back-end, så der kan laves udvikling på front-enden uden at påvirke back-enden.
e) Det må ikke være muligt for brugerne at rette i databasen (akkurat som hvis databasen er gemt som en .mde-fil)
f) Jeg ønsker kun en instans af databasen, dvs. jeg ønsker ikke, at distribuere front-enden i kopier til alle brugerne.

Jeg har forsøgt at løse ovenstående punkter, men er stødt på en del problemer.

Punkt a) og b) har jeg forsøgt løst på følgende måde. Brugerne har forskellige rettigheder: brugere og administratorer. Jeg har selv lavet en login-form, som ved login matcher med en tabel indeholdende brugernavne, adgangskoder og rettighedsniveau. Alt efter hvilket rettighedsniveau brugeren har, gives der adgang til forskellige forme og funktioner. Ved at gemme databasen som en .mde fil sikrer jeg mig, at det for brugerne ikke er muligt at se tabeller, rette i kode, forms og så videre. Metoden jeg har benyttet er, at når en bruger logges på, skrives en tabel indeholdende brugernavnet og rettighedsniveauet, og forskellige steder i koden spørges til indholdet af denne tabel. Problemet er nu, at hvis flere brugere logger på databasen på én gang, vil tabellen blive overskredet (af den sidste bruger der logger sig på), og pludselig er en administrator blevet til almindelig bruger, eller det omvendte - som er meget værre - at en bruger pludselig får administratorettigheder. Dette vil man kunne undgå ved at distribuere en front-end database til alle brugerne, hvor tabellen bliver lokal hos hver bruger. Dette ønsker jeg dog ikke i henhold til f), da opdatering og videreudvikling besværliggøres, da databasen skal distribueres på ny (og hver gang der er foretaget ændringer). Spørgsmålet er så: hvad sker der, når flere brugere åbner den samme database på én gang? De må hver især åbne lokale versioner af forms mv. - Er det rent faktisk tilfældet, og kan man i givet fald via disse lokale versioner skrive rettighedsniveau mv. som eksempelvis en usynlig label, eller er der andre muligheder?

Punkt c) nævner jeg fordi jeg ikke ønsker at bruge Access' indbyggende sikkerhedsfunktioner, da de, som jeg har forstået det, kræver en direkte opsætning hos den enkelte bruger af databasen (opsætning af .mdw-filer mv., som det eller glimrende er beskrevet i denne artikel http://www.eksperten.dk/artikler/314 af Thomas Jepsen)

Punkterne d) og e) ønsker jeg at kombinere - er det muligt at splitte en mde-database i en front-end og en back-end database, således, at der ikke er adgang til at ændre i nogle af databaserne?

Jeg hører meget gerne fra andre, som - om muligt - har stået i samme situation som mig.

Kære eksperter - jeg ser frem til jeres svar. På forhånd tusind tak.
Avatar billede _on_ Nybegynder
23. oktober 2007 - 07:49 #1
Hej

Jeg har ligeledes lavet en database med de samme kriterier som du specificerer, jeg bruger dog den indbyggede brugerstyring fordi det giver en del fordele og det fungerer perfekt.

1:
Når du har lavet din database (uden opdeling i FE & BE) opretter du brugerstyring via den indbyggede guide. Her fjerner du alle rettigheder for alm. brugere bortset fra åbne database samt læse (tabeller og lign.). Herefter kan du så oprette brugere og tildele dem rettigheder læse/skrive, åbne diverse forms og lign.

2:
Når du har lavet din brugerbeskyttelse tager du en kopi af databasen (denne bliver din backend). Fra denne kopi fjerner du alle forms, querys, rapporter og hvad du ellers har, men beholder tabellerne. Fra din frontend fjerner du alle tabeller og opretter herefter links til tabellerne i din backend.

3:
Disse 2 databaser skal du så ha' på et netværksdrev og du starter FE via en genvej fordi din database er nu afhængig af en brugerstyringsfil. Target i din genvej kan så f.eks. være følgende:
"%ProgramFiles%\Microsoft Office\OFFICE11\MSACCESS.EXE" "[Sti & navn på din FE]" /WRKGRP "[Sti & navn på din sikkerhedsfil]"
Denne genvej er det eneste dine brugere skal ha' lokalt.

Fordelen ved denne metode er at hvis en af databaserne bliver åbnet uden denne genvej vil den der åbner blive opfattet som alm. bruger af access og har kun lov til at åbne databasen, se data og intet mere. Der kan ikke engang rettes i tabellerne selv om de bliver åbnet direkte i backenden (frontend og backend er afhængig af samme sikkerhedsfil).

Mvh
ON
Avatar billede mugs Novice
23. oktober 2007 - 08:52 #2
Se på MakeITeasy hgvor der ligger et eksempel på LOGINboks:

http://www.makeiteasy.dk/Home.asp?ContentID=30&MenuItemID=42
Avatar billede mugs Novice
23. oktober 2007 - 08:53 #3
Og en asrtikel om sikkerhed i Access af Thomas Jepsen:

http://www.eksperten.dk/artikler/Databaser/Access/
Avatar billede yev Nybegynder
23. oktober 2007 - 09:10 #4
Hej,

I første omgang tak for jeres svar. Jeg vil i første omgang prøve _on_'s forslag - jeg vender tilbage.

/Yev
Avatar billede yev Nybegynder
23. oktober 2007 - 09:23 #5
Hej ON,

Er det muligt at spørge til brugerniveauet indeni databasen? Det er således, at i nogle tilfælde er det de samme forms bliver benyttet til både brugere og administratorer - men indholdet på formen er lidt forskelligt. Således vil det kræve, at man (databasen) efter logon ved, hvem der er logget på.

/Yev
Avatar billede mugs Novice
23. oktober 2007 - 09:29 #6
Du kan måle hvilken bruger der logger på med denne:

Environ("Username")

Og derefter med en Select Case struktur bestemme forskellige niveauer.
Avatar billede Slettet bruger
23. oktober 2007 - 10:26 #7
Du er nød til f.eks. at bruge dlookup når du tjekker brugerrettighed, dit system med at skrive en tabel virker kun hvis alle har en lokal version af FE, som indeholder en temp-tabel.

Du bør også være klar over at mde IKKE skjuler tabeller, så det er meget nemt at få åbnet/importeret alle data, inkl. tabel med brugernavne/passwords....

Du kan evt. sætte password på backend og så styre brugerrettigheder, som du gør nu. Det kræver dog, at alle får password.

Du kan stoppe at folk kan komme ind i BE, men du kan komme stoppe import ved hjælp af access password.

Du er nød til at finde ud af hvem, der kan komme til den og hvilket niveau, som er nødvendigt at ligge sikkerheden på. F.eks. kan man også styre data ved at ligge nogle af tabellerne på drev, som kun administrator har adgang til og så holde resten "åben". Dvs. selvfølgelig lukke det ned, så man ikke kan umiddelbart kan komme ind, men man skal være opmærksom på at f.eks. personfølsomme oplysninger, så skal ligge på administrator drevet!~)
Avatar billede _on_ Nybegynder
23. oktober 2007 - 12:40 #8
Hej Yev

Du kan bruge funktionen CurrentUser som returnere navnet på den bruger der er logget på, på et givet tidspunkt. Prøv ligeledes at søge efter user group i Visual Basic editoren og klik på svaret Group Object. Du kan læse her hvordan du finder ud af hvilken gruppe den aktuelle bruger tilhører. På den måde kan du styre hvordan din form skal se ud afhængig hvilken brugergruppe den aktuelle bruger tilhører. Du kan selvfølgelig nøjes med funktionen CurrentUser og så programmere dig ud af det, men det er ikke en løsning jeg vil anbefale. På den anden måde kan du, som administrator, styre hvem der får hvilket skærmbillede udelukkende ved at tilføje en bruger til en given gruppe. Det gir' størst fleksibilitet uden at skulle foretage en evt. ny kodning af din form. Ydermere vil det også være som spg er inde på, du bør så vidt muligt undgå at ha' en tabel med brugernavne og lign. fordi access (JET-Engine) ikke tilbyder total beskyttelse af data ligesom du heller ikke kan styre adgang på feltniveau.

Jeg er på arbejde i øjeblikket, så jeg kan ikke eksperimentere så meget lige nu, men hvis du kan bruge min indgangsvinkel kan jeg kigge på det senere idag.

Mvh
ON
Avatar billede mugs Novice
23. oktober 2007 - 13:00 #9
"ligesom du heller ikke kan styre adgang på feltniveau"

If Environ("Username")= "Per"
then Me.Feltnavn.visible = True
end if

Så på en måde kan man altså alligevel.
Avatar billede _on_ Nybegynder
23. oktober 2007 - 13:40 #10
mugs:

Jeg tænker ikke på hvad du kan skjule og vise i en form, men hvad du kan styre via database engine og JET-Engine tilbyder ikke, såvidt jeg ved, beskyttelse på feltniveau, men kun på tabelniveau. Løsningen med at skjule et felt i en form, gør ikke at du kan forhindre redigering i et givet felt hvis tabellen bliver åbnet uden om formen.

Mvh
ON
Avatar billede mugs Novice
23. oktober 2007 - 13:54 #11
Korrekt - Det har intet med Access sikkerhed at gøre. Men jeg mener Thomas Jepsen viser, hvordan brugeren kan spærre for tabellerne.
Avatar billede _on_ Nybegynder
23. oktober 2007 - 18:41 #12
Hej yev

I din åbne form hændelse kan du prøve at ha' følgende konstruktion:

      Dim usrGroup As Group

      For Each usrGroup In DBEngine.Workspaces(0).Users(CurrentUser).Groups
        Select Case usrGroup.Name
            Case "Admins"          ' Hvis en bruger er administrator, er brugeren medlem af gruppen admins
              ' ...
              ' ...
              Exit For
            Case "GruppeNavn"      ' Her har du navnet på en anden gruppe som skal have et andet skærmbillede
              ' ...
              ' ...
              Exit For
        End Select
      Next usrGroup

Mvh
ON
Avatar billede yev Nybegynder
23. oktober 2007 - 20:25 #13
Hej med jer,

Tak for jeres input. ON jeg forfølger stadig din idé, men jeg må indrømme at jeg bøvler en smule med administrationen af brugerne og det de skal have adgang til. Jeg er blandt andet kommet ud for at fraskrive mig administratorrettighederne...(og måtte gå tilbage en tidligere revision).

Den sidste løsning er fin, jeg bruger en lidt anden løsning, hvor jeg har spørger til brugernavnet og slår op i en tabel hvilket adgangsniveau brugeren skal have.

Er det korrekt opfattet, at når man benytter en genvej, der linker til databasen og workgroupfilen, så vil, når en bruger har brugt databasen, denne automatisk blive stillet tilbage til den oprindelige system.mdw-fil? Med andre ord, vil man ikke blive generet af at skulle logge på hver gang for at benytte en vilkårlig af ens andre databaser.

Vil der være en mulighed for i dette setup, at en bruger selv kan rette sit password - og i givet fald, hvordan gøres dette? Det er jo lidt en svaghed, at en administrator har adgang til alle burgernes password.

Jeg arbejder videre i morgen og kaster point af sted også...

Tak,
Yev
Avatar billede _on_ Nybegynder
23. oktober 2007 - 21:26 #14
Du har ret i at det ikke får indflydelse på brugen af system.mdw. Når du åbner access med en anden database, er det system.mdw der er aktiv med mindre du har specificeret en mdw-fil. Hvis brugeren, når denne er logget på, vælger Funktioner->Sikkerhed->Bruger- og gruppekonti..., kan brugeren til en hver tid vælge sig et nyt password i fanen "Skift logonadgangskode". Jeg mener ikke at administratoren uden videre kan ændre en brugers adgangskode, men du skal jo selvfølgelig, når du opretter brugerne, vælge en kode til dem, men den kan de jo så bare ændre når de vil.

Jeg gjorde det at jeg valgte at lade guiden oprette grupper og så beholdte jeg dem. Derefter oprettede jeg mig selv med brugernavn og adgangskode og gav mig administrator rettigheder. herefter kan du så oprette andre brugere og gøre dem til medlemmer af de grupper du ønsker. Når du har afsluttet guiden kan du så modificere på hvad de enkelte grupper skal ha' lov til via bruger og gruppetilladelser.

Du skal iøvrigt lige huske at access har en standard bruger der hedder "admin" eller "administrator". Denne bruger skal du sørge for kun er medlem af gruppen "brugere". Denne gruppe har du jo på et tidligere tidspunkt "neddroslet" til kun at ha' tilladelse til at åbne databasen og se data.
Avatar billede yev Nybegynder
24. oktober 2007 - 10:39 #15
Hej

Jeg er efterhånden ved at være igennem - ser det ud til.

Jeg takker for jeres hjælp.

ON jeg synes du har fortjent pointene - kast et svar!

Mvh
Yev
Avatar billede _on_ Nybegynder
24. oktober 2007 - 12:26 #16
Hej Yev

Glæder mig at kunne hjælpe. Go' vind med projektet.

Mvh
ON
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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