我有一个分布式MsAccess前端数据库,它使用mysql后端。
它使用Windows系统DSN ODBC连接连接到服务器。我的所有链接表都引用了该ODBC连接。问题是,他们都使用相同的用户名和密码,这是硬编码到每台计算机。
什么是更好的方式来实现它,使每个用户获得它的登录。
因为每个DSN连接都是“硬连线”的,我不认为每次应用程序启动时重写注册表都是一种安全的方式,因为应用程序崩溃时DSN设置将保持不变。
我不知道我是否可以离开没有用户名和密码的系统DSN提示符,但我们连接到四个不同的数据库,所以我不希望用户输入他们的信息四次,因为这只会使用户沮丧。
我在想,也许我可以使用系统DSN用户作为用户表的只读,或者最好是一个验证用户的过程,除非一旦验证了,我不确定以后如何连接每个表。我可以在ODBC连接字符串中存储一个全局变量吗?
有什么更好的方法可以让MsAccess更好地了解用户呢?
(我查看了MSACCESS的安全设置,但是,微软似乎正在放弃这一设置,我试图建立它将我完全锁在门外,不存在任何形式的登录验证。我想它只是使用寡妇登录作为安全,但这不是一个真正的解决方案),这里有一个免责声明:
Access 2010安全性简介(office.microsoft.com)
访问和用户级安全访问不支持以新文件格式(.accdb和.accde文件)创建的数据库的用户级安全性。但是,如果您在Access 2010中从早期版本的Access打开数据库,并且该数据库具有用户级别的安全性,则这些设置仍将发挥作用。使用用户级安全功能创建的重要权限不会保护数据库免受恶意用户的攻击,也不打算用作安全屏障。使用此特性来提高数据库对受信任用户的可用性是合适的。要帮助确保数据安全,只允许受信任的用户使用Windows文件系统权限访问数据库文件或相关的用户级安全文件。如果您将数据库从具有用户级别安全性的早期访问版本转换为新的文件格式,则Access将自动删除所有安全设置,并应用保护.accdb或.accde文件的规则。最后,请记住,当您打开具有新文件格式的数据库时,所有用户都可以随时查看所有数据库对象。
发布于 2012-09-04 22:04:09
据我所知,您希望为应用程序中的最终用户(“应用程序用户”)提供更个性化的体验/环境,同时通过将用户身份验证过程与OBDC DSN连接凭据(“数据库用户”)耦合起来来提高安全性。
这种定制的用户环境通常是通过让最终用户使用应用程序对自己进行身份验证来实现的。这通常是通过用户在应用程序加载时输入用户名和密码(通常存储在my_app_db.users表中)来实现的。
在进行此应用程序用户身份验证之前,应用程序本身(或计算机)需要与数据库服务器建立连接。这种“数据库用户”通常是通过以下方式实现的:
CREATE和GRANT权限(通常是根用户),以便安装程序能够创建所需的数据库用户。在安全性方面,最小特权规则在这里很重要:该数据库用户只应获得应用程序正确工作所需的最少权限(即选择、插入、更新和删除,而只有应用程序的数据库,而不是系统/主数据库(S))。
这与在最终用户计算机上不以纯文本形式存储数据库凭据相结合,可以保护应用程序免受未经授权的访问。请记住,如果恶意用户获得了本地管理员对安装应用程序的机器的访问权限,那么游戏就结束了:他们可能会将连接字符串从已解密的内存中拔出,甚至从网络接口上的嗅探MySQL流量中提取出来,以获取数据库用户的凭据。在这一点上,取决于您对该用户的限制程度(希望MySQL定期进行修补),以及攻击者的复杂程度和确定程度。
请记住,许多数据库应用程序将使用应用服务器,本质上是中间的“监视警卫”,它代表客户端代理与数据库的连接。这通常是出于性能/可伸缩性的原因,但也有一个安全好处,即数据库服务器只能被隔离/限制在应用服务器上,并且没有最终用户客户端可以直接访问它。
至于ODBC选项和MySQL,我不太熟悉可用的内容。然而,在后来的Windows本机身份验证支持版本中,似乎确实存在MySQL。
不过,我已经成功地将MySQL/NET连接器与安全证书与MySQL和ASP.NET应用程序结合使用,但我不知道这是否扩展到Microsoft;您可能需要在那里编写一些.NET胶水。
如果具体到了具体情况,那么最好在堆栈溢出上询问一下。
希望这能有所帮助。
https://serverfault.com/questions/424276
复制相似问题