我正在创建一个将分发给我的同事的excel应用程序。基于权限我需要禁用对某些工作表和功能的访问权限。我已经能够保护和隐藏工作表,但精明的用户可以在内部或外部迭代隐藏的工作表来公开数据。我需要阻止它。
以下是流程:
当工作簿打开对远程数据库的查询时,返回用户权限集。然后将这些权限打印到名为“PERMISSIONS”的工作表。
下面的代码迭代工作表权限,通过传入列名来查找特定设置。
CheckPerm "Timesheet"
Public Function CheckPerm(nPermColTarget As String) As Boolean
Dim Counter As Integer
Dim x As Integer
Dim y As Integer
Counter = 3
Do Until Sheet7.Cells(Counter, 1).Value = Associate_Name
Counter = Counter + 1
Loop
y = Counter
Counter = 2
Do Until Sheet7.Cells(2, Counter).Value = nPermColTarget
Counter = Counter + 1
Loop
x = Counter
If Sheet7.Cells(y, x).Value = "ON" Then
CheckPerm = True
GrntDenySheetAccess nPermColTarget, y, x, CheckPerm
Else
' "OFF"
CheckPerm = False
GrntDenySheetAccess nPermColTarget, y, x, CheckPerm
End If
End Function
Private Sub GrntDenySheetAccess(nPermColTarget As String, y As Integer, _
x As Integer, CheckPerm As Boolean)
Select Case nPermColTarget
' Sheet1
Case "Timesheet"
If CheckPerm = True Then
Sheet1.Unprotect "pass"
Sheet1.Visible = xlSheetVisible
End If
If CheckPerm = False Then
Sheet1.Protect "pass"
Sheet1.Visible = xlSheetVeryHidden
End If
End Select
End Sub
但即使sheet1被隐藏和保护,我仍然可以迭代隐藏的sheet1的内容来访问信息。无论如何要阻止它?
由于
答案 0 :(得分:3)
没有任何方法可以安全地保护对Excel工作簿中任何内容的访问。在Excel 2007及更高版本中,密码更难破解,但用户只需将工作簿保存为.xls
文件,然后就可以轻松破解。
你能做的最好的事情就是让某人有点难以进入。密码保护您的文件,并设置您不希望他们到达xlSheetVeryHidden
的任何工作表,这将阻止用户通过Excel用户界面取消隐藏工作表。
您提出的评论者是正确的。如果您想要一个安全的应用程序,Excel就不是答案。
话虽如此,如果您在数据库层中强制执行安全性,Excel会创建一个很棒的UI。只需确保您不存储或检索用户不应看到的数据。