如何处理访问 SQL Server 数据库的应用程序的权限?

Posted

技术标签:

【中文标题】如何处理访问 SQL Server 数据库的应用程序的权限?【英文标题】:How to handle permissions of an application that accesses a SQL Server database? 【发布时间】:2022-01-10 15:16:19 【问题描述】:

我有一个直接访问数据库的应用程序。此应用程序根据上下文控制用户可以执行的操作。

目前,我使用的是 Windows 身份验证,但所有用户都有选择、插入、更新和删除的权限,因为控制操作的是应用程序。

例如,一个用户可以修改一个文档,但前提是该文档是由该用户创建的。因此,在数据库中,用户必须有权创建更新,但前提是它是文档的所有者。我不确定是否可以使用 SQL Server 用户角色处理这种情况。

但问题是所有用户都拥有数据库的所有权限,因此他们可以使用另一个应用程序(如 SQL Server Management Studio)来访问数据库并做他们想做的事。

所以我在考虑使用 SQL Server 身份验证的选项,并具有对数据库的完全访问权限。该用户不为用户所知,因此无法使用其他应用程序修改数据库。

我看到这个解决方案的问题是我必须将凭据存储在客户端应用程序中,我不知道这是否真的是一种安全的方法。

如果使用 SQL Server 身份验证是一个不错的选择,我该如何以安全的方式存储用户的凭据?

我也阅读过有关应用程序角色的信息,但是需要将密码存储在客户端应用程序中,所以我想我会遇到同样的问题。而且我看不出应用程序角色和使用 SQL Server 身份验证之间的区别。

综上所述,按照我上面解释的方式使用 SQL Server 身份验证是不是一个很好的解决方案?如果这是一个不错的选择,我该如何以安全的方式存储凭据?

谢谢。

【问题讨论】:

密码也可以存入数据库 这可能是一个选项:docs.microsoft.com/en-us/sql/relational-databases/security/… @viveknuna 如何将密码存储在数据库中? @ÁlvaroGarcía 只需在数据库中以安全的方式探索存储密码,您就会明白 我过去读过有关如何将散列密码存储在数据库中的信息。我不知道你是不是这个意思。但是如果这样的话,如果我没记错的话,仍然需要将密码发送到服务器,服务器对密码进行哈希处理并将其与存储的哈希值进行比较。这是正确的吗? 【参考方案1】:

application role 与使用 SQL 身份验证之间的区别在于,应用程序角色密码本身不足以访问数据库。用户必须先单独授权,并且可以单独监控和审核。

如何以安全的方式存储用户的凭据?

在用户是管理员的机器上运行的客户端应用程序中使用应用程序角色(或 SQL 身份验证)密码时,永远不会真正安全。因此,您可以在桌面虚拟化或信息亭模式 PC 中运行该应用。

但对于涉及大多数受信任用户的应用程序角色安全性已经足够好,尤其是与 Windows 集成身份验证结合使用时,因此可以审核用户对数据库的访问。

【讨论】:

以上是关于如何处理访问 SQL Server 数据库的应用程序的权限?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理SQL Server死锁问题

如何处理SQL Server死锁问题

如何处理SQL Server死锁问题

如何处理SQL Server事务复制中的大事务操作

SQL Server 如何处理非聚集索引中的包含列?

sql server 排序规则是不是意味着列名必须是正确的大小写?以及如何处理