基本设置是经典的 - 您正在创建一个 Windows 窗体应用程序,它连接到一个数据库并执行各种企业级的事情。自然地,这样的应用程序将有许多用户在数据库中具有不同的访问权限,并且每个用户都有自己的登录名和密码。
那么如何实现呢?一种方法是为每个应用程序用户创建一个数据库登录,但这是一件非常严肃的事情,甚至需要数据库服务器的管理员权限等。如果数据库服务器托管多个应用程序,管理员很可能不会对此感到满意。
在网络世界中,通常人们会创建自己的“用户”表,其中包含所有必要的信息,并使用一个固定的数据库登录名进行所有交互。这对于 Web 应用程序来说很好,但是 Windows 窗体无法隐藏此主登录信息,从而完全否定安全性。 (它可以尝试隐藏,但所有这些尝试都可以通过一些努力轻松破解)。
所以...有中间道路吗?也许使用固定登录名登录,然后从检查用户名和密码的特殊存储过程提升权限?
补充: 好的,在大多数情况下,集成身份验证和 windows 组似乎是一个不错的选择,所以我接受了相关答案。不过,如果有人能提出非集成身份验证解决方案,他们会得到我的支持。
最佳答案
对于 WinForms,使用 Windows 组。不需要密码,因为凭据是使用您的应用程序从 Windows 登录中推断出来的。
基本上:
- 用户属于一个组(假设为单个域)
- 组是SQL实例中的登录名
- SQL 登录映射到数据库用户
- DB 用户属于一个 DB 角色
- 角色有对象权限
在有人 try catch 此处的所有信息之前,值得先阅读一下
编辑:
如果您有工作组,您仍然可以通过在 sqlbox 本地组中设置 sqlbox\bob、sqlbox\hans 等来实现。
当有人尝试连接时(比如 bob 在他的 PC 上),windows 将询问他们的详细信息。只要鲍勃知道他的 SQLbox 帐户详细信息,他就可以连接。
但是,我还没有在工作组设置中尝试过...
关于c# - 如何确保 Windows 窗体应用程序的数据库安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2486842/