[英]How do I Use Count Function for different values of the same column in 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.