当Windows身份验证不是一个选项时,MS-SQL上的最佳做法是什么?

时间:2008-11-06 01:31:37

标签: sql-server

使用SQL Server身份验证的Windows应用程序的最佳选择是什么?我应该创建一个SQL帐户并管理应用程序内的用户(使用users表)。或者我应该为每个用户创建一个SQL Server帐户。你有什么经历?谢谢!

3 个答案:

答案 0 :(得分:3)

取决于SQL服务器的用户名/密码是否会向用户公开,以及这是否有问题。通常对于内部应用程序(在较小的组织中),人们会相信用户不会直接登录到sql server。如果您有中间件层(即webservices),则可以向用户隐藏密码。

我更喜欢使用数据库的常规登录并管理应用程序中的用户。即使你为每个应用程序用户创建了一个sql登录,他们仍然可以直接连接,所以为什么不使用更易于管理的通用sql登录。这当然是假设所有用户都具有相同的访问权限。

如果用户可能直接访问数据库,那么一个好的做法是仅通过存储过程授予访问权限,而不是直接授予表,因此只能执行某些操作。避免在存储过程中编写业务逻辑或安全检查(基本的除外)。

我解决问题的一种方法是编写一些检查安全性的网络服务并执行CRUD(通过数据集等),但这又取决于应用程序和环境。

总之,如果您有中间层或所有用户具有相同的访问权限,则在应用程序中管理用户并使用单个用户登录。否则,请按用户或角色使用登录。

答案 1 :(得分:0)

如何根据任务所需的权限级别拥有SQL帐户。例如,如果您的系统有大量报告,您可以拥有一个仅用于报告的只读帐户。您还需要一个帐户,该帐户具有人们更改其密码和其他用户管理任务的写入权限。

如果您遇到某些用户只能访问某些数据的情况,我会为该数据分别设置帐户。使用1帐户的问题是您说应用程序中的任何位置都没有SQL注入。这是每个人都会努力的事情,但有时候完美的安全是不可能的,因此是多管齐下的方法。

答案 2 :(得分:0)

我过去使用的一个选项是使用ASP.NET成员资格提供程序。它使身份验证变得轻而易举。我看到的唯一缺点是它在你的数据库中添加了一堆表。

使用它的代码非常简单。

这是一篇关于在Windows应用中使用它的博文。 http://msmvps.com/blogs/theproblemsolver/archive/2006/01/12/80905.aspx这是另一篇详细介绍的文章。 http://www.c-sharpcorner.com/UploadFile/jmcfet/Provider-basedASP.NET10162006104542AM/Provider-basedASP.NET.aspx

这是另一篇关于在Windows应用程序中使用它的文章:http://www.theproblemsolver.nl/usingthemembershipproviderinwinforms.htm

谷歌的“ASP.NET 2.0会员提供商”,你将获得大量的点击。