Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确保Windows窗体应用程序的数据库安全性?_C#_.net_Sql Server_Winforms_Security - Fatal编程技术网

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

C# 如何确保Windows窗体应用程序的数据库安全性?,c#,.net,sql-server,winforms,security,C#,.net,Sql Server,Winforms,Security,基本设置是经典的-您正在创建一个Windows窗体应用程序,该应用程序连接到DB并执行各种enterprise-y操作。当然,这样的应用程序将有许多用户在数据库中拥有不同的访问权限,每个用户都有自己的登录名和密码 那么,如何实现这一点呢?一种方法是为每个应用程序用户创建一个DB登录,但这是一件非常严肃的事情,甚至需要DB服务器上的管理员权限,等等。如果DB服务器承载多个应用程序,管理员很可能对此不满意 在网络世界中,人们通常创建自己的“用户”表,其中包含所有必要的信息,并使用一个固定的DB登录进

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

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

在网络世界中,人们通常创建自己的“用户”表,其中包含所有必要的信息,并使用一个固定的DB登录进行所有交互。这对于web应用程序来说很好,但是windows窗体无法隐藏主登录信息,从而完全否定了安全性。(它可以试图隐藏,但只要稍加努力,所有这些尝试都很容易被打破)

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


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

您不能使用Active Directory组来简化数据库连接的管理吗

从MSDN

该名称可以是DOMAIN\name格式的Windows用户名或Windows组名

这样的话,你可能会有几个小组,只读,编辑,经理,管理员等。这就是我如何在过去的点击一次应用程序实现类似的事情

这真的是你所做的最好的选择

我假设这是一个现有的应用程序?若它是新的,我会说它是带有web服务或类似服务的客户机服务器


PK:-)

您不能使用Active Directory组来简化数据库连接的管理吗

从MSDN

该名称可以是DOMAIN\name格式的Windows用户名或Windows组名

这样的话,你可能会有几个小组,只读,编辑,经理,管理员等。这就是我如何在过去的点击一次应用程序实现类似的事情

这真的是你所做的最好的选择

我假设这是一个现有的应用程序?若它是新的,我会说它是带有web服务或类似服务的客户机服务器


PK:-)

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

这是

基本上:

  • 用户属于某个组(假定为单个域)
  • 组是SQL实例中的登录名
  • SQL登录映射到数据库用户
  • 数据库用户属于数据库角色
  • 角色具有对象权限
在有人试图捕获这里的所有信息之前,先阅读一下是值得的

编辑:

如果您有一个工作组,您仍然可以通过在sqlbox本地组中设置sqlbox\bob、sqlbox\hans等来完成

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


但是,我还没有在工作组设置中尝试过这一点…

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

这是

基本上:

  • 用户属于某个组(假定为单个域)
  • 组是SQL实例中的登录名
  • SQL登录映射到数据库用户
  • 数据库用户属于数据库角色
  • 角色具有对象权限
在有人试图捕获这里的所有信息之前,先阅读一下是值得的

编辑:

如果您有一个工作组,您仍然可以通过在sqlbox本地组中设置sqlbox\bob、sqlbox\hans等来完成

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


但是,我还没有在工作组设置中尝试过这一点…

除了使用Windows域/AD组(将AD组置于SQL Server中创建的适当角色中,以便所有帐户维护都移动到AD),这允许您查看哪些应用程序正在探查器中执行操作等


因为当每个人都以自己的身份从不同的应用程序(windows和web)登录时,它有助于了解其操作是通过应用程序进行的,而不仅仅是通过ODBC和Excel(例如,如果您允许用户访问某些视图以导出数据或编写报告)进行的任何用户临时查询.

除了使用Windows域/AD组(将AD组置于您在SQL Server中创建的适当角色中,以便所有帐户维护移动到AD)-这允许您查看哪些应用程序正在探查器中执行操作等


因为当每个人都以自己的身份从不同的应用程序(windows和web)登录时,它有助于了解其操作是通过应用程序进行的,而不仅仅是通过ODBC和Excel(例如,如果您允许用户访问某些视图以导出数据或编写报告)进行的任何用户临时查询.

关于隐藏身份验证并使用WinForms的单个应用程序登录,如果登录权限很小-仅在视图上选择,仅在存储过程上执行,任何在应用程序中对登录信息的加密进行反向工程的人都只能执行与在应用程序中相同的功能。如果你必须提高安全级别,你可以认证