繁体   English   中英

如何获取ms-access作为其他用户连接到ms-sql?

[英]How do I get ms-access to connect to ms-sql as a different user?

我如何获得ms-access连接(通过ODBC)作为与其Active Directory ID不同的用户连接到ms-sql数据库?

我不想在ODBC连接中指定一个帐户,我想在ms-access端进行该操作以将其隐藏在我的用户之外。 在ODBC连接中执行此操作会让我重新回到我想要避免的原始状态。

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

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

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

我认为您必须在要用于连接的帐户下启动MS Access流程。 有各种工具可以让你这样做,比如CPAU 此工具也允许您加密密码。

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

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

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

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

@Philippe
我假设你使用admit这个词大致等同于理解或者同意 ; 否认相反。

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

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

问题在于,一些用户已经足够了解MS-Access以创建新的mdb并将其链接到MS-SQL服务器。 然后,他们可以在表格中编辑数据,而不是通过执行一定量验证和手持的应用程序。 而且他们喜欢这样做,但有时会把它弄得乱七八糟,给我带来麻烦。

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

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

这会阻止他们编辑,但我无法让以后的readwrite工作

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

看来,无论我先与谁联系,都要坚持不懈。 如果我开始readwrite然后转到readonly,则表保持readwrite权限

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM