我的公司广泛使用 Access + MySQL 应用程序,如果我发布源代码,该应用程序可能会在 Daily WTF 上产生大量流量。用户及其权限的管理已经失控,我似乎花了越来越多的时间来调整这些内容或试图弄清楚为什么有人看不到他们应该看到的内容。
它最初是为一个仓库的三个用户设置的。现在有四个州的二十多个用户在使用它,很快还会有更多用户加入,功能添加的比例大约是用户数的 10 倍...实际的核心应用程序还不错,但管理用户却很麻烦。Access 为数据本身提供了一个很好的前端,数据存储在我们总部的 MySQL 后端。用户在分支机构有 Cisco VPN 盒,而且也非常稳定。范围已经从简单的仓库运输记录扩展到成熟的 CRM/ERP ...好吧,我不认为你可以称其为解决方案。也许,这是一种乳液。如果我有预算,我会打电话给 SAP 并告诉他们开始做这件事。恐怕在可预见的未来,这是不可能的。
按照 Google 的说明(这并不总是最安全的做法),我使用 Access 中的“用户级安全向导”为各个用户分配用户名和密码,当我一开始只有 4-5 个用户,其中有 3 个活跃用户时,这种方法还不错。但现在它变得相当笨重。我最大的愿望和渴望是,有某种方法可以根据 Active Directory 用户名和密码对用户进行身份验证并分配特权角色。有人告诉我这是不可能的。谷歌搜索了几次,但没有任何值得注意的结果。
我推测应该可以使用 Active Directory 获得某种身份验证框架,因为 VBA 链接到 Windows 中的所有 API。但是...这值得花费时间和精力吗?有没有人成功过,或者我是否不仅会毁掉我那该死的应用程序,还会毁掉整个域?
答案1
我知道这是可以做到的,但似乎很少有 Access 开发人员这样做。如果其他人编写了代码,我会自己使用它,但不需要它到自己编写的程度。
关键概念是,您可以使用 ADO 通过 LDAP 查询访问 AD 信息。无法通过这种方式强制执行 Access 对象的权限,但您当然可以根据 AD 成员身份控制应用程序流程/演示。请参阅此主题作为起点。此外,还有MS知识库这篇文章解释了 LDAP 方法。
顺便说一句,只要您不需要 AD 特定的功能(例如组织单位),您就根本不需要使用 AD。您可以使用常规 API 调用来获取组成员身份信息。请参阅此 Stackoverflow 帖子对于一些建议前进方向的代码(我无法验证该代码,因为它看起来相当省略,即不是 API 声明,但它给出了基本概念)。
答案2
无法在该级别直接与 AD 交互。您能直接做的最好的事情是根据 AD 帐户分配文件权限。通过 VBA 实现这一点需要付出一些努力,但肯定不是超出理解范围。我认为在解决这个问题之前,您应该对其进行相当扎实的 ROI 分析。