WebSurfer's Home

トップ > Blog 1   |   Login
Filter by APML

SQL Server オブジェクトエクスプローラー

by WebSurfer 13. August 2022 14:09

自分の環境の Visual Studio 2022 では下の画像のように SQL Server オブジェクトエクスプローラーが表示されていますが、その中の各項目が何かを調べたので備忘録として書いておきます。

SQL Server オブジェクトエクスプローラー

まず、SQL Server オブジェクト エクスプローラーとは何かですが、CodeZin の記事 使わなきゃ損! SQL Serverの新たな開発ツール「SQL Server Data Tools」によると SQL Server Data Tools (SSDT) の機能で、"開発者がSQL Server Management Studioで実施していたテーブルの作成や変更などのデータベース関連タスクを、Visual Studioで完結することを目的としています" というものだそうです。

Visual Studio 2022 に SSDT をインストールするには、Microsoft のドキュメント SQL Server Data Tools (SSDT) for Visual Studio のダウンロードに書いてあるように、ワークロードの「データの保存と処理」を追加し、そのオプションの「SQL Server Data Tools」にチェックを入れます。

そして、Visual Studio 2022 のメニューバーから[表示(V)]⇒[SQL Server オブジェクト エクスプローラー(S)]をクリックすれば SQL Server オブジェクトエクスプローラーが表示されます。

SQL Server オブジェクトエクスプローラーを表示

前置きが長くなりましたが、上の SQL Server オブジェクトエクスプローラーの画像に表示されている各項目が何かを説明します。

(1) (local)\sqlexpress (SQL Server 11.0.2100 ...)

ローカルにインストールした SQL Server 2012 Express の名前付きインスタンスです。

SQL Server の Express 版をインストールすると、デフォルトでは「名前つきインスタンス」となり、インスタンス名は SQLEXPRESS になります。

(記憶にないですが、たぶん、自分で SQL Server オブジェクト エクスプローラーを操作して追加したものだと思います)

(2) (localdb)\MSSQLLocalDB (SQL Server 13.0.4001 ...)

SQL Server 2016 LocalDB の自動インスタンスです。13.0.4001 から SQL Server 2016 ベースであることが分かります。

他に名前付きインスタンスというのもあります。詳しくは Microsoft のドキュメント SQL Server Express LocalDB を見てください。

自動インスタンスとは SQL Server の既定のインスタンスに該当するもののようで、開発時にはそれに接続して使うようにします。

Microsoft のドキュメントに書いてある通り、自動インスタンスの名前は MSSQLLocalDB になります。(SQL Server 2014 で変更されたそうです。その前は、文字 v の後に LocalDB とバージョン番号を付けたものでした)

Visual Studio 2019 では SQL Server 2016 LocalDB が、Visual Studio 2022 では SQL Server 2019 LocalDB が一緒にインストールされます。

自分の PC には Visual Studio 2019 / 2022 両方をインストールしており、一緒にインストールされた LocalDB は以下のようになっています。(一番上の SQL Server 2014 Express LocalDB は Visual Studio 2015 と一緒にインストールされたもの) 

インストールされている LocalDB

それなのに、なぜ Visual Studio 2022 の SQL Server オブジェクトエクスプローラーに表示されている自動インスタンスが SQL Server 2019 LocalDB のものではないのでしょう? それはたぶん以下のような話ではないかと思います。

上に紹介した Microsoft のドキュメントに以下のように書いてあります。

"ユーザーのコンピューターにインストールされているどのバージョンの LocalDB についても、LocalDB の自動インスタンスが 1 つ存在します"(PC 内に複数の自動インスタンスは存在しないということ)

"あるコンピューター上でユーザーが初めて LocalDB への接続を試みるときは、自動インスタンスを作成し、なおかつ開始する必要があります"

ということで、先に Visual Studio 2019 で作業したとき SQL Server 2016 LocalDB で自動インスタンスが作成され、Visual Studio 2022 でも先に作成された自動インスタンスがそのまま使われているということだと思います。

その自動インスタンスを、コマンド ライン管理ツール: SqlLocalDB.exe を使って SQL Server 2019 LocalDB にアップグレードすることはできるようです。

ググって調べると、Upgrade Visual Studio 2019’s LocalDB to SQL 2019 とか Upgrading SQL Server LocalDb などの方法を書いた記事がヒットします。

その方法というのは、(a) 既存の自動インスタンスを削除、(b) 新たに SQL Server 2019 LocalDB の自動インスタンスを作成、(c) 既存のデーターベースを新たに作成した自動インスタンスにアタッチする・・・ということになるようです。

上の (c) にリスクがありそうです。SQL Server 2019 LocalDB の自動インスタンスが必須というわけではない現状では、アップグレードには手を出さない方が良さそうな感じです。

