我正在考虑在SQL Server中使用应用程序角色我在Microsoft MSDN网站上阅读了以下内容: http://msdn.microsoft.com/en-us/library/ms190998.aspx
与应用程序角色连接 以下步骤构成了应用程序角色切换安全上下文的过程:
用户执行客户端应用程序。
客户端应用程序以用户身份连接到SQL Server实例。
然后,应用程序使用仅为应用程序知道的密码执行sp_setapprole存储过程。
如果应用程序角色名称和密码有效,则启用应用程序角色。
此时连接会丢失用户的权限并承担应用程序角色的权限。
我想知道,如果应用程序必须知道密码,那么如何最好地实现此目的。我认为将密码存储在源代码中存在安全风险。是否有另一种安全的方式来使用应用程序部署密码(请注意,这是一个将部署到用户计算机的Windows客户端应用程序)。
答案 0 :(得分:2)
实际上还有另一种方法可以在应用程序中部署密码。
您可以将密码存储为数据库本身的密码。
例如,使用存储过程或标量函数返回此“秘密”。这是您描述的逻辑中的一个额外步骤,即在应用程序使用用户凭据建立连接之后执行。
这是可能的,因为无论如何用户都可以使用Windows身份验证访问数据库。 需要设置权限,以便授予用户连接数据库和可编程对象 的访问权限。
要对密码进行“混淆”(不安全),您可以将加密版本存储在数据库中并使用简单的加密/解密(如this one)。
这种方法具有以下优点:
答案 1 :(得分:0)
无法在用户工作站上部署密码,而本地管理员无法发现密码。你只能提高标准,但如果价格合理,他们就会找到它。
您应该依赖提供密码的用户,如果可能的话,最终归结为使用Windows身份验证。您应该始终假设应用程序具有的任何权限,用户也可以使用它们,并且他/她可以使用备用访问API(即任何查询工具)来执行它们。如果您无法信任具有某些权限的用户,则不得在他/她的计算机上部署该应用程序。例如,使用一个多层解决方案,将数据库与用户隔离开来,并在此中间层中添加任何必要的验证(如果正确完成,大多数ASP.Net和/或WCF应用程序将符合此类多层)。