我有一个使用 mysql 后端的分布式 MsAccess 前端数据库。
它使用 Windows 系统 DSN ODBC 连接来连接到服务器。我所有的链接表都引用该 ODBC 连接。但问题是,他们都使用相同的用户名和密码,这些用户名和密码被硬编码到每台计算机中。
什么是更好的实现方式,以便每个用户都可以登录。
由于每个 DSN 连接都是“硬连接”的,我认为每次应用程序启动时重写注册表并不是一种安全的方式,因为应用程序崩溃时 DSN 设置将保留。
我不知道我是否可以在没有提示的用户名和密码的情况下离开系统 DSN,但是我们连接到四个不同的数据库,所以我不希望用户输入他们的信息四次,因为这只会让用户感到沮丧。
我在想也许我可以将系统 DSN 用户用作用户表的只读用户,或者最好是一个可以验证用户的过程,除非一旦验证我不确定我随后将如何连接每个表。我可以在 ODBC 连接字符串中存储全局变量吗?
使 MsAccess 更具用户意识的更好方法是什么?
(我查看了 MSACCESS 安全设置,但似乎 Microsoft 正在减弱它,我尝试建立它时将我完全锁定并且不提供任何形式的登录验证。我猜它只是使用 widows 登录作为安全但是这不是一个真正的解决方案)这里有一个免责声明:
Access 2010 安全简介 (office.microsoft.com)
访问和用户级安全
Access 不支持以新文件格式(.accdb 和 .accde 文件)创建的数据库的用户级安全性。但是,如果您在 Access 2010 中从早期版本的 Access 打开数据库并且该数据库应用了用户级安全性,则这些设置仍然有效。
重要通过使用用户级安全功能创建的权限不会保护您的数据库免受有恶意的用户的侵害,并且不打算作为安全屏障。使用此功能来提高数据库对受信任用户的可用性是合适的。为了帮助保护您的数据安全,请使用 Windows 文件系统权限只允许受信任的用户访问您的数据库文件或关联的用户级安全文件。
如果将数据库从具有用户级安全性的早期版本的 Access 转换为新文件格式,Access 会自动去除所有安全设置,并应用保护 .accdb 或 .accde 文件的规则。
最后,请记住,当您打开具有新文件格式的数据库时,所有用户都可以随时看到所有数据库对象。
据我了解,您希望为应用程序中的最终用户(“应用程序用户”)提供更加个性化的体验/环境,同时通过将用户身份验证过程与 OBDC DSN 连接凭证(“数据库”)相结合来提高安全性用户”)。
这种定制的用户环境通常是通过让您的最终用户使用您的应用程序对自己进行身份验证来实现的。
my_app_db.users
这通常是通过让用户在加载应用程序时输入用户名和密码(通常存储在表中)来完成的。在应用程序用户身份验证发生之前,应用程序本身(或机器)需要与数据库服务器建立连接。此“数据库用户”通常通过以下方式实现:
CREATE
和GRANT
权限(通常是 root 用户)的数据库凭据,以便安装程序可以创建它需要的数据库用户。至于安全性,最小权限规则在这里很重要:这个数据库用户应该只被授予应用程序正常运行所需的最少权限(即 SELECT、INSERT、UPDATE,也许还有 DELETE,并且仅针对应用程序的数据库,从不系统/主数据库)。
这与不在最终用户机器上以纯文本形式存储数据库凭据相结合,可以保护您的应用程序免受未经授权的访问。请记住,如果恶意用户获得了对安装了您的应用程序的计算机的本地管理员访问权限,那么游戏就结束了:他们可能会将该连接字符串从内存中提取出来解密,甚至嗅探网络接口上的 MySQL 流量以获取数据库用户的凭据,此时,这取决于您对该用户的限制程度(好吧,希望 MySQL 会定期打补丁)以及攻击者的复杂程度和决心。
请记住,许多数据库应用程序将使用应用程序服务器,本质上是中间的“守卫”,代表客户端代理与数据库的连接。这通常是出于性能/可扩展性原因而完成的,但也有一个安全优势,因为数据库服务器可以隔离/仅限于应用程序服务器,没有最终用户客户端可以直接访问它。
至于 ODBC DSN 选项和 MySQL,我不太了解可用的选项。但是,在更高版本的 MySQL中似乎确实支持 Windows Native 身份验证。
我已经成功地将带有安全证书的 MySQL/NET 连接器与 MySQL 和 ASP.NET 应用程序结合使用,但是我不知道它是否完全扩展到 Microsoft Access;您可能必须在那里编写一些 .NET 胶水。
并且当/如果涉及到细节时,您最好在那时询问Stack Overflow 。
希望这可以帮助。