如何让 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何以不同用户的身份自动连接到 Bitbucket 以获取不同的存储库? [复制]
如何以通过 ed25519 识别的用户身份使用 MYSQL Workbench 连接到 MariaDB (10.5.8)?
如何使用 sqlplus 以 sysdba 身份连接到不同的 oracle 实例?