SQL Server Windows 身份验证安全

Posted

技术标签:

【中文标题】SQL Server Windows 身份验证安全【英文标题】:SQL Server Windows Authentication Security 【发布时间】:2011-01-05 16:14:00 【问题描述】:

我们有一个应用程序使用 Windows 身份验证来对数据库用户进行身份验证,并且 SQL Server 用户帐户需要对数据库表具有一定的读/写权限。

问题是用户可以安装 SQL Server Management Studio,并可能以不应该使用的方式使用数据库,这不是我想要的。

我阅读的所有内容都表明使用集成身份验证更安全,但目前,任何用户都可以使用 Management Studio 或 Access/Excel 来连接到数据库。

我已阅读问题SQL Server Authentication or Integrated Security?,其中提出了一些解决方法,但我并没有像重构所有存储过程等那样彻底更改应用程序的选项,所以我希望可能有另一个选项?

谢谢,

镍钴

【问题讨论】:

【参考方案1】:

我读过的所有内容都这么说 使用集成身份验证是 更安全

--> 在某种程度上它更安全,因为获取密码更难。

如果您使用 SQL Server 身份验证,则连接字符串包含用户和密码。如果您知道连接字符串的位置(通常在配置文件中),您可以打开它并查看用户名和密码。 另一方面,如果您使用 Windows 身份验证,则连接字符串只会显示“Integrated Security=True”,然后您使用 Windows 帐户连接到服务器,实际密码隐藏在 Windows 内部深处的某个地方,并且更难以检索。

当然,Windows 身份验证的一大缺点是,如果您的用户需要对您的应用程序的某个表的写入权限,这意味着他们也可以使用任何其他应用程序写入同一个表。

有一些解决方法,但都不是灵丹妙药:

如果您的应用只需要数据库的某些表,您只需授予这些表的权限即可。所以至少,用户不能在所有其他表中做事

如果根本不允许用户从您的应用程序外部访问任何表,很遗憾您只能做两件事:

将您的应用更改为 SQL 身份验证并删除 Windows 用户的所有权限 (你也可以使用代理服务like Will Hughes suggested,但是应用直接访问DB的时候效果是一样的……关键是你用户的Windows账号已经没有任何权限了!) 为您的应用程序可以对数据库执行的操作创建视图和存储过程(如果它们不存在的话)。授予用户使用这些的权限,并删除对真实表的权限。 --> 用户可以使用其他工具直接访问视图和 SP(即使他们对基础表没有任何权限......视图和 SP 的权限就足够了),但他们不能做任何事情他们也不能在您的应用程序中执行此操作。

【讨论】:

如何授予存储过程写入数据库的权限?它不承担调用者的权利吗? SP 始终能够写入数据库。但是用户只有在你允许的情况下才能执行 SP(通过给他EXECUTE 权限)。 See this MSDN link 了解更多信息。【参考方案2】:

如果您不希望用户访问您的数据库,请不要授予他们访问权限。

如果您需要控制他们可以做什么 - 那么您应该在 web 服务(或其他形式的代理服务)中进行访问控制,然后执行批准的查询、返回数据等。

【讨论】:

以上是关于SQL Server Windows 身份验证安全的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 集成安全性(Windows 身份验证)

SQL Server2005 windows身份验证无法登陆问题

sql server 数据库连接

忘了SQL server 身份验证密码

SQL Server 数据库权限设置

SQL Server权限管理和数据恢复