3

私たちのアプリケーションは、ユーザーが自分のコンピューターに管理者なしで展開するために ClickOnce を使用します。アプリには、機密データを含む SqlServerCE データベースがあります。要件は、展開時およびその後 20 日ごとに db パスワードを変更することです (構成可能)。db パスワードの変更、connstring の変更、および app.config ファイルの connString セクションの暗号化を処理しています。

問題は、後続の ClickOnce 配置にあります。新しくデプロイしたデータベースが初期デプロイと異なる場合 (マニフェストのハッシュ値が変更されている場合) は問題ありません。新しいデータベースは古いデータベースを置き換え、すぐに更新される初期のデフォルト パスワードを持ちます。

新しくデプロイされたデータベースが最初のデプロイと同じ (マニフェストのハッシュ値が同じ) 場合、問題があります。ClickOnce は古いデータベースを新しい配置にロールバックしますが、アプリケーションはパスワードにアクセスできなくなります。これは古い app.config ファイルにあり、ロール フォワードされません。データベースがロールフォワードされると、少なくとも接続文字列セクションがロールフォワードされると思うかもしれませんが、それはあまりにも多くのことを求めていると思います。

大丈夫、問題ありません。現在のパスワードを user.config ファイルにコピーするコードを追加しました。展開時に、アプリがデータベースを開くことができない場合、user.config からパスワードを取得し、app.config の connstrings を更新します。ClickOnce は、古い user.config の内容を自動的にコピーし、アプリが settings.default.upgrade() や .Save() の呼び出しなどを行うことなく、新しい user.config を作成するように見えます。

ただし、user.config が暗号化されている場合、これは機能しません。ClickOnce は古い u.config ファイルから新しいファイルにデータをコピーしようとしましたが、暗号化のために失敗したようです。したがって、app.config の userSettings にデプロイされたデータが含まれているだけです。

古い user.config ファイルにアクセスし、そこに含まれるデータを解読して取得するメカニズムはありますか? 新旧両方の user.config が ClickOnce データ フォルダー セットで利用可能ですが、古いファイルを手動で見つけようとするコードを記述したくありません。

ClickOnce は、ローカル データのセキュリティに関しては獣です。役に立たないだけです。user.config を機能させることができない場合は、ClickOnce が把握できないユーザー アクセス可能な領域にファイルを配置し、そこからパスワード データを管理する必要があります。内容はもちろん暗号化されます。

4

0 に答える 0