Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何让ms access以不同的用户身份连接到ms sql?_Sql Server_Ms Access_Odbc - Fatal编程技术网

Sql server 如何让ms access以不同的用户身份连接到ms sql?

Sql server 如何让ms access以不同的用户身份连接到ms sql?,sql-server,ms-access,odbc,Sql Server,Ms Access,Odbc,如何让ms access以不同于其Active Directory ID的用户身份(通过ODBC)连接到ms sql数据库 我不想在ODBC连接中指定帐户,我想在ms access端这样做,以对我的用户隐藏它。在ODBC连接中这样做会让我回到我试图避免的原始状态 是的,这与前面的一个问题有关:我认为您必须在要用于连接的帐户下启动MS Access进程。有各种工具可以让您实现这一点,例如。此工具还可以让您加密密码。我们承认您正在使用ODBC连接到数据库,并启用了集成安全性,因此您没有/不想在连接字

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

我不想在ODBC连接中指定帐户,我想在ms access端这样做,以对我的用户隐藏它。在ODBC连接中这样做会让我回到我试图避免的原始状态


是的,这与前面的一个问题有关:

我认为您必须在要用于连接的帐户下启动MS Access进程。有各种工具可以让您实现这一点,例如。此工具还可以让您加密密码。

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

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

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

使用Access时,您可以在运行时决定是打开可更新表还是只读视图。例如,可以在运行时,在
form_Open
事件中,通过将form recordsource设置为表或视图来完成此操作。

@Philippe
我假设您使用的单词“承认”大致等同于“理解”或“同意”;与否定相反

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

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

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

我希望做的是(我刚刚尝试过)刷新每个表的数据库链接,就像这样(注意:在本次实验中,我已将ODCB连接切换到SQL Server身份验证,并将帐户也添加到SQL Server:readonly-无法更新,以及readwrite-在表上具有完全权限)

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

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

似乎无论我首先连接哪个权限,它都会一直保持不变。如果我开始读写,然后转到只读,则表仍保留读写权限

如果使用

如果需要,请使用windows身份验证将ODBC DSN保留在用户的计算机上。为用户提供对数据库的只读访问权限。(如果用户创建新mdb文件并链接表,则只能读取数据。)

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

编写一个VBA例程,在链接表上循环并重置连接以使用SQL登录,但一定要使用“无DSN”语法

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

关于这种方法的几点注意事项:

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

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


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

非常有希望。这需要我的“快到了"下面的解决方案更进一步。我稍后会测试它,如果它有效,将授予验收。谢谢。我现在有集成安全工作,但我想阻止用户在我的应用程序之外编辑数据。你知道如何通过正在使用的客户端应用程序限制它吗?你可以在sql server中创建一个有权编辑的应用程序角色然后从应用程序中激活该角色。使用sp_setapprole存储过程激活该角色。请签出
myTable.Connect = _
                "ODBC;" & _
                "DATABASE=" & "MyTestDB" & ";" & _
                "UID=readwrite;" & _
                "PWD=readwrite_password;" & _
                "DSN=" & "MyTestDB" & ";"
myTable.RefreshLink
"ODBC;Driver={SQL Native Client};" &
       "Server=MyServerName;" & _
       "Database=myDatabaseName;" & _
       "Uid=myUsername;" & _
       "Pwd=myPassword"