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 身份验证)