如何让 ms-access 以其他用户身份连接到 ms-sql?

Posted

技术标签:

【中文标题】如何让 ms-access 以其他用户身份连接到 ms-sql?【英文标题】:How do I get ms-access to connect to ms-sql as a different user? 【发布时间】:2008-09-08 21:51:02 【问题描述】:

如何让 ms-access 以不同于其 Active Directory ID 的用户身份连接到 ms-sql 数据库(通过 ODBC)?

我不想在 ODBC 连接中指定帐户,我想在 ms-access 端执行此操作以对我的用户隐藏它。在 ODBC 连接中执行此操作会使我回到我试图避免的原始情况。

是的,这与之前的问题有关:http://www.***.com/questions/50164/

【问题讨论】:

【参考方案1】:

如果你使用"ODBC DSN-LESS connection",我认为你可以让它按照你想要的方式工作

如果需要,请使用 Windows 身份验证将 ODBC DSN 保留在用户计算机上。授予您的用户对您的数据库的只读访问权限。 (如果他们创建一个新的 mdb 文件并链接表,他们将只能读取数据。)

创建一个对您的数据库具有读/写权限的 SQL 登录。

编写一个 VBA 例程,循环遍历您的链接表并重置连接以使用您的 SQL 登录,但请务必使用“DSN-Less”语法。

"ODBC;Driver=SQL Native Client;" &
       "Server=MyServerName;" & _
       "Database=myDatabaseName;" & _
       "Uid=myUsername;" & _
       "Pwd=myPassword"

将此例程作为启动代码的一部分调用。

关于这种方法的几点说明:

一旦您从读/写更改为只读并尝试在不关闭并重新打开数据库 (mde/mdb) 文件的情况下返回读/写,Access 似乎存在连接信息问题。如果您可以在启动时将其更改为读/写,并且在会话期间不更改,则此解决方案应该可以工作。

通过使用 DSN - Less 连接,您可以在代码中隐藏用户的凭据(假设您给他们一个 mde 文件,您应该没问题)。通常硬编码连接字符串不是一个好主意,但由于您正在处理内部应用程序,因此您应该可以接受这种方法。

【讨论】:

非常有前途。这使我的“几乎在那里”解决方案更进一步。稍后我将对其进行测试,如果有效,则授予接受。谢谢。【参考方案2】:

我认为您必须在要用于连接的帐户下启动 MS Access 进程。有多种工具可让您执行此操作,例如 CPAU。这个工具也可以让你加密密码。

【讨论】:

【参考方案3】:

我们在这里承认您正在使用 ODBC 连接到您的数据库并启用集成安全性,因此您没有/不想在连接字符串中写入用户名/密码值(根据我的权利选择)。

在这种情况下,幸运的是在连接到数据时无法“模拟”另一个用户。和我一起承认,能够做出这样的事情将是集成安全性的一个巨大突破!

我从您之前的帖子中了解到,您希望用户能够更新或不更新数据,具体取决于他们使用的客户端界面。据我说,这个想法是为每个表创建一个链接的“不可更新”视图。假设为每个名为Table_Blablabla 的表创建一个名为View_Table_Blablabla 的视图(= Access 中的查询)...)。

使用 Access 时,您可以在运行时决定是要打开可更新表还是只读视图。例如,这可以在运行时,在form_Open 事件中,通过将表单记录源设置为表或视图来完成。

【讨论】:

【参考方案4】:

@菲利普 我假设您使用 admit 这个词大致相当于 理解 或者可能是 agree;与deny相反。

我了解让所有用户使用一个 ID 和密码登录数据库(并将它们存储在应用程序中)的含义。对我来说,这比我现在面临的问题风险要小。 @off

问题的更多背景: 我使用 Windwos NT 身份验证在每个用户工作站上设置了 ODBC 连接。大多数情况下,用户使用 MDE 设置进行连接以使用该 ODBC 连接 - 在这种情况下,他们总是能够添加/更新/删除数据。

问题在于,一些用户受过足够的 MS-Access 教育,可以创建新的 mdb 并将其链接到 MS-SQL 服务器。然后,他们可以直接在表格中编辑数据,而不是通过执行一定数量验证和手持操作的应用程序。他们喜欢这样做,但有时会搞砸并给我带来麻烦。

【讨论】:

【参考方案5】:

我希望做的(我刚刚尝试过)是为每个表刷新到数据库的链接(注意:我已将 ODCB 连接切换到此实验的 SQL Server 身份验证,并添加SQL 服务器的帐户:readonly - 不能进行任何更新,readwrite - 对表具有完全权限)。

myTable.Connect = _
                "ODBC;" & _
                "DATABASE=" & "MyTestDB" & ";" & _
                "UID=readonly;" & _
                "PWD=readonly_password;" & _
                "DSN=" & "MyTestDB" & ";"
myTable.RefreshLink

这会阻止他们进行编辑,但我无法让以后的读写工作

myTable.Connect = _
                "ODBC;" & _
                "DATABASE=" & "MyTestDB" & ";" & _
                "UID=readwrite;" & _
                "PWD=readwrite_password;" & _
                "DSN=" & "MyTestDB" & ";"
myTable.RefreshLink

似乎无论我先连接哪个权限,都会永久保留。如果我开始读写然后转到只读,则该表仍具有读写权限

【讨论】:

【参考方案6】:

为什么不使用集成/Windows 安全性。您可以授予活动目录组您希望用户的权限,然后将用户帐户添加到该组。我相信除此之外您还可以使用 sql server 的角色功能来根据正在使用的客户端应用程序来限制功能。

【讨论】:

我现在已经集成了安全功能,但我想阻止用户在我的应用程序之外编辑数据。知道您如何通过正在使用的客户端应用程序来限制它吗? 您可以在 sql server 中创建一个应用程序角色,该角色将有权编辑数据,然后从您的应用程序中激活该角色。该角色是使用 sp_setapprole 存储过程激活的。查看support.microsoft.com/kb/308312

以上是关于如何让 ms-access 以其他用户身份连接到 ms-sql?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PL/SQL 中连接到另一个用户

如何以不同用户的身份自动连接到 Bitbucket 以获取不同的存储库? [复制]

如何以通过 ed25519 识别的用户身份使用 MYSQL Workbench 连接到 MariaDB (10.5.8)?

如何使用 sqlplus 以 sysdba 身份连接到不同的 oracle 实例?

是否可以使用 PEM 文件以 root 用户身份连接到 ec2 实例?

如何在线获取静态 MS-Access DB 并使用 PHP 连接到它?