- 統制環境
- リスクの評価と対応
- 統制活動
- 情報と伝達
- モニタリング
- ITへの対応
MySQLに対して特定の条件下でインポートを行うと文字化けが発生する
事象
特定の条件下でインポートを行うと文字化けが発生していた。
(同じサーバーに対して別の人がインポートした処理は文字化けが発生していなかった)
詳解
利用しているサーバーにMySQL Workbenchで接続し文字コードを確認した。
その後、WindowsのcliでMySQL Workbench内にあるmysql.exeを用いて、同じサーバーで同様の確認を行った。
結果、同じSQLを実行しているのに、別の結果が返ってきた。
WindowsのDOSプロンプトの文字コードはCP932である。
そのため、どうもmysqlをCLIモードで実行すると、character_set_clientをCP932で送っているからと思われる。
(なお、パケットの観察までは行っていない)
my.cnf/my.iniの優先順位とオプショングループ
my.cnf/my.iniの優先順位
マニュアルにきちんと記載してくれている。
dev.mysql.com
表 4.1 Windows システムで読み取られるオプションファイル
もしくは
表 4.2 Unix および Unix-Like システムで読み取られるオプションファイル
に記載されている順番を参照すれば良い。
なお、my.cnfに全ての設定が定義できる訳ではない。
どのパラメータが設定できる/できないは以下を参考にすれば良い。
dev.mysql.com
また、MySQL8.0ではSET PERSIST句という機能が新しく用意されており、
my.cnfよりも更に優先順位高く設定が行われる上に、
当機能を利用すればmy.cnfで定義できないパラメータも指定可能である。
但し、mysqld-auto.cnfという別の場所に定義されるため管理が猥雑になる欠点もある。
blog.s-style.co.jp
オプショングループ
my.cnfの[mysqld]や[client]という記述はオプショングループという定義である。
4.2.2.2 オプションファイルの使用
(中略)
オプションファイル構文
(中略)
[group]
group はオプションを設定するプログラムまたはグループの名前です。 グループ行のあと、すべてのオプション設定行は、オプションファイルが終了するか、または別のグループ行が指定されるまで、名前を指定したグループに適用されます。 オプショングループ名では、大文字と小文字は区別されません。
そのため、ここの記述無視して書いてると痛い目をみる。
(AmazonRDSのパラメータグループとか普段利用していて、dockerとかで利用する時に忘れてるとやらかす)
よって、同じ定義をしているのは、意味がある。
[client] port=3306 socket=/tmp/mysql.sock [mysqld] port=3306 socket=/tmp/mysql.sock
なお、オプショングループは以下の特性がある。
・オプショングループ名は同じプログラム名に適応される。
・clientオプショングループは、mysqlだけでなくMySQLクライアント全体に適応される
・client、mysqlみたいな包括関係がある場合は、オプショングループで同じ値を指定すると後勝ちになる
【関連リンク】
yoneyore.hatenablog.com
Linuxのスワップをクリアする方法
前提条件
・スワップで利用している量が実メモリに移動してもメモリ不足にならないか計算しておくこと
(実メモリ足りない時に当コマンド投入しても意味が無い)
・キャッシュも勘案して問題ないか確認しておくこと
(最悪食い潰すことは可能であるが、結局遅いだけである)
コマンド
swapoff -a && swapon -a
注意事項
・実行前に前処理は不要だが、実行すると処理が終わるのにしばらく時間がかかる
swapoffコマンドが徐々にスワップで利用していた分を実メモリに移していく。
(topと眺めていると少しずつスワップのとこが、実メモリに移っているのが観測できる)
swaponコマンドは領域割当を数回で実施するので、すぐにスワップ領域が生成される。
・当コマンドを投入するとCPUリソースもそれなりに利用される
・そのため、実行する際には出来るだけサーバーが落ち着いた状態で実施すること
(メモリ足りなくてトラブってる最中に投入するコマンドではない)
その他
キャッシュをクリアするコマンド
sync;sync;sync;sleep 3;echo 3 > /proc/sys/vm/drop_caches
メモリ、キャッシュ、スワップの使用率確認方法
バージョンによって動きが違う
nopipi.hatenablog.com
Amazon CorrettoにおけるJMC・JFRの利用方法
前提
AWS Correttoで調べた内容にて記載
但し、他のOpenJDKにおいても殆ど同じ(はず)
概要
JVMのヒープの状況やスレッドの情報などを確認するためのツール
JMCとJFRの主な違いは以下の通り
JFR[JDK Flight Recorder]
- 指定した期間イベントを記録するためのツール
- 低負荷で観測することが可能
JMC、JFR共にJava7で提供されていたが、当時は本番利用はサブスクリプションが必要だった。
しかし、Oracle社がOpenJDKに寄贈してくれたので、Java11で本番でも無償利用可能になった。
また、Java8でも利用できる様にバックポート対応してくれた。
Amazon Corretto 8u262 と Corretto 11.0.8 が利用可能に
そのため、古いブログの記事とかでは本番ではライセンスが必要とか、
起動する際にUnlockCommercialFeaturesみたいなオプションが必要だったのは上記背景がある。
入手方法
JMC
Correttoには2021年6月時点では同梱されていない。
別途配布が行われているので、こちらから取得可能である。
(以下のページのDownloadに記載しているrelease pageから取得可能)
GitHub - corretto/corretto-jmc: A build of JDK Mission Control (JMC) by the Corretto team.
JFR
Correttoに同梱されている。
起動方法
JMC
JMC自身はjmc.exeを起動すれば良い。
JMC8.0.0.1 Windows版においては、ようこそ画面は文字化けして起動する。
(jmc.iniでfile.encodingをUTF8を指定したが変わらずであった)
接続対象に関しては、ローカルとそれ以外で接続方法が異なる。
[ローカル]
勝手にJMCが検出してくれる。
(JDP[Java Discovery Protocol ]という機構で検出してくれている)
[ローカル以外]
JMXを有効化しておく必要がある。
(Javaプロセス起動時)
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=ポート番号 -Dcom.sun.management.jmxremote.rmi.port=ポート番号(上と同じで可) -Dcom.sun.management.jmxremote.authenticat=false -Dcom.sun.management.jmxremote.ssl=false
(Javaプロセス起動後)
jcmd Javaプロセス番号 ManagementAgent.start jmxremote.port=ポート番号 jmxremote.rmi.port=ポート番号 jmxremote.authenticate=false jmxremote.ssl=false
jcmdの上記オプションを忘れてしまった場合、以下の手順で確認できる。
1.jmc上で任意のプロセス(jmc自身でもOK)を選択
2.右クリックし、リモートJMXエージェントの制御を選択
3.以下の様なコンソールが現れる。
オプションなど変更すると、一番下にjcmdでどの様なコマンドを発行するのか確認可能
JFR
[jmc経由]
予めJMCでJFRを実行したいJavaプロセスと接続を行っておく必要がある。
その後、対象プロセスを選択した状態で右クリックを行い、フライト記録の開始を選択する。
するとフライト記録の開始というウィザードが表示される。
内容に従いながら設定することで記録が開始される。
[jcmd経由]
例) 1分録画する場合
jcmd Javaプロセス番号 JFR.start name=test maxage=1m filename=c:\temp\hogehoge.jfr
オプション詳細はJavaコマンドマニュアルのAdvanced Runtime Options for Java当たりから記載有
(但し、他のオプションも入り乱れている)
利用方法
他のサイトやYoutube上で沢山解説してくれている。
公式、英語だけど字幕&翻訳機能使えばだいたい追える
www.youtube.com
RedHatさんの公式ブログ
OpenJDK 8uでJDK Flight Recorderの入門 - 赤帽エンジニアブログ
P26~P39当たりに記載有
それ以外の部分もMTAやGC Viewerなど聞いたこと無いという人は是非見るべき資料
Javaの障害解析に関する道しるべ的良い資料
speakerdeck.com
その他
リモート接続がうまくいかない
どうもリモート接続するとうまくいかないケースがある。
原因としては、rmi接続する時の名前解決がうまくいかない場合に発生する模様である。
(IPv4で解決するところと、IPv6で解決するところが混在した場合に起きている?)
加えて、com.sun.management.jmxremote.local.onlyがtrueになっていた。
最適解では無いであろうが、以下の方法を行う事で接続できる様になった。
リモートデバックができない
この設定は関係ない。別途設定が必要である。
ローカルマシン以外で動いているjvmをEclipseでデバッグする - TIM Labs
Java 9 以降でリモートデバッグするときはホストの指定も必要 - Qiita
認証やSSLの設定を行いたい
Windowsのがうまく設定できないので、実現出来た時に纏める
Linuxの場合の対応方法
www.programmersought.com
jcmdで良く利用するコマンド
# JMXの起動(上記解説の通り、別途オプションが色々必要) jcmd Javaプロセス番号 ManagementAgent.start # JMXの状態確認 jcmd Javaプロセス番号 ManagementAgent.status # JMXの停止 jcmd Javaプロセス番号 ManagementAgent.stop # 起動引数の確認 jcmd Javaプロセス番号 VM.command_line # system.propertyの値の確認 jcmd Javaプロセス番号 VM.system_properties # VMフラグの値を出力(-allで全量出力) jcmd Javaプロセス番号 VM.flags # スレッドダンプ取得(-lで詳細出力) jcmd Javaプロセス番号 Thread.print # ヒープダンプ取得(-allでファントム参照も含める、引数無の場合はフルGC後取得) jcmd Javaプロセス番号 GC.heap_dump filename=c:\temp\hogehoge.dump
詳しく知りたい場合は、JavaSE11のマニュアル jcmdユーティリティを参照すれば良い。
参考資料
JDK11のJMCのマニュアル、今は分かりにくい
JDK Mission Control | Oracle 日本
JDK7のJMCのマニュアル、古いけど日本語で読みたいなら今はこっち
Java Platform, Standard Edition Java Mission Control ユーザーガイド
JFRに関する解説を記載してくれている
目次 · 入門: JDK Flight Recoder
JFR Event Streamingについて
【NADP】JFR Event Streamingについて(デモ解説その1) | インサイト - Natic | 日商エレクトロニクス
トラブルシューティングについてどうやってしていけばいいのか丁寧に解説してくれている
youtu.be
古い本であるが、現代においても体系的に学習するのにとてもいい本
ストレージやCPUで遅くなる理由などがイメージしやすくなる
認証・認可関連の本(2024年3月時点)
あまり認証や認可に関する本が無いので纏めてみた(随時更新中)。
この中でピンとくるのが無ければ、Web界隈を追い求める方が良さげ。
(なお、英語本、技術書典界隈などは当方追えてないですが…)
OpenID Connect/OAuth関連
整理してOAuth2.0を使うためのチュートリアルガイド
Software Design (ソフトウェアデザイン) 2021年10月号
特集記事:挫折していないOAuth/OpenID Connect入門
認証・認可フローの仕組みを解説
Authleteの川崎さんが書かれている記事なので、かなりきめ細かく書いてくれている
【電子版】雰囲気でOAuth2.0を使っているエンジニアがOAuth2.0を整理して、手を動かしながら学べる本
今のところ電子版、booth経由の購入のみ
authya.booth.pm
【電子版】OAuth・OIDCへの攻撃と対策を整理して理解できる本
今のところ電子版、booth経由の購入のみ
authya.booth.pm
Firebase Authentication で学ぶソーシャルログイン入門
Firebaseを題材に書かれているが、認証周りの実装を図を使って丁寧に解説されている。
ログイン画面などを初めて担当する際にとても参考になるかと。
認証全体
Software Design (ソフトウェアデザイン) 2020年11月号
特集記事:今更聞けない認証・認可
雑誌なので、最初に読むものとしてはとっかかりやすい
Software Design (ソフトウェアデザイン) 2024年2月号
特集記事:ゼロから学ぶWeb APIセキュリティ 設計から始める攻撃対策
第4章で認証・認可に関する記載有
日経ITエンジニアスクール 暗号と認証 最強の指南書
認証周りも含めた基礎知識固めるための本
この辺の知識が手薄、情報処理試験を真面目に受けてない人は読んだ方がいいかも
実践入門ユーザー認証 試して学ぶパスワードレス
oktaの画面キャプチャ多め
後半のFIDO書かれている書籍殆ど無いので、あるにこしたことない本
今さら聞けない暗号技術&認証・認可
Software Design の暗号技術、認証・認可に関連する記事を再編集した書籍
但し、発行月2023年3月以降の内容は含まれていない
当テーマのためだけにバックナンバー全部集める位なら、昔の分はこちら一冊買う方が良さげ
認証(メール)
サーバーを構築することが無いため拝読したことは無いが、どこかで読みたいと考えている本
メール技術の教科書
2024年02月21日頃発売予定とのこと
暗号特化
Software Design(ソフトウェアデザイン) 2022年3月号
特集記事:今さら聞けない暗号技術
暗号技術何それ?みたいな状態であれば、ここから読み始めるのがいいかも
暗号と認証
暗号化がメインテーマで、理論的な内容が多くを占める
基礎力高めるのにはとても良い本
但し、案件で認証とかでトラブル起こしてる時に読む本ではない
製品関連
認証と認可 Keycloak入門
OAuth/OpenID Connectに準拠したAPI認可とシングルサインオンの実現
あまりこの手の本は売れないであろうに書いてくれたことに感謝
Keycloakの商用版であるRedHat SSOにも有効な書物と思われる
ひと目でわかる Active Directory Windows Server 2022版
こちらはAzureADではなく、Active Directoryの本
セキュリティ界隈
体系的に学ぶ 安全なWebアプリケーションの作り方 第2版
通称徳丸本
Web開発してるのにまだ読んでない人は絶対読むべき本
見える風景が変わるはず
Web開発で良い本何?と聞かれたら必ず勧める1冊
但し、きちんと読むには時間が必要かつ基礎知識も必要
フロントエンド開発のためのセキュリティ入門
入社2~3年目位を想定して書かれている(とどこかでコメント見かけた)
徳丸本の一歩手前&フロント特化型という感じかと
セキュア・バイ・デザイン
かなり読むの疲れる内容ではあるが、色んなところで引用されているイメージ
なお、徳丸本読んでない人がこちらから読むのは心折れると思う
ハッカー関連
Kali Linux ビギナーズガイド
Kali Linuxなるものを知った際に有効かも
(とはいえ最近はいろんな本で紹介はされているが)
[asin:B08544DVRT:detail]
サイバーセキュリティプログラミング
どうやってハッキングされるのか?という観点で書かれている
Pythonではあるが考え方は有用なことが多い
古そうなので下に移動させた本
OAuth徹底入門
かなりお堅い本、加えて古くなっている
OAuth自体を用いて基盤作る人向けかも
その分きちんと読み切ったら力は付くかと
今は理由無ければ買わないで良いと思う本
脱オンプレミス!クラウド時代の認証基盤 Azure Active Directory
過去の歴史まで把握しておきたいなら買ってもいいかもやろけど
バイナリレベルで再帰的にファイル群を比較したい
【前提条件】
・ファイルの構造が同一であるが、中身が多少異なるディレクトリ同士を比較したい
・仮に/tmp/aと/tmp/b配下の全てのファイルを比較したいとする
【コマンド】
cd /tmp/a find . -type f -exec cmp '{}' /tmp/b/'{}' \;
【その他】
・テキストレベルで再帰的に比較したい
diff -r /tmp/a /tmp/b
・差異があるかどうかだけを比較したい
cd /tmp/a find . -type f -exec sha512sum '{}' \; | sort > ../a.txt cd /tmp/b find . -type f -exec sha512sum '{}' \; | sort > ../b.txt diff /tmp/a.txt /tmp/b.txt