2010-08-10 57 views
1

许多桌面应用程序使用SQL表来管理他们的用户权限和角色。事实上,它们限制了在应用程序代码中访问应用程序的某些部分。这意味着他们需要一个具有最大权限的连接字符串到SQL服务器。什么是数据库桌面应用程序权限管理的最佳途径?

我的目标是C#2010,SQL Server 2005或2008

如果有任何原因,有人发现了什么是连接字符串?(网络跟踪,软件黑客,前员工或...),他可以改变一切只有管​​理工作室,你无法了解哪个客户端。如果你想改变连接字符串。您必须在许多客户端执行此操作,并且在您需要重新编译应用程序的不良设计中。

所以我想知道在表中使用真正的SQL登录而不是用户名和密码是个好主意吗?通过SQL登录为每个用户建立连接字符串?

这样就不用担心松动连接字符串。同样在SQL代码中,您可以使用GetUser()函数来指示哪个用户真的毁了查询?

但是这样管理权限可能很困难,因为没有简单的表来管理权限和用户。

在一个长句中。我想知道以管理权限的方式验证桌面应用程序用户的最佳方式是什么以及sql server可以记录用户活动?

回答

1

只要有可能,请使用Windows身份验证。

定义角色。将组添加到角色。将用户添加到组(按照通常的Windows管理文件系统权限的方式)。

Choosing an Authentication Mode

参见:Application Roles

+0

Windows身份验证意味着每个可能的用户都需要添加到数据库中。在这种情况下不是一个非常易于维护的解决方案... – jeroenh 2010-08-10 10:09:18

+2

@jeroenh:SQL上的Windows身份验证可以使用安全组。您不必逐个添加每个用户(并且许多组织已经具有定义的合适组)。 – 2010-08-10 10:21:18

0

您可以加密你的app.config文件的敏感部分。上次我检查时,你必须经历一些环节,但这并不难。

见例如this question

+0

只要您失去对软件执行环境的控制权,就不能保密,因为您的应用程序知道的所有内容都可以被攻击者访问。例如,通过使用调试器,或通过使进程核心转储。你只能让它难以脱身。 – MauganRa 2016-06-15 13:10:19

0

为了获得最佳的安全性,需要每个用户一个专用数据库帐户;每个帐户只应具有相应用户可能执行的任务所需的特权。通常您授予角色权限(例如“职员”,“经理”,“主管”)并将这些角色授予用户。显然,它需要一些工作来确定每个角色需要哪些权限。在很多情况下,可能有必要不允许直接访问某些表,但仅限于隐藏某些不应该对该角色可见的部分的数据库视图,或者不允许执行一些额外检查的存储过程,并确保每个事务作为一个整体进行处理。

相关问题