ASP.NET web.config資料庫連線字串分離設定

這個功能我記得好像在ASP.NET 2.0就有了,今天剛好有需求來實驗一下並記錄。其實最正規的做法應該是對web.config加密才對,這種分離web.config設定檔案的機制頂多就是在這個GIT流行的年代,可以減少一點點誤把機敏資訊流出去的可能而已,對於安全效果上面來說我覺得幾乎是零。

對了,有一點網路上的謬論值得一提,我有在相關的討論中看到有人提出還有一個優點,就是進行分離web.config後若跑去子屬設定檔新增修改連線字串,不會造成ASP.NET重啟導致SESSION跳掉,這個我只能說想太多了~不可能!修改子屬設定檔整個IIS會重置,造成SESSION依然會被清空!

分離web.config資料庫連線字串的方式

首先先在connectionStrings節點中利用configSource把檔案切分出去,並放在bin目錄下一個名為db.config的XML設定檔。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings configSource="bin\db.config" />
  <system.web>
    <compilation debug="true" targetFramework="4.8">
      <assemblies>
        <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
      </assemblies>
    </compilation>
    <pages controlRenderingCompatibilityVersion="4.0"/>
  </system.web>
</configuration>

在db.config的XML設定檔補入下列內文:

<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>
  <clear />
  <add name="dbA" connectionString="server=192.168.1.1;uid=User1;pwd=UserPwd1" providerName="System.Data.SqlClient"/>
  <add name="dbB" connectionString="server=192.168.1.2;uid=User2;pwd=UserPwd2" providerName="System.Data.SqlClient"/>
</connectionStrings>

That's it! 就這麼簡單,但我個人對於這種作法的認為是宣示意義大於實質意義(真正要防止資訊洩漏還不如參考我下面的文章,真正把資料庫訊息加密起來比較快)。總之,放在bin目錄下的優點一般認為是:

  1. 在ASP.NET IIS裡,對bin目錄有預設超嚴格的權限管控。
  2. 程式設計師若採用原始碼控管(GIT),通常不會託管上傳BIN資料夾下面的東西,有某一程度上的防呆。
  3. 副檔名命名為.config,一樣有嚴格的權限管控。

相關連結

ASP.NET web.config connectionStrings configSource split