Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用户级安全?_Sql_Vba_Ms Access_Code Access Security - Fatal编程技术网

Sql 用户级安全?

Sql 用户级安全?,sql,vba,ms-access,code-access-security,Sql,Vba,Ms Access,Code Access Security,我有一个包含用户名、密码和isadmin的yes/no列的表 如果他们使用“isadmin”下带有复选标记的帐户登录,他们可以访问设计视图、功能区等,我该如何做到这一点?尽管如果他们使用在isadmin框下没有复选标记的帐户登录,他们只能查看表单,不能编辑表单,并且无法访问功能区 我只是不知道从哪里开始,因为我假设有一种方法可以将数据库保存为一个单独的副本,只有用户才能在其中查看表单,如果管理员运行他的副本,他将获得用户对表所做的所有更改(通过表单)。因此,当管理员编辑表单并保存表单时,不会像保

我有一个包含用户名、密码和isadmin的yes/no列的表

如果他们使用“isadmin”下带有复选标记的帐户登录,他们可以访问设计视图、功能区等,我该如何做到这一点?尽管如果他们使用在isadmin框下没有复选标记的帐户登录,他们只能查看表单,不能编辑表单,并且无法访问功能区

我只是不知道从哪里开始,因为我假设有一种方法可以将数据库保存为一个单独的副本,只有用户才能在其中查看表单,如果管理员运行他的副本,他将获得用户对表所做的所有更改(通过表单)。因此,当管理员编辑表单并保存表单时,不会像保存表单时那样删除所有用户数据,而是将表单保存到管理员的副本中。我真的很困惑


我正在使用Access 2013

这是一个简单的解决方案,用于在较新的Access版本中删除用户级别的安全性;使用了大量的VBA

步骤1:创建表 首先,创建一个表。我将把我的名字命名为
LogininfoT
。现在,对于表中的列,将它们命名为
EmployeeID
LoginID
LoginPassword
EmployeeName
,最后是
IsAdmin
。将EmployeeID设置为您的密钥,并在“是/否”字段中输入

要进行测试,请在此表中添加两个用户。有了这些信息:

EmployeeID LoginID LoginPassword EmployeeName IsAdmin
11111234鲍勃[x]
22221234斯图尔特[]
步骤2:创建表单 现在我们已经创建了表,让我们设计表单来使用这组数据

我将把我的表单命名为LoginF。进入设计视图,按下一个文本框、一个组合框和一个按钮。对于组合框,将文本重命名为类似于登录ID的内容(您可以将其更改为适合您需要的任何内容),对于文本框,将文本作为密码(再次,将其更改为您想要的任何内容,这不会影响结果)。该按钮中的文本可以是任何你想要的,我将把它登录

单击组合框并重命名它。我将把它命名为LoginCmBx。接下来,单击文本框并将其重命名,我将其命名为PasswordTxt。最后,单击按钮并将其重命名,我将其命名为LoginBtn

再次单击组合框,在事件选项卡下,进入更新后脚本。使用代码并键入以下内容:

Private Sub-LoginCmBx_AfterUpdate()
Me.PasswordTxt.SetFocus
端接头
这样,在您选择用户名后,它会自动将焦点放在密码文本框上,这样您就可以立即开始键入,而无需使用键盘上的TAB键或鼠标

接下来,转到按钮,并在“事件”选项卡下,进入单击脚本。使用代码并键入以下内容:

Private Sub-LoginBtn\u Click()
如果为null(Me.LoginCmBx)或Me.LoginCmBx=“”,则
MsgBox“您必须输入用户名”,vbOKOnly,“必需数据”
Me.LoginCmBx.SetFocus
出口接头
如果结束
如果IsNull(Me.PasswordTxt)或Me.PasswordTxt=”“,则
MsgBox“您必须输入密码”,vbOKOnly,“必需数据”
Me.PasswordTxt.SetFocus
出口接头
如果结束
如果Me.PasswordTxt.Value=DLookup(“LoginPassword”、“LoginInfoT”_
“[EmployeeID]=”&Me.LoginCmBx.Value)然后
EmployeeID=Me.LoginCmBx.Value
出错时继续下一步
DoCmd.DeleteObject acQuery,“IsAdminQ”
错误转到错误登录时,单击
Dim qdef作为DAO.QueryDef
设置qdef=CurrentDb.CreateQueryDef(“IsAdminQ”_
“选择iAdmin”和_
“来自LoginInfoT”和_
“WHERE EmployeeID=“&LoginCmBx.Value”)
退出\u登录\u单击:
DoCmd.关闭acForm,“LoginF”,acSaveNo
DoCmd.OpenForm“MenuF”
出口接头
错误登录点击:
MsgBox错误说明
继续退出\u登录\u单击
其他的
MsgBox“密码无效,请重试”,仅限vbOKOnly_
“无效条目!”
Me.PasswordTxt.SetFocus
如果结束
端接头
这样做的目的是检查您是否选择了用户名,如果没有,它会弹出一个错误,告诉用户选择一个用户名。如果您输入了密码,它会检查您是否输入了密码。如果他们没有输入密码,它会抛出另一个错误,说他们没有输入密码。如果他们同时选择了这两个,并且密码与表中所选用户名的密码不匹配,则会显示一个错误,表明密码错误。如果您获得了所选用户名的正确密码,它会让您登录。然后,它将关闭您当前所在的表单,并打开一个名为“MenuF”的新表单。它还将在您选择的用户名下创建一个查询,其中包含少量信息,无论该用户名是否为管理员。。我们还没有创建MenuF,所以让我们快速创建它。不过,我们还没有完全完成LoginF,所以请准备好稍后再回来

创建表单,然后按下一个按钮。这是您的菜单表单,您可以创建任意多个按钮,转到其他表单,甚至只需在此处放置一个子表单,就可以拥有整个数据库。按下按钮,你可以给文本命名,你想命名什么就命名什么。我把我的放在原木上。将按钮命名为MenuLogOutBtn。进入“事件”选项卡,在“单击脚本”下,单击“代码”并键入:

Private子菜单点击()
DoCmd.DeleteObject acQuery,“IsAdminQ”
DoCmd.OpenForm“LoginF”
文档关闭acForm,“菜单”,acSaveNo
端接头
这样做的目的是删除登录按钮创建的查询,再次打开登录表单,然后关闭菜单。简单

现在我需要你扔掉一个复选框,把它命名为MyCheckbox。此框不需要特殊编码或控制源。尽管我建议将visible改为no,并删除它附带的文本

现在,转到窗体的事件属性,并在