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

时间:2020-03-05 18:49:40  来源:igfitidea点击:

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

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

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

解决方案

回答

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

回答

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

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

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

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

回答

@菲利普
我认为我们使用"接纳"一词大致相当于理解或者同意。与否认相反。

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

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

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

回答

我希望做的(我刚刚尝试过的)是刷新每个表的数据库链接,如下所示(注意:在此实验中,我已将ODCB连接切换到SQL Server身份验证,并将帐户添加到SQL Server:只读,不能进行任何更新,而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

似乎无论我先获得哪个许可,都会永久保留。如果我开始读写,然后进入只读状态,则该表仍具有读写权限

回答

我认为,如果我们使用" 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)文件,则访问似乎与连接信息有关。如果我们可以在启动时将其更改为"读/写",并且在会话期间不进行更改,则此解决方案应该可以使用。
  • 通过使用DSN-较少的连接,我们可以在代码中向用户隐藏凭据(假设我们为他们提供了mde文件,就可以了)。通常,对连接字符串进行硬编码不是一个好主意,但是由于我们要处理内部应用程序,因此我们可以使用这种方法。

回答

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