(3) (localdb)\ProjectModels (SQL Server 15.0.4153 ...)

これは自分で作った記憶がなくて、Visual Studio 2022 で SSDT 関係の操作をしたとき自動的に作られたもののようです。

Microsoft の Developer Community の記事 (localdb)\ProjectsV13 not setup when installing Visual Studio 2022 に説明がありました。

自分の環境では、Visual Studio 2019 で、一緒にインストールされた SQL Server 2016 LocalDB をベースに、(localdb)\ProjectsV13 という名前のインスタンスが作られて、それがそのまま残っている。その後 Visual Studio 2022 を使うようになって、一緒にインストールされた SQL Server 2019 LocalDB をベースに (localdb)\ProjectModels という名前のインスタンスが作られたということのようです。

Visual Studio にインストールした SSDT が使うもので、開発者がアプリで使うものではないようです。

(4) (localdb)\ProjectsV13 (SQL Server 13.0.4001 ...)

上にも書きましたが、Visual Studio 2019 で一緒にインストールされた SQL Server 2016 LocalDB をベースに (localdb)\ProjectsV13 という名前のインスタンスが作られたようです。

一体それは何かですが、Stsckoverflow の記事 Purpose of ProjectsV13 LocalDB instance に以下のように書いてありました。

"The primary reason is to avoid conflicts with any "production" databases on MSSQLLocalDB. SSDT creates a new database for every database project you open. If your project is called Adventureworks, this might conflict with an Adventureworks database created by web projects or that are used by local ASP.NET applications you are running / debugging. Since SSDT does this automatically, in the background, it was felt that there was too high a risk of conflict. Hence, a separate instance is used."

上の (3) の (localdb)\ProjectModels も同じだと思います。

Tags: , , ,

DevelopmentTools

Android の HTTP 通信を Fiddler でキャプチャ

by WebSurfer 1. July 2022 12:56

Wi-Fi でネットワークに接続した Android スマホの HTTP 通信を、同じ LAN 内の PC にインストールした Fiddler Classic (Windows 専用の無償版) でキャプチャする方法を備忘録として書いておきます。

注: HTTP のみです。HTTPS は証明書の問題で警告が出ます。詳細は後述します。

Fiddler でキャプチャ

上の画像がその結果で、自分の Android スマホの Chrome で自分の HP に接続し、要求・応答をキャプチャした結果を表示したものです。

Fiddler はプロキシとして HTTP 通信をキャプチャするという仕組みになっています。なので、Android スマホの HTTP 通信がプロキシ (Fiddler) を通るように設定すれば、上の画像のように要求・応答が表示されるはずです。

その設定方法を以下に書きます。この記事を書いた時点での Windows OS, Fiddler, スマートフォンのバージョン等は以下の通りです。

  • Windows 10 Pro 64-bit 21H2
  • Fiddler Classic v5.0.20211.51073
  • スマートフォン Sony SO-04H, Android 8.0.0
  • Chrome 103.0.5060.70

最初に書きましたが、Android は Wi-Fi で LAN に接続、Fiddler は同じ LAN 内の PC にインストールしたものを使うということと、HTTP のみで HTTPS はダメという制約がありますので注意してください。

(1) Fiddler の設定

Windows PC の Fiddler に Android スマートフォンが接続できるように設定します。

Fiddler を立ち上げてメニューバーの[Tools]⇒[Options...]をクリックし下の Options ダイアログを表示します。

Fiddler のオプション設定

Options ダイアログの[Connections]タブを開いて[Allow remote computers to connect]にチェックを入れます。

(2) Android スマートフォンの設定

注: この記事で使ったスマートフォンは 2016 年のもので、今の機種では設定方法は変わっているかもしれません。プロキシの設定はどの機種でもできるはずなので、検索などで調べれば機種固有の設定方法は分かると思います

まず[アプリ]⇒[設定]⇒[ネットワークとインターネット]⇒[Wi-Fi]とクリックしていって Wi-Fi 設定画面を表示し、接続に使っている項目 (この記事の例では Buffalo-G-E90) を長押しすると下の画像のメニューが現れるので[ネットワークを変更]をクリックします。

ネットワークを変更

デフォルトでは[詳細オプション]のプロキシが[設定しない]になっているはずですが、これを[手動]にすると、下の画像のように利用するプロキシを設定できるようになります。

プロキシ設定

