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

Vil*_*lx- 1 .net c# sql-server security winforms

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

那你怎么实现这个呢?一种方法是创建每个应用程序用户数据库的登录,但是这是一个非常严重的事情,甚至需要DB服务器等对管理员权限如果DB服务器承载多个应用程序时,管理员是很可能不被对此感到高兴.

在Web世界中,通常会创建自己的"用户"表,其中包含所有必需的信息,并使用一个固定的DB登录进行所有交互.这对于Web应用程序来说都很不错,但是Windows窗体无法隐藏此主登录信息,完全否定了安全性.(它可以试图隐藏,但所有这些尝试都很容易被打破).

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

补充:好的,因此集成的身份验证和Windows组在大多数情况下似乎是一个公平的选择,所以我接受了相关的答案.尽管如此,如果任何人都可以提出非集成的身份验证解决方案,他们将获得我的支持.

gbn*_*gbn 8

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

这是最佳做法

基本上:

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

在有人试图捕获所有信息之前,首先值得一读

编辑:

如果你有一个工作组,你仍然可以通过在sqlbox本地组中设置sqlbox\bob,sqlbox\hans等来实现.

当有人试图连接(比如他的电脑上的bob)时,窗户会询问他们的详细信息.只要bob知道他的SQLbox帐户详细信息,他就可以连接.

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