27. april 2003 - 11:54Der er
29 kommentarer og 1 løsning
Excel og system Log-on
Hej I vores projektmappe (der indeholder data på 20 patienter af gangen) havde jeg tænkt at oprette 20 stk kommandoknapper - En pr. patient. Hver knap skal starte word og overføre data fra excel på patienten hvorefter den gemmes i cpr-nr. Dette fungerer fint. Imidlertid bør man af diverse sikkerhedsmæssige grunde begrænse adgangen til journalerne.
Systemet fungerer i et netværk hvor alle logger på serveren der fungerer som en domæne-controller dvs her tilføres brugerens rettigheder.
Det jeg gerne vil er at give visse personer redigeringsrettighed over jornalerne - resten skal kun have læseadgang. Det kan selvfølgelig lade sig gøre blot at anvende en adgangskode men det andet virker mere "korrekt"!
Kan dette lade sig gøre med VBA?
Vi anvender 2000 server på serveren, win XP på de fleste arbejdsstationer og Office XP
Containerløsninger af eget design kan være velfungerende og løse organisationens behov – men kan også øge risiko og ressourceforbrug.
23. februar 2024
Slettet bruger
27. april 2003 - 12:16#1
Jeg vil personligt ikke stole på den sikkerhed som Excel og/eller VBA kan tilbyde. Jeg vil mene at du vil være bedre stillet ved at begrænse adgangen til selve den mappe hvori dit Excel-ark ligger.
Synes godt om
Slettet bruger
27. april 2003 - 12:20#2
VBA makroer kan standses eller omgås, og Excels passwords er ret nemme at knække.
Enig med Blackadder. På en win2000 server kan du jo selv tildele dem de rettigheder de skal bruge, både for enkelte filer og hele biblioteker i forbindelse med log-on, men det burde da også kunne gøres i VBA. Man kan fange Log-on navnet og domæne og derefter imakroerne sørge for at kun visse personer kan åbne uden skrivebeskyttelse.
Filer kan startes op uden makro'er - jeg vil i et tilfælde om helt vitale data ikke stole på Excel og VBA - brug rettighedstildelingen i win2000 server på fil eller biblioteks niveau
Her er et eksempel på hvad jeg mener. Jeg er godt klar over at det er word-filer du vil åbne, men for at holde det simpelt åbner jeg en excel-fil,( kender ikke lige din kode her) så kan du selv konvertere. Public SuperUser As Boolean
Sub Auto_Open() Dim objWSH As Object Dim Id Dim BrugerNavn As String 'Et array med brugerinitialer eller log-on navne Id = Array("TBC", "SSA", "PCB") Set objWSH = CreateObject("WScript.Network") 'Hvis domænenavnet er rigtigt så.. If objWSH.UserDomain = "MitDomæne" Then 'Hent log-in navn BrugerNavn = objWSH.UserName 'Kontrollér at log-in navnet er indeholdt i array Id For x = 1 To UBound(Id) If BrugerNavn = Id(x) Then 'hvis Domæne og log-in navn er Ok sættes SuperUser til Sand SuperUser = True Exit For End If Next End If End Sub Sub OpenFile() 'hvis Superuser er Sand så åbn normalt... If SuperUser = True Then Workbooks.Open Filename:="C:\spredning.xls" Else 'ellers åbnes skrivebeskyttet. Workbooks.Open Filename:="C:\spredning.xls", ReadOnly:=True End If End Sub
Det ses interessant ud bak. Jeg skal lige ha' et par dage til at teste - så vender jeg tilbage med point til dig (du kunne måske anbringe et svar inden da). vh Steen
Synes godt om
Slettet bruger
27. april 2003 - 22:14#9
Bemærk at Auto_Open() makroen kan deaktiveres ved at holde SHIFT nede imens Excel starter op. Sikkerheden er derfor i princippet ikke bedre end den var før.
Synes godt om
Slettet bruger
27. april 2003 - 22:28#10
bak >> Skal der iøvrigt ikke stå For x = 0 To UBound(Id) istedet for For x = 1 To UBound(Id)
For en god ordens skyld skal det anføres at jeg godt kan begrænse brugernes adgang til filer og mapper MEN selvom det er sårbare data må de øvrige brugere (sygeplejersker) gerne læse journalerne og der er med garanti INGEN i gruppen der bevidst forsøger at "bryde" læserettighederne - derfor er jeg ikke så "hysterisk" med sikkerheden. vh Steen
Hvis sikkerheden ikke er et problem, ville jeg personligt nøjes med hhv en åbnings- og en redigeringsadgangskode. Åbning tuil de, der kun skal kunne læse og Redigering til de, der skal kunne ændre.
blackadder > Jo, det har du ret i (option base 1). Jeg har ikke chekket koden, den er bare håndbygget som et eksempel. Der er sikkert t par andre ting der kan gøres bedre (cheks). I øvrigt, hvis man slår macroerne fra vil knapperne jo ikke virke. Hvis man overspinger auto_open, vil superuser = Falsk.
Sub Auto_Open() Dim objWSH As Object Dim Id Dim BrugerNavn As String Dim x As Long Dim superbruger As String Dim superuser As String 'Et array med brugerinitialer eller log-on navne Id = Array("TBC", "SSA", "PCB") Set objWSH = CreateObject("WScript.Network") 'Hvis domænenavnet er rigtigt så.. If objWSH.UserDomain = "MitDomæne" Then 'Hent log-in navn BrugerNavn = objWSH.UserName 'Kontrollér at log-in navnet er indeholdt i array Id For x = 0 To UBound(Id) If UCase(BrugerNavn) = Id(x) Then 'hvis Domæne og log-in navn er Ok sættes SuperUser til Sand superuser = True Exit For End If Next End If End Sub
Hej Bak og Co. Det ser jo ud til at tingene fungerer. Jeg kan desværre ikke checke om det fungerer i domæne-regi. Er det muligt at ændre koden lidt så den også fungerer på alm arbejdsstationer? Jeg ved ikke OM det evt. kan lade sig gøre at forhindre brugeren i at kunne redigere (slette/tilføje) i Read only-mode? Vh Steen
Sådan, så funker den uden domænecheck. Det forhindrer ikke bruger i at slette/tilføje noget, men de kan ikke gemme (i samme navn)
Public SuperUser As Boolean
Sub Auto_Open() Dim objWSH As Object Dim Id Dim BrugerNavn As String Dim x As Long Dim superbruger As String Dim superuser As String 'Et array med brugerinitialer eller log-on navne Id = Array("TBC", "SSA", "PCB") Set objWSH = CreateObject("WScript.Network") 'Hvis domænenavnet er rigtigt så.. 'If objWSH.UserDomain = "MitDomæne" Then 'Hent log-in navn BrugerNavn = objWSH.UserName 'Kontrollér at log-in navnet er indeholdt i array Id For x = 0 To UBound(Id) If UCase(BrugerNavn) = Id(x) Then 'hvis Domæne og log-in navn er Ok sættes SuperUser til Sand superuser = True Exit For End If Next 'End If End Sub
Min fejl. Jeg har en dobbelt deklaration as superuser, både en public og en i subben. Den her er lidt bedre :-)
Public superuser As Boolean
Sub auto_open() Dim objWSH As Object Dim Id Dim BrugerNavn As String Dim x As Long
Id = Array("TBC", "SSA", "PCB") Set objWSH = CreateObject("WScript.Network") BrugerNavn = objWSH.UserName For x = 0 To UBound(Id) If UCase(BrugerNavn) = Id(x) Then superuser = True Exit For End If Next End Sub
Jeg tror du har testet, uden at lukke filen først, men for at være på sen sikre side indfører jeg en linie der starter med at sætte superuser til falsk
Public superuser As Boolean
Sub auto_open() Dim objWSH As Object Dim Id Dim BrugerNavn As String Dim x As Long superuser = False Id = Array("TBx", "SSA", "PCB") Set objWSH = CreateObject("WScript.Network") BrugerNavn = objWSH.UserName For x = 0 To UBound(Id) If UCase(BrugerNavn) = Id(x) Then superuser = True Exit For End If Next End Sub
Øv fy for pokker men sådan er det med edb-eksperter: Det er sjældent man er tilfreds i en længere periode.
Iøvrigt tak for en altid stor hjælp: Point er selvfølgelig dine! vh Steen
Synes godt om
Ny brugerNybegynder
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.