上の画像の[プロキシのホスト名]に Fiddler をインストールしてある PC の IP アドレスを、[プロキシポート]に 8888 を入力し、[保存」をクリックすれば Android 側の設定は完了です。

以上で HTTP 通信であればこの記事の一番上の画像のように Android のブラウザで任意のサイトにアクセスして要求・応答をキャプチャできます。

HTTPS 通信はサーバー証明書問題で警告が出ます。これは Fiddler の証明書 DO_NOT_TRUST_FiddlerRoot が Android にはインストールされてないからだと思われます。

先の記事「Firefox で Fiddler を使う方法」で書きましたが、Fiddler をインストールした PC には OS の「信頼されたルート証明機関」の中に Fiddler の証明書が含まれるようになります。

Fiddler の証明書 DO_NOT_TRUST_FiddlerRoot

なので、Fiddler をインストールした PC では HTTPS 通信で証明書の問題は出ません。Fiddler の証明書が無い Android ではそうはいかないということのようです。

Android に Fiddler の証明書 DO_NOT_TRUST_FiddlerRoot がインストールできるのか、できたとして証明書の問題が解決され Fiddler でキャプチャできるようになるのかは調べてないので分かりません。今後の検討課題ということで・・・


【2022/7/4 追記】

上に書いた HTTPS 通信でサーバー証明書の問題で警告が出る件ですが、Telerik のサイトの記事 Configure Fiddler Classic for Android Devices に対応方法の説明がありました。

それによると "Ensure that you have installed and using BouncyCastle as a certificate generator" ということで、証明書は Bouncy Castle を使って生成したものを使わないとダメらしいです。

上のページからリンクが張ってある Understanding Fiddler Certificate Generators によると "On Windows, Fiddler includes the MakeCert and CertEnroll certificate generators by default" とのことで、Bouncy Castle を使うには別途ダウンロードしてインストールする必要があるそうです。(自分の Fiddler を調べてみたら CertEnroll となってました)

ダウンロードしてみようとそのページの Bouncy Castle Certificate Generator のリンク (http://www.fiddler2.com/r/?fiddlercertMaker) をクリックしたら「fiddlercertmaker.exe を安全にダウンロードすることはできません」と出て失敗します。

そのリンクの応答は 301 Moved Permanently となっています。応答ヘッダに指定されている Location の http://telerik-fiddler.s3.amazonaws.com/fiddler/addons/fiddlercertmaker.exe を直接ブラウザのアドレスバーに設定して要求をかけると fiddlercertmaker.exe というファイルがダウンロードできます。

fiddlercertmaker.exe が Fiddler を Update して Bouncy Castle 証明書を発行できるようにするインストーラーらしいです。

fiddlercertmaker.exe をインストールし、Fiddler Echo Service にアクセスし (Fiddler を起動してからブラウザのアドレスバーに http://<IP アドレス>:8888/ と入力して要求をかけると表示されます)、証明書をダウンロードして、Android インストールすれば HTTPS 通信もキャプチャできるようになる・・・

・・・はずですが、まだ未検証です。今のところ Android + Fiddler で HTTPS 通信をキャプチャする必要がないので、余計なことをしてトラブるのもアレですので。(笑)

どうしても HTTPS 通信をキャプチャする必要が出てきたらやってみてその結果を追記します。

Tags: ,

DevelopmentTools

Firefox で Fiddler を使う方法

by WebSurfer 20. June 2021 12:29

ブラウザに Firefox を使った場合に、要求・応答を Fiddler でキャプチャするにはどうしたら良いかということを書きます。

Fiddler

Fiddler はプロキシとして動き、ブラウザとネットの間の HTTP トラフィックを自動的にキャプチャするツールです。

Fiddler を使うたびユーザーが手動でプロキシの設定を行う必要はありません。Fiddler を起動すると、以下のように自動的にシステムのプロキシが設定され、ブラウザがそのプロキシを使うように設定されていれば Fiddler がトラフィックをキャプチャできるようになります。

なので、ブラウザに Firefox を使う場合も、先の記事「Fiddler のお勧め」に書きましたように Firefox のインターネット接続の設定でシステムのプロキシを利用するオプションを選択しておけば、Fiddler を立ち上げただけで要求応答をキャプチャすることができます。

しかしながら、HTTPS 通信を行う場合はプロキシの設定だけではダメです。Fiddler を通すと下の画像のようにサーバー証明書が信頼できないという警告が出ます。無視して続行しても CSS などがダウンロードできないようで表示が崩れてしまい使い物になりません。

証明書の警告画面

その理由は、Telerik のサイトの Configuring Firefox for Fiddler によると、"This message is shown because Firefox does not use the Windows Trusted Certificate Authority list; it instead has its own list of trusted certificates." ということだそうです。

ちなみに、Fiddler の証明書は DO_NOT_TRUST_FiddlerRoot という名前を持つもので、それは OS の「信頼されたルート証明機関」の中に含まれていました。下の画像を見てください。

Fiddler のサーバー証明書

自分ではインストールした覚えはないので、Fiddler により自動的にインストールされたようです。IE11, Edge, Chrome, Opera はこれを使うので Fiddler を使っても Firefox のような証明書の問題は出ないということのようです。

対処方法は上に紹介した Telerik のサイトの記事に書いてあります。簡単に書くと、Fiddler から証明書をエクスポートして、それを Firefox にインポートするということになります。

Telerik のサイトの記事の画像は古いバージョンの Fiddler, Firefox ものですので、この記事を書いている時点での最新版 Fiddler v5.0.20204.45441 と Firefox v89.0.1 の画像を貼って説明しておきます。

まず Fiddler の証明書をエクスポートします。Fiddler を起動し、メニューバーの[Tools]⇒[Options...]をクリックして Options ダイアログを表示し[HTTPS]タブを選択します。

[HTTPS]タブの中の[Actions]ボタンをクリックすると下の画像のようにリストが表示されますので、リストの中の[Export Root Certificate to Desktop]クリックすると FiddlerRoot.cer という名前の証明書が PC のデスクトップにエクスポートされます。

Fiddler の証明書のエクスポート

次に、Fiddler からエクスポートした証明書 FiddlerRoot.cer を Firefox にインストールします。

Firefox を起動し、設定の「プライバシーとセキュリティ」メニューの「証明書」の項目にある[証明書を表示...(C)]ボタンをクリックし「証明書マネージャー」を表示します。

Firefox の証明書マネージャー

「証明書マネージャー」の[認証局証明書]タブを選択し[インポート(M)...]ボタンをクリックすると証明書を選択するダイアログが表示されるので、デスクトップにエクスポートした Fiddler の証明書 FiddlerRoot.cer を選択します。

選択すると「証明書のインポート」ダイアログが表示されるので、[この認証局によるウェブサイトの識別を信頼する]にチェックを入れて[OK]ボタンをクリックします。

証明書のインポート

これにより、「証明書マネージャー」の証明書一覧の中に DO_NOT_TRUST_FiddlerRoot という名前の証明書が含まれているはずですので確認してください。

ここまでの操作で Firefox の HTTPS 通信で Fiddler を使っても警告は出なくなり、Fiddler によりトラフィックを自動的にキャプチャできるようになります。


ただ、問題がまだ残っていて、Visual Studio から開発中の Web アプリを立ち上げて IIS Express で動かす場合、HTTPS 通信ではトラフィックがキャプチャできません

違いは localhost が相手になるということと、サーバー証明書は Visual Studio が発行した開発用のものになることぐらいだと思います。いろいろ調べてみたのですが原因が分からず解決できていませんが、とりあえず調べたことを以下に書いておきます。

Visual Studio が発行したサーバー証明書は以下の通りです。IIS Express が使うのは一番下の IIS Express Develpment Certificate です (その上は多分 Kestrel が使うものだと思います)。

開発用のサーバー証明書

試しに、一番下の IIS Express Develpment Certificate をエクスポートして Firefox にインポートしようとしたのですが、「この証明書は認証局に証明書ではないため、認証局の一覧には追加できません。」と表示されてインポートできませんでした。

Microsoft のドキュメント Trust the HTTPS certificate with Firefox to prevent SEC_ERROR_INADEQUATE_KEY_USAGE error によると "The Firefox browser uses it's own certificate store, and therefore doesn't trust the IIS Express or Kestrel developer certificates." とのことで、開発用サーバー証明書は Firefox では使えないということのようです。

その記事の少し下のセクション Configure trust of HTTPS certificate using Firefox browser に書いてある通り、Firefox の設定で security.enterprise_roots.enabled = true としてみました。しかし、依然として Fiddler では Firefox の HTTPS 通信はキャプチャできませんでした。

ちなみに、security.enterprise_roots.enabled = false (デフォルト) の場合、Firefox で開発中の Web アプリにアクセスすると以下の警告が出ます。Fiddler を通しても通さなくても同じ警告になります

localhost への接続の安全性

上の画像の[詳細の表示]をクリックすると以下のダイアログが表示されます。そこに表示されている「検証され信頼できる運営者情報ではありません」というところが問題になっているようです。

Firefox のページ情報

security.enterprise_roots.enabled = true に設定すると、表示は以下のように「接続は安全」と変わります。ただし、Mozilla は証明書の発行者を承認していないそうですし、[詳細の表示]をクリックして表示されるダイアログの情報の「検証され信頼できる運営者情報ではありません」というのも変わりません。

localhost への接続の安全性

開発用のサーバー証明書が「検証され信頼できる運営者情報ではありません」ということが Fiddler でキャプチャできない原因であろうと思いますが、localhost が相手ということにも何かあるのかもしれません。(IE と .NET Framework は localhost の要求をプロキシを通して送らないようにハードコードされているということらしいですが、Firefox にも何かあっても不思議ではないですし)

今日はもうこれ以上調べる気力がなくなったので、今後の課題ということにしたいと思います。(汗)

Tags: , ,

DevelopmentTools

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  November 2023  >>
MoTuWeThFrSaSu
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

View posts in large calendar