SQL Server Windows身份验证安全性

3
我们有一个应用程序,使用Windows身份验证来验证用户与数据库的身份,并且SQL Server用户帐户需要对数据库表具有某些读/写访问权限。
问题在于,用户可以安装SQL Server Management Studio并可能以不应使用的方式使用数据库,这不是我想要的。
我所阅读的所有内容都说使用集成身份验证更加安全,但目前,任何用户都可以使用Management Studio或Access / Excel连接到数据库。
我已经阅读了问题SQL Server Authentication or Integrated Security?,其中提出了一些解决方法,但我实际上没有像重构所有存储过程等那样彻底改变应用程序的选项,所以我希望可能还有其他选择?
谢谢,
NIco
2个回答

2

所有我所读到的都说使用集成身份验证更加安全

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

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

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

有一些解决方法,但没有一个是万无一失的:

如果您的应用程序仅需要DB的某些表格,您可以只授予这些权限。因此,用户无法在所有其他表格中执行操作

如果不允许用户从应用程序外部访问任何表格,则不幸的是只有两件事情可以做:

  • 将您的应用程序更改为SQL身份验证,并删除所有Windows用户的权限
    (您还可以使用代理服务像Will Hughes建议的那样,但是当应用程序直接访问DB时,效果是相同的...重点是您的用户的Windows帐户不再具有任何权限!)
  • 为您的应用程序可以使用数据库的内容创建视图和存储过程(如果它们不存在)。授予用户使用这些内容的权限,并删除对实际表格的权限。
    -->用户可以直接使用其他工具访问视图和SPs(即使他们没有对底层表格的任何权限...对视图和SPs的权限足够了),但是他们不能执行任何在您的应用程序中无法执行的操作。

如何授予存储过程写入数据库的权限?它不是默认使用调用者的权限吗? - noelicus
SP 总是可以写入数据库。但是,只有在您允许用户(通过给他授予EXECUTE权限)时,才能执行 SP。更多信息请参阅此 MSDN 链接:http://msdn.microsoft.com/en-us/library/bb669058.aspx - Christian Specht

0
如果您不希望用户访问您的数据库,请不要授予他们访问权限。
如果您需要控制他们的操作,那么您应该在Web服务(或其他形式的代理服务)中进行访问控制,然后执行已批准的查询、返回数据等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接