カテゴリー: 技術系

  • 急にNpgsqlからAzure Database for PostgreSQLへの接続ができなくなった

    急に.NET6(.NET 3.1~7も)のNpgsqlからAzure Database for PostgreSQLへの接続ができなくなった。

    アプリケーション側からみると、Azure側のPostgreSQLに強制切断されているようにみえるログが出ている。

     ---> Npgsql.NpgsqlException (0x80004005): Exception while writing to stream
     ---> System.IO.IOException: Unable to write data to the transport connection: 既存の接続はリモート ホストに強制的に切断されました。.
     ---> System.Net.Sockets.SocketException (10054): 既存の接続はリモート ホストに強制的に切断されました。
       at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 count)

    こうなると、通常考えるのは、AzureのPostgreSQLで、コネクション数があふれているとか、高負荷状態とか、DBaaSの制約(PostgreSQL設定の外側)が原因じゃないかということ。これを1つ1つ調べていくと、異常なし。Azure側には問題が見当たらず。DBのログをAzureの管理ページがダウンロードして確認してみると、下記のログがあり。

    could not receive data from client: An existing connection was forcibly closed by the remote host.

    AzureのPostgreSQLからみると、クライアント側が切断しているとのこと。

    調べてみると、「Azure Database for PostgreSQL Single server」は、ルート証明書が変更されていることがわかった。.NETで、Ngpsqlを使っている場合は、「Baltimore CyberTrust Root」と「DigiCert Global Root G2」が使うWindows(Windows Server含む)にインストールされている必要があるとのこと。ルート証明書の確認をすると、「DigiCert Global Root G2」が存在していなかった。これが原因なので、下記のマイクロソフトの内容に従い、確認して作業した。

    Understanding the changes in the Root CA change for Azure Database for PostgreSQL Single server
    https://learn.microsoft.com/en-us/azure/postgresql/single-server/concepts-certificate-rotation#what-do-i-need-to-do-to-maintain-connectivity

    今回足りていなかったのは、「DigiCert Global Root G2」なので、Digicertのサイトからルート証明書をダウンロードした。

    https://www.digicert.com/kb/digicert-root-certificates.htm#roots
    (「Download DER/CRT」をクリックして、CRTファイルをダウンロード)

    CRTファイルを、ルート証明書が足りていないサーバに持っていき、ダブルクリックして、ウィザードからルート証明書をインストールした。配置場所は自動選択させることでルートのところにインストールされた。

    なお、ルート証明書のインストール後のOS再起動はしなくても、ルート証明書を使い始めた。

  • Windowsのライセンス認証で「0xc004e028」エラーがでた。

    Windows Server 2022のライセンス認証を行ったところ、下記のエラーが発生した。

    We can't activate Windows on  this device right now. You can try activatating again later or go to the Store to buy genuine Windows. (0xc004e028)

    今はライセンス認証のアクティベーションができなかった、あとでもう一度アクティベーションを行ってほしい、という内容のエラー。もう一度、アクティベーションを行おうと、システムの詳細情報をみてみると、ちゃんとライセンス認証されていた。

  • SQL ServerのDBを読み取り専用にする方法

    SQL Serverのデータベースを読み取り専用(リードオンリー)する、または解除するには、次のことを行う。

    1. SQL Server Management Studio (SSMS) を使い、管理権限のあるユーザで接続する。

    2. 対象のDBを選択して、右クリックして、プロパティを開く。

    3. オプションを開く。

    4. 「状態」の中にある「読み取り専用データベース」の項目を探す。

    5. 「読み取り専用」にする場合は、プルダウンで「True」を選択する。読み取り専用を解除する場合は「False」を選択する。

    6. 「OK」をクリックする。これを行うと、一度、該当DBへのすべての接続が切断されるので注意すること。

  • Oracle DatabaseでSQLの結果表示する件数を制限する方法

    MySQLだと、limitを使うことで検索結果の表示件数の制御ができるが、Oracle Databaseだとlimitがないので、指定できない。そんなに使う機会がないので、調べる手間があるのでメモ。

    Oracle Databaseでやる場合には、「ROWNUM」を使うことで似たようなことができる。例えば、ROWNUMで、10以下に設定すると、最初から10行目まで表示される。これをうまく使うことで、いろいろとできる。

    例)

    SELECT EXTENDED_TIMESTAMP, DB_USER, SQL_TEXT  
    FROM DBA_COMMON_AUDIT_TRAIL  
    WHERE ROWNUM <= 10;
  • Windows Server 2022のインストールディスクを作る場合は、DVD-R DLで。

    久しぶりに物理サーバに、Windows Serverをインストールした。今の最新OSのWindows Server 2022をインストールするために、ISOファイルを落としたのだが、これのサイズが、5.31GBあった。DVD-Rだと、4.3GBの容量なので作成することができない。そのため、Windows Server 2022のインストールディスクを作るために、DVD-R DLのディスクを買いにいった。

    普通のDVD-Rだと、Windows Server 2022は容量が足りずに焼くことができないので注意。買いに行く前にISOファイルのサイズを確認したのでよかった。

  • APT攻撃やマルウェアを防ぐツールをテストするときに使えるツールのメモ。

    APT攻撃やマルウェアを防ぐアンチウィルスやEDRツールなどをテストしたいときに、使えるツールのメモ。

    下記に公開されているツールを、コマンドで実行すれば検知されるかどうかがわかるとのこと。

    APTシミュレーター:システムが APT 攻撃の被害者であるかのように見せるためのツールセット
    https://github.com/NextronSystems/APTSimulator

    まだ、試せていないので、余裕ができたら試してみたい。

  • Veeam Backup & Replicationのパッチ適用方法

    Veeam Backup & Replicationも無償のVeeam Backup & Replication  Community Edition も累積パッチのインストーラーが公開されている。インストーラー形式なので、下記のパッチ情報のページから最新版をダウンロードして、インストーラーを起動させてインストールする。

    Backup & Replication 12の累積パッチ情報
    https://www.veeam.com/kb4420

    Backup & Replication 11aの累積パッチ情報
    https://www.veeam.com/kb4245

    累積パッチ形式のため、インストーラーのサイズが大きい。そのため、パッチをあてるときも、ちょっと時間がかかるので、気長に待つ。エージェントについては、自動で更新することもできるし、個別対応もできる。

    累積パッチなので、パッチの順番など考えることが少ないのは楽でよい。

  • 2023年3月のWindows Update後、MSPEAPの無線LANで接続エラー

    今月(2023年3月)のWindows Update後、MS PEAPで接続している無線で、急に接続できないエラーが多発した。メーカーや機種については、ばらつきがあるので、機種固有の問題ではなさそう。接続できているPCも多いので、トリガーをWindows Updateが引いただけで、今回のアップデートに何かがあるというわけでもなさそう。

    1回、無線LANの接続を消して、MS PEAP接続を再設定すると接続できるようになる。ただ、既存の接続設定だと、RADIUSの認証ではじかれてしまう。

    ちなみに、無線LANのAPは、Meraki。Merakiでは、下記のエラーが出ていた。

    Client made an 802.1X authentication request to the RADIUS server, but it did not respond.
  • 企業用のMicrosoft 365でログイン時に2段階認証を求められるようになった。

    企業用のMicrosoft 365でログイン時に2段階認証を求められるようになったと、急に言われ始めた。もともとMFAのところは設定していないので、2段階認証が求められるはずはないはずだが。

    念のため調べてみると、Microsoft 365の画面の「ホーム > セットアップ > 多要素認証 (MFA) の構成」で、「完了」のところに緑チェックマークがついている。

    ここの管理をクリックすると、Azure ADの管理画面が開く。概要のプロパティのタブを開くと、「お客様の組織は、セキュリティの既定値群で保護されています。」に緑チェックマークがついている。セキュリティの規定値で、MFAが有効化されているので、M365のログイン時に、2段階認証のMicrosoft Authenticatorの登録が促されていた。MFAを無効化する場合は、ここの「セキュリティの既定値の管理」をクリックして、設定を変更する。

    この規定値については、下記の「Japan Azure Identity Support Blog」にあるように、自動的に有効化されたため。

    2022 年 6 月末から「セキュリティの既定値群」の有効化が促されます (対象 : 一部のテナント)
    https://jpazureid.github.io/blog/azure-active-directory/security-default-2022/

  • ASP.NETで「Web.HttpRequest.GetEntireRawContent()」のエラーが発生

    ASP.NETのアプリで、アプリケーションがクラッシュした。出力しているログをみても、下記のような程度しかエラーが出ていない。コーディングしたところとは無関係なエラーが出力されてきた。

    2023-02-XX 10:mm:ss,sss ERROR :  - Global_asax.Application_Error[xx] :    場所 System.Web.HttpRequest.GetEntireRawContent() 
       場所 System.Web.HttpRequest.GetMultipartContent() 
       場所 System.Web.HttpRequest.FillInFormCollection() 
       場所 System.Web.HttpRequest.EnsureForm() 
       場所 System.Web.HttpRequest.get_Form() 
       場所 System.Web.HttpRequest.get_HasForm() 
       場所 System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull) 
       場所 System.Web.UI.Page.DeterminePostBackMode() 
       場所 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

    調べたところ、ファイルのアップロードで発生しており、「Web.HttpRequest.GetEntireRawContent()」のところで、POSTされてきた要求のサイズが大きすぎて、クラッシュしていることがわかった。

    調べてみると、IISの設定では、デフォルトでPOSTサイズは30MBまで。ASP.NETでは、デフォルトで4MBまで、だった。アップロードのファイルサイズが数メガあり、POSTサイズを超えたのが原因だった。

    対応としては、アップロードするファイルサイズを制限するか、ASP.NETの設定(web.config)を変えて、もっと大きいファイルサイズをアップロードできるようにするか、だ。