如何以与Active Directory ID不同的用户的身份将ms-access连接(通过ODBC)连接到ms-sql数据库?
我不想在ODBC连接中指定一个帐户,我想在ms-access端进行操作以将其隐藏在我的用户之外。在ODBC连接中执行此操作会让我回到我想要避免的原始状态。
是的,这与上一个问题有关:http://www.stackoverflow.com/questions/50164/
答案 0 :(得分:5)
如果您使用"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)文件,则访问似乎存在连接信息问题。如果您可以在启动时将其更改为读/写,而不是在会话期间更改此解决方案,则此解决方案应该可以正常工作。
通过使用DSN - Less连接,您可以在代码中隐藏用户的凭据(假设您给他们一个mde文件,您应该没问题)。通常硬编码连接字符串不是一个好主意,但由于你正在处理一个内部应用程序,你应该可以使用这种方法。
答案 1 :(得分:0)
我认为您必须在要用于连接的帐户下启动MS Access流程。您可以使用各种工具执行此操作,例如CPAU。此工具也允许您加密密码。
答案 2 :(得分:0)
我们在此承认您正在使用ODBC连接到您的数据库并启用了集成安全性,因此您没有/不想在连接字符串中写入用户名/密码值(这是根据我的权利)选择)。
在这种情况下,幸运的是,在连接数据时无法“模拟”其他用户。承认我能够做出这样的事情将是集成安全性的巨大突破!
我从您之前的帖子中了解到,您希望用户能够更新数据,具体取决于他们使用的客户端界面。据我所知,我们的想法是为每个表创建一个链接的“不可更新”视图。假设对于每个名为Table_Blablabla
的表,您创建一个名为View_Table_Blablabla
的视图(= Access中的查询...)。
使用Access时,您可以在运行时决定是否要打开可更新表或只读视图。这可以在运行时,在form_Open
事件中,通过将表单recordsource设置为表或视图来完成。
答案 3 :(得分:0)
@Philippe
我假设您使用承认一词大致相当于理解或者同意;而不是否认的反面。
我理解让所有用户使用一个ID和密码登录数据库(并将它们存储在应用程序中)的含义。对我而言,这比我现在面临的问题风险小。
@off
问题的更多背景知识: 我使用Windwos NT身份验证在每个用户工作站上设置了ODBC连接。大多数情况下,用户使用MDE设置连接以使用该ODBC连接 - 在这种情况下,他们总是能够添加/更新/删除数据。
问题在于,一些用户对MS-Access有足够的了解,可以创建新的mdb并将其链接到MS-SQL服务器。然后,他们可以在表格中编辑数据,而不是通过执行一定量验证和手持的应用程序。而且他们喜欢这样做,但有时会把它搞得一团糟而且会给我带来麻烦。
答案 4 :(得分:0)
我希望做的(我刚刚尝试过)是为每个表刷新数据库的链接(注意:我已将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,则表保持读写权限
答案 5 :(得分:0)
为什么不使用集成/ Windows安全性。您可以向活动目录组授予您希望用户使用的权限,然后将用户帐户添加到该组。我相信你还可以使用sql server的角色功能来限制基于正在使用的客户端应用程序的功能。