【问题标题】:通过 VBA 插入记录,无需 SQL 身份验证
【发布时间】:2022-01-23 08:27:01
【问题描述】:

我维护一个 SQL Server 数据库,该数据库用作由几十个用户组成的团队的工作流工具。这些用户通过 MS Access 前端和 Windows 身份验证与数据库交互。该流程的一部分要求公司中的任何人(超过 10,000 人)都需要能够通过所有人都可以使用的 Excel 表格提交工作和反馈。为了适应这一点,我们使用了一个 SQL Authenticated 服务帐户,该服务帐户仅被允许写入所需的目标表。它使用如下所示的连接脚本:

conn.Open "Provider=SQLOLEDB; SERVER=[ServerAddress]; DATABASE=[DatbaseName]", [ServiceAccountName], [ServiceAccountPassword]

多年来一直运行良好。然而,现在 IT 想要禁止使用服务帐户,并完全依赖 Windows 身份验证。他们要求我停用服务帐户,而我正试图弄清楚如何才能做到这一点。

我的第一个想法是我应该能够使用来宾用户帐户来代替服务帐户。我确保来宾帐户在数据库中处于活动状态,授予它对目标表的插入权限,并将连接脚本更改为:

conn.Open "Provider=SQLOLEDB; SERVER=[ServerAddress]; DATABASE=[DatbaseName]; Trusted_Connection=yes"

这在我使用它时有效,但对于在数据库中没有 Windows Authenticated 登录的任何用户都失败了。他们收到的错误是“[user] 登录失败”。

所以,我的基本问题是,我想要完成的工作是否可行?可以使用来宾帐户代替 SQL Authenticated 服务帐户吗?如果是这样,我是否在这里遗漏了一些明显的东西?如果没有,是否有更好的方法允许没有数据库登录权限的用户提交?

感谢阅读。任何建议将不胜感激。

编辑:为了澄清这里的目标,我需要能够允许公司的任何成员提交工作记录。我无法假设对这些用户有任何了解,包括他们可能属于哪些 Active Directory。基本上,对于数据库无法识别的任何用户,我都需要一个“其他”类别。我希望来宾帐户可能是实现此目的的一种方式。

【问题讨论】:

  • 这在我使用它时有效,但对于在数据库中没有 Windows Authenticated 登录的任何用户都失败了。他们收到的错误是“[user] 登录失败” .. 这是设计使然,WinAuth 完全按照它应该的方式工作!现在管理员可以通过 AD 安全组成员身份维护用户权限 - 没有访问权限的用户现在成为他们的(管理员)来处理。
  • 您可以将域组/用户组作为 SQL Server 中的“登录名”。换句话说,创建一个 Windows 域组,将所有用户分配给它。为此组授予 SQL Server 登录名并授予权限。然后所有用户都可以登录到 SQL Server。
  • Re“基本上,我需要为任何未被数据库识别的用户设置一个“其他”类别。”:这正是 IT 试图通过禁止“服务帐户”来防止的。您不应让未经批准的用户访问您的数据库,并且不应让多个用户共享相同的凭据。无论如何,这看起来像你想要的:sites.google.com/site/jayantdass/…

标签: sql-server windows-authentication


【解决方案1】:

为了澄清这里的目标,我需要能够允许公司的任何成员提交工作记录。我无法假设对这些用户有任何了解,包括他们可能属于哪些 Active Directory。

您需要通过为 AD 安全组添加登录来解决此问题。如果您在多个 AD 域中有用户,则每个域可能需要一个组。但是您应该在 AD 中找到合适的“全局”组,也许是内置的 Domain Users 安全组。

【讨论】:

  • 感谢您的建议。我肯定需要咨询 IT 部门,以了解我们的 AD 结构是什么样的。我们的员工分布在几十个国家的多个部门,所以我不愿在这里做出假设。
  • 这样做。甚至微软也只有少数几个域。所以可能还不错。
  • @AllenR.Brady 在最坏的情况下,正如 David 建议的那样,您甚至可以使用 Domain Users Active Directory 组,这是域中所有用户的默认全包组。
猜你喜欢
  • 2016-08-24
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多