c# - 如何确保 Windows 窗体应用程序的数据库安全?

标签 c# .net sql-server winforms security

基本设置是经典的 - 您正在创建一个 Windows 窗体应用程序,它连接到一个数据库并执行各种企业级的事情。自然地,这样的应用程序将有许多用户在数据库中具有不同的访问权限,并且每个用户都有自己的登录名和密码。

那么如何实现呢?一种方法是为每个应用程序用户创建一个数据库登录,但这是一件非常严肃的事情,甚至需要数据库服务器的管理员权限等。如果数据库服务器托管多个应用程序,管理员很可能不会对此感到满意。

在网络世界中,通常人们会创建自己的“用户”表,其中包含所有必要的信息,并使用一个固定的数据库登录名进行所有交互。这对于 Web 应用程序来说很好,但是 Windows 窗体无法隐藏此主登录信息,从而完全否定安全性。 (它可以尝试隐藏,但所有这些尝试都可以通过一些努力轻松破解)。

所以...有中间道路吗?也许使用固定登录名登录,然后从检查用户名和密码的特殊存储过程提升权限?

补充: 好的,在大多数情况下,集成身份验证和 windows 组似乎是一个不错的选择,所以我接受了相关答案。不过,如果有人能提出非集成身份验证解决方案,他们会得到我的支持。

最佳答案

对于 WinForms,使用 Windows 组。不需要密码,因为凭据是使用您的应用程序从 Windows 登录中推断出来的。

这是 best practice

基本上:

  • 用户属于一个组(假设为单个域)
  • 组是SQL实例中的登录名
  • SQL 登录映射到数据库用户
  • DB 用户属于一个 DB 角色
  • 角色有对象权限

在有人 try catch 此处的所有信息之前,值得先阅读一下

编辑:

如果您有工作组,您仍然可以通过在 sqlbox 本地组中设置 sqlbox\bob、sqlbox\hans 等来实现。

当有人尝试连接时(比如 bob 在他的 PC 上),windows 将询问他们的详细信息。只要鲍勃知道他的 SQLbox 帐户详细信息,他就可以连接。

但是,我还没有在工作组设置中尝试过...

关于c# - 如何确保 Windows 窗体应用程序的数据库安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2486842/

相关文章:

c# - 如何使用 Automapper 将原型(prototype)文件重复类型的属性映射到 C# 类的列表属性?

c# - 什么是隐式泛型类型参数

.net - MVC 应用程序中的前端字段对齐

c# - 将实体(和相应的表)添加到 EF DB-first 模型

mysql - 塑料SCM MySQL设置

c# - 将查询结果传递给 View 的最佳实践?

c# - 在c#中获取Powershell脚本的错误并用条件语句输出它?

.net - .NET 中队列 <T> 的大小限制?

.net - 如何在没有数据上下文的情况下更新对象

sql - 匿名访问azure表