SQL Server应用程序角色

时间:2013-05-28 08:11:52

标签: sql-server security

我正在考虑在SQL Server中使用应用程序角色我在Microsoft MSDN网站上阅读了以下内容: http://msdn.microsoft.com/en-us/library/ms190998.aspx

与应用程序角色连接 以下步骤构成了应用程序角色切换安全上下文的过程:

用户执行客户端应用程序。

客户端应用程序以用户身份连接到SQL Server实例。

然后,应用程序使用仅为应用程序知道的密码执行sp_setapprole存储过程。

如果应用程序角色名称和密码有效,则启用应用程序角色。

此时连接会丢失用户的权限并承担应用程序角色的权限。

我想知道,如果应用程序必须知道密码,那么如何最好地实现此目的。我认为将密码存储在源代码中存在安全风险。是否有另一种安全的方式来使用应用程序部署密码(请注意,这是一个将部署到用户计算机的Windows客户端应用程序)。

2 个答案:

答案 0 :(得分:2)

实际上还有另一种方法可以在应用程序中部署密码。

您可以将密码存储为数据库本身的密码。

例如,使用存储过程或标量函数返回此“秘密”。这是您描述的逻辑中的一个额外步骤,即在应用程序使用用户凭据建立连接之后执行。

这是可能的,因为无论如何用户都可以使用Windows身份验证访问数据库。 需要设置权限,以便授予用户连接数据库和可编程对象 的访问权限。

要对密码进行“混淆”(安全),您可以将加密版本存储在数据库中并使用简单的加密/解密(如this one)。

这种方法具有以下优点:

  • 密码不会以明文形式存储在任何地方(请注意,如果您不使用SSL加密,它将以明文形式在网络上传输)
  • 应用程序的用户无需提供任何输入
  • 应用程序源代码不包含密码
  • 应用程序部署不包含密码
  • 可以非常轻松地重置密码,例如按计划

答案 1 :(得分:0)

无法在用户工作站上部署密码,而本地管理员无法发现密码。你只能提高标准,但如果价格合理,他们就会找到它。

您应该依赖提供密码的用户,如果可能的话,最终归结为使用Windows身份验证。您应该始终假设应用程序具有的任何权限,用户也可以使用它们,并且他/她可以使用备用访问API(即任何查询工具)来执行它们。如果您无法信任具有某些权限的用户,则不得在他/她的计算机上部署该应用程序。例如,使用一个多层解决方案,将数据库与用户隔离开来,并在此中间层中添加任何必要的验证(如果正确完成,大多数ASP.Net和/或WCF应用程序将符合此类多层)。