sql-server - SQL Server 应用程序角色

标签 sql-server security

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

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

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

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

然后应用程序使用只有应用程序知道的密码执行 sp_setapprole 存储过程。

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

此时连接失去了用户的权限,承担了应用角色的权限。

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

最佳答案

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

您可以将密码作为 secret 存储在数据库本身中。

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

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

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

这种方法有以下优点:

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

关于sql-server - SQL Server 应用程序角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16787023/

相关文章:

SQL Server - 按不同列的值分组

sql-server - 为什么我的 SQL 集群强制我使用端口号进行连接?

wordpress - 为什么 Wordpress 默认不允许 svg 图像文件?

c# - 如何从 Azure KeyVault 获取连接字符串?

php - 如何防止 PHP 中的 SQL 注入(inject)?

java - Java SSLSockets 是否需要提供的 SSL 证书?

sql - 查找 SQL 中非空行的百分比

c# - 如何将日期时间字段值设置为现在

sql - 计算列(COALESCE、CASE 和 ISNULL)

MVC应用程序中的安全性和访问控制