3

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

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

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

4

6 回答 6

5

如果您使用“ODBC DSN-LESS 连接”,我认为您可以按照您想要的方式工作

如果需要,请使用 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 文件,您应该没问题)。通常硬编码连接字符串不是一个好主意,但是由于您正在处理内部应用程序,因此您应该可以接受这种方法。

于 2008-09-30T14:14:16.913 回答
0

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

于 2008-09-09T00:37:32.720 回答
0

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

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

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

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

于 2008-09-16T15:13:31.293 回答
0

@Philippe
我假设您使用“承认”一词大致相当于理解同意与否认相反。

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

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

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

于 2008-09-16T22:10:31.023 回答
0

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

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

似乎无论我首先获得的许可是什么,都会永久存在。如果我开始读写然后转到只读,则该表仍具有读写权限

于 2008-09-17T16:31:23.920 回答
0

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

于 2008-10-17T07:43:54.753 回答