Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL连接字符串安全性_C#_Asp.net_Sql Server_Security - Fatal编程技术网

C# SQL连接字符串安全性

C# SQL连接字符串安全性,c#,asp.net,sql-server,security,C#,Asp.net,Sql Server,Security,我们有一个内部asp.net网站,运行在具有Windows安全性的IIS上。根据我的理解(和观察),这意味着每个线程都使用连接到网站的用户的凭据运行 该网站连接到SQL Server 2014数据库。我们使用SQL Server用户名和密码进行连接。查看一下,我发现不建议使用SQL Server身份验证 SQL Server帐户登录的密码不推荐使用。为了保持高级别的安全性,我们强烈建议您改用Integrated security或Trusted_Connection关键字。SqlCredenti

我们有一个内部asp.net网站,运行在具有Windows安全性的IIS上。根据我的理解(和观察),这意味着每个线程都使用连接到网站的用户的凭据运行

该网站连接到SQL Server 2014数据库。我们使用SQL Server用户名和密码进行连接。查看一下,我发现不建议使用SQL Server身份验证

SQL Server帐户登录的密码不推荐使用。为了保持高级别的安全性,我们强烈建议您改用Integrated security或Trusted_Connection关键字。SqlCredential是为使用SQL Server身份验证的连接指定凭据的更安全的方法

由于删除网站的Windows安全性不是一个选项,因此我看到遵循MSDN建议的唯一选项是:

  • 忽略MS建议,继续使用SQL身份验证

  • 为每个网站用户提供与当前SQL Server凭据相同的SQL Server访问权限。这意味着,如果任何用户直接连接到服务器,他们就可以运行自己的查询,而不必局限于我们编写的代码。也许某种防火墙规则可以解决这个问题。这家公司不喜欢这个主意(我也不喜欢)

  • 为每个用户授予连接访问权限(无其他权限),并在用户通过网站连接时使用应用程序角色提供权限

  • 每次连接到SQL Server时,都应该在模拟具有访问权限的域用户的线程上完成

  • 这些选项中没有一个听起来比使用SQL Server用户名和密码更好

    连接数据库的推荐方式是什么

    我们有一个内部asp.net网站,运行在具有Windows安全性的IIS上。根据我的理解(和观察),这意味着每个线程都使用连接到网站的用户的凭据运行

    该网站连接到SQL Server 2014数据库。我们使用SQL Server用户名和密码进行连接

    好的,在这个过程中,您会丢失传递给网站的Windows/NTLM安全令牌

    […选项…]

    应用程序角色是此任务的正式解决方案。选项(4)也可以工作,但在身份验证期间会有开销。尽管如此,我还是会选择“不在乎”,这就是为什么:

    我不久前已经实现了TDS协议。(协议的详细信息可在此处的MSDN上找到:)。基本上有两种方式进行身份验证:

    • 使用标准质询响应协议(例如用户名/密码验证)
    • 使用集成的安全性、AD/kerberos身份验证
    • 在所有情况下,您都可以选择TLS/SSL加密
    从安全角度来看,它足够安全。也就是说:我不会将我的SQL Server直接暴露在internet上,但这主要是因为这对我来说没有意义

    我以前也看到过微软的评论,当时出于几个不同的原因,这也让我感到困惑:

    • 如果您执行集成安全性,它必须检查Active Directory中的每个连接。对于一些用户来说,这可能很好,但对于很多用户来说,我不喜欢这样
    • SQL Azure不支持集成安全性,只要他们在线有此评论。如果真的很不安全,那就没有任何意义了
    • 主要优点是,您不必在web.config中输入用户名和密码。再说一次,我不会以任何方式将SQL server直接暴露在internet上,如果一个恶意的人可以访问您的web服务器,他可以以任何方式(直接或间接)对您的数据库做很多令人讨厌的事情
    在某些情况下,windows身份验证更有意义,特别是如果您在数据库中使用基于角色的安全性来限制单个角色对架构的访问,等等。在这些情况下,使用单个帐户没有什么意义

    老实说,我也可以从另一个角度来解释这样的评论:微软的完整授权模式是基于CAL的,这是通过广告帐户的数量来检查的。通过推动每个人使用集成安全性,可以更轻松地实施此许可模式


    因此,长话短说,我不想麻烦它,只需坚持用户名/密码身份验证。

    不。这取决于web应用程序配置,但它很可能作为应用程序池凭据连接到SQL server。让windows凭据一直传递到SQL Server实际上是一个相当具有挑战性的过程。。。这是您的选项4,这是许多web应用程序所做的。对不起@Nick.McDermaid,您是说许多使用Windows安全性运行的web应用程序(即System.Threading.Thread.CurrentPrincipal=查看站点的用户)每次连接到SQL时都会模拟另一个普通用户,这会增加开销吗?你能举例说明这是一种最佳实践吗?我不相信我们的web代码使用了这段特定的代码,但我没有检查的权限。我的观察是,到数据库的连接位于windows用户的应用程序池下。我们的web应用程序在windows安全下运行,但对我们来说,这意味着1。我们使用windows身份验证SSO在客户端识别用户,以及2。我们在数据库连接字符串中使用Windows身份验证。我认为最好的做法是:1。数据库连接字符串中任何位置都没有登录/pwd(即使用windows身份验证);2.不鼓励使用SQL登录,因为它们是“匿名的”-一旦您发出SQL登录/pwd组合,您就无法控制谁使用它(除非您定期更改密码)。Windows帐户拥有更多的“所有权”。这不是联合国