.NET Core のプログラムでデータベース接続文字列をソースコードに記述していると、以下のような警告がビルド時に出力されるようになります。
Models/consoletestContext.cs(15,10): warning CS1030: #warning: 'To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.'
この警告を回避するには、appsettings.json に接続情報を保存して、プログラム実行時に読み込むように変更します。
なお、環境は Mac (macOS High Sierra 10.13.3) で .NET Core SDK 2.1.4、PostgreSQL 10.3 、Visual Studio Code になります。
まず、JSON の設定ファイルを読み込むために、Microsoft.Extensions.Configuration.Json パッケージを NuGet でインストールする必要があります。
$ dotnet add package Microsoft.Extensions.Configuration.Json
それから、プロジェクトのルートディレクトリに、接続文字列を含んだ appsettings.json ファイルを以下のように作成します。
{ "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=databasename;Username=username;Password=password;" } }
Program.cs に以下のように設定ファイルを読み込む内容を追加します。
using System; using System.IO; using System.Data; using System.Linq; using ConsoleTest.Models; using Microsoft.Extensions.Configuration; //追加 namespace ConsoleTest { class Program { public static IConfiguration Configuration { get; set; } //追加 static void Main(string[] args) { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json"); //追加 Configuration = builder.Build(); //追加 using (var db = new consoletestContext()) { foreach (var book in db.Books) { Console.WriteLine(book.Title); } } } } }
そして、dbnameContext.cs を以下のように書き換えます(抜粋)
using Microsoft.Extensions.Configuration; //追加 using ConsoleTest; //追加 //(中略) protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { //追加 optionsBuilder.UseNpgsql(Program.Configuration.GetConnectionString("DefaultConnection")); //コメントアウト // optionsBuilder.UseNpgsql(@"Server=localhost;Database=databasename;Username=username;Password=password;"); } }
これができたらビルドして実行します。
$ dotnet build $ dotnet run
これで接続文字列を保存できるようになりましたね。また、接続文字列を一元管理できるようになりました。
■参考サイト