管理者 のすべての投稿

Oracle:年、月、日、時、分、秒以下を切り捨てて取得する方法

OracleではTRUC関数を使用することで年、月、日、時、分、秒以下を切り捨てて取得することが可能となります。

使用例

サンプルテーブル「BIRTHDAY」

クエリー(SQL)

  • BIRTHDAYテーブルのUPDATE_DATEに対してTRUNC関数を使用した例となります。第2引数へformatを指定することで指定した単位で切り捨てた値を取得することが出来ます。
  • formatの種類 
    format説明
    YYYY年まで取得して月日時分秒を切り捨て
    MM年月まで取得して日時分秒を切り捨て
    DD年月日まで取得して時分秒を切り捨て
    HH年月日時まで取得して分秒を切り捨て
    MI年月日時分まで取得して秒を切り捨て
     

出力結果

 

Oracle:管理者ユーザー「SYS」と「SYSTEM」のデフォルトパスワード

Oracle 初期パスワードとは?

Oracle 初期パスワードを確認したい/変更したい場合、多くのバージョンで仕様が異なるため注意が必要です。この記事では Oracle の初期アカウント(SYS・SYSTEM)について、パスワードの扱いと安全な運用方法を解説します。

SYSユーザーのデフォルトパスワード:change_on_install

  • sysユーザーでのログイン例です。

SYSTEMユーザーのデフォルトパスワード:manager

  • systemユーザーのログイン例です。

Oracle:管理者ユーザー「SYS」と「SYSTEM」のデフォルトパスワード

ユーザー初期パスワード例備考
SYSchange_on_installデータディクショナリを管理する最上位アカウント
SYSTEMmanager一般的な管理作業に使用可能な補助アカウント

セキュリティ上の注意点

変更必須

デフォルトのままでは外部からの攻撃に悪用されやすいため、必ずパスワード変更を行うこと。

最近の Oracle バージョンでの違い

  • 11g 以降:インストール時にユーザーが必ずパスワードを指定。

  • 12c 以降:パスワードポリシーが強化され、英数字・記号混在の複雑なものを要求。

  • 19c/21c:初期アカウントはロック状態になっている場合も多い。

補足:運用時の留意点と実践アドバイス

本稿でご紹介したように、デフォルトユーザー「SYS」「SYSTEM」の初期パスワードが設定されたまま運用を開始することは、非常に高いセキュリティリスクを伴います。特にネットワークに接続された環境やクラウド/仮想化されたデータベースでは、外部からの侵入・横展開の入口になり得ます。

そこで、実運用にあたっては以下の点もあわせてご検討ください:

  1. パスワード変更/ロックダウンの徹底
    ・前述の SQL コマンド(ALTER USER … IDENTIFIED BY …)で直ちに適用するだけでなく、変更したパスワードは社内ポリシーに基づき「使い捨て・非共有」設計としてください。
    ・可能であれば、管理者ユーザーを使用せずに特権を限定した別ユーザーを作成し、SYS/SYSTEM アカウントは緊急対応用にのみ残すと良いでしょう。

  2. アクセス制御・監査ログの有効化
    ・データベースに対するアクセスを IP・ネットワーク・時間帯別に制限することで、万一パスワードが流出しても被害を抑制できます。
    ・また、誰がいつどのユーザーでログイン/DDL/DMLを実行したかを追えるように監査ログを有効化することも推奨されます。

  3. バージョン・ポリシーの理解
    ・本記事でも触れられている通り、Oracle Database のバージョンによって初期アカウントの仕様(パスワード必須・アカウントロック等)が異なります。例えば 11g 以降、12c/19c ではより強固なパスワードポリシーと自動ロック機能が導入されています。 Write Remember
    ・そのため、運用している環境のバージョンを把握し、初期設定のまま稼働していないか定期的に確認することが重要です。

  4. 定期的なレビューと脆弱性対策
    ・初期アカウントだけでなく、標準サンプルスキーマやテスト用ユーザーも残していないかチェックしてください。攻撃者は「資料通りに」残された穴を狙う傾向があります。
    ・さらに、データベース自体だけでなく OS/ミドルウェア/接続前段のネットワーク構成も含めた総合的なセキュリティレビューを年1〜2回実施することを推奨します。

  5. 万一のインシデント対応準備
    ・万が一、アカウントの不正使用やパスワード流出が疑われた場合の初動手順をあらかじめ策定しておくと、被害の拡大を防ぐことができます。
    ・例えば、アカウントの即時ロック/パスワード強制リセット/ログの取得・分析/改ざんの有無確認などを、運用マニュアルに定義しておくと安心です。

最後に、本稿の内容をただ「変更・実施すれば終わり」とせず、定期的な「運用の振り返り」と「改善サイクル」の一部として組み込むことが、真に安全なデータベース運用の鍵になります。ぜひ、日常運用の中で今回の注意点を意識し、安心・安全な環境構築に役立ててください。

リモートデスクトップでの接続前に事前に接続済ユーザーの有無を確認する方法

複数人開発メンバーがいる状況などで共通で使用しているアカウントでリモートデスクトップ接続する可能性がある場合、リモートデスクトップでの接続は基本後勝ち方式になってしまうため、先に誰かがリモートデスクトップで接続していると後発ユーザーが権限奪ってしまい先に使用している人へ迷惑をかけてしまう可能性があります。

なのでリモートデスクトップで共通で使用しているアカウントでログインする場合は事前にアクティブ状況は最低限確認しておきましょうというお話。

事前に接続先サーバーへのログインユーザーのアクティブ状況を確認する方法

  1. コマンドプロンプトを起動して「qwinsta /server:[接続先のサーバー名]」を入力して実行します。
  2. 以下の様に状態へ「Active」と表示されていれば該当ユーザーでログイン中となっているのが確認出来るので、そのユーザーでリモートデスクトップ接続する前に周囲にいつまで使用予定なのかなどを確認してから使用すると不要な摩擦を生むのを回避出来ます。

補足:運用時の注意点

  • 管理者権限が必要
    接続中ユーザーを確認するには管理者権限が必要な場合があります。特に query user コマンドや qwinsta コマンドを利用する際は、一般ユーザー権限では表示されないことがあります。

  • 強制ログオフのリスク
    他ユーザーが接続中の状態で強制的にログオフさせると、未保存データが失われる恐れがあります。運用ルールとして、必ず事前に通知・了承を得てから切断するようにしましょう。

  • 複数ユーザー環境での考慮
    Windows Server 環境などでは複数ユーザーの同時接続が可能な場合もありますが、通常の Windows 10/11 Pro では基本的に 1 ユーザーのみのリモート接続が許可されます。環境ごとに仕様を確認しておきましょう。

  • 自動化の工夫
    バッチファイルや PowerShell スクリプトに query user を組み込むことで、接続前にワンクリックで確認できる仕組みを整えると便利です。例えば、以下のようにログイン状況を出力する簡易スクリプトを作成できます。

     

SQL:システム日付と誕生日を元に年齢、誕生日までの月数、日数を表示する方法

SQLでシステム日付、誕生日を使用して年齢、システム日付~誕生日までの月数、日数を取得するSQLをメモしておきます。

以下はOracleでの実行例となっています。

サンプルテーブル

「BIRTHDAY」テーブル

【Oracle】システム日付と誕生日から年齢、誕生日までの月数、日数を表示する例

クエリー(SQL)例

実行結果

Excel:郵便番号へハイフンを挿入する方法

Excelで郵便番号へハイフンを挿入するにはREPLACE関数を使用することで可能です。REPLACE関数は本来置換用の関数ですが第3引数へ0を指定することで文字列の追加も可能となります。

REPLACE関数を使用して郵便番号へハイフンを挿入する例

  • 以下の例ではB2セルへ「=REPLACE(A2,4,0,”-“)」を入力してA列の値の4桁目に”-“ハイフンを挿入しています。
  • 第3引数へ0を指定すると第2引数の文字の直前に第4引数へ指定した値が挿入されます。

SQL:UPDATE と JOIN を使用してレコードを更新する方法

UPDATEで他のテーブルと結合(JOIN)した結果に対してのみ更新を実施したい場合、SQL ServerやMySQL、PostgreSQLではUPDATE文内に直接JOIN句を記載可能ですが、Oracleでは副問合せで結合することでJOINした結果に対して更新することが可能となります。

サンプルテーブル

「GOODS」テーブル

「GOODS_TYPE」テーブル

【Oracle】UPDATE文でJOINを使用して更新する例

クエリー(SQL)例

  • 以下の例ではGOODS_TYPEテーブルに存在するGOODS_CODEと一致するレコードのみGOODSテーブルのPRICE項目を更新しています。

実行結果

  • 以下の様にGOODS_CODEが一致しているレコードのみ更新されていることが確認できます。

 

【SQL Server、MySQL、PostgreSQL】UPDATE文でJOINを使用して更新する例

クエリー(SQL)例

  • SQL Serverなどでは直接UPDATE文内にJOINを指定可能なので以下のような記載でもエラーにはならず更新されます。

     

SQL:合計や平均を算出する方法

SQLで合計を求めるにはSUM関数、平均を求めるにはAVG関数を使用します。

DBMS毎の使用可否

関数\DBMSMySQLPostgreSQLSQL ServerOracle
SUM
AVG
 

サンプルテーブル

「GOODS」テーブル

合計を求める実行例

SUM関数を使用したクエリー(SQL)例

  • 以下の例ではGOODSテーブルのPRICE項目の合計値を求めています。

実行結果

平均を求める例

AVG関数を使用したクエリー(SQL)例

  • 以下の例ではGOODSテーブルのPRICE項目の平均値を求めています。

実行結果

SQL:副問合せの結果をALL句で比較して取得する方法

ALL句を使用することでWHERE句内に指定した副問合せの結果を比較してデータを抽出する事が可能となります。

サンプルテーブル

  • 「GOODS」テーブル
  • 「GOODS_TYPE」テーブル

ALL句を利用したクエリー(SQL)例

  • 以下の例ではまず副問合せでGOODS_CODEテーブルからGOODS_CODEが101と301のデータを取得し、ALL句でGOODSテーブルのGOODS_CODEが101と301以外のデータを取得しています。

実行結果

ワイヤレス トラックボールマウスが快適すぎた件

以前まではマウスにはそこまでこだわりがない方だったので光学式の安物を使用してましたが、リモートワークなどでPC操作時間が増えてくるとマウス操作で地味に手首に負担がくるのが気になってきたので意を決してトラックボールマウスを購入してみることにしました。

そこで半年位前に購入してみたのが

ロジクールの「トラックボールマウス ワイヤレス マウス windows mac iPad M575」です。

Amazonの「ロジクール ワイヤレスマウス トラックボール 無線 M575GR」ページへ

「トラックボールマウス ワイヤレス マウス windows mac iPad M575」の特徴

  • 発売日:2020/11/26
  • 参考希望小売価格:6,050円
  • 接続方式:無線アドバンス2.4GHz Unifying-USB、Bluetooth
  • メーカー:Logicool(ロジクール)
  • 対応機種:IPad, Windows, Mac
  • モデル番号:M575GR ※最新モデル(2021年12月購入時点)
  • 製品サイズ:10 x 13.4 x 4.8 cm
  • 重量:145 g
  • 「傾斜角度が付いたスクロールホイールで指をより自然で快適な位置にホールド/幅広い手の大きさにフィット」

 

トラックボールマウスの使用感

  • 購入後1ヶ月位は正直トラックボールでのマウスポインタ操作にかなり違和感がありました。
  • 購入後2,3ヶ月でだいぶ違和感がとれてきて、半年経った今では全く違和感なくなり以前のマウスは使う気がしなくなっちゃいましたw
  • 付属で「電池寿命最大24ケ月 グラファイト 国内正規品」も付いてきており未だに電池切れは起こしてないので2年持つというのも誇大広告ではなさそうです。
  • 1ヶ月位でトラックボールの滑りが悪くなってくるのでボールを外してほこりや垢を掃除すれば問題なく使えます。
  • 掃除の際にトラックボールにクリポリメイト(光沢剤)などを吹きかける事でさらに滑りがよくなります。

結論

  • 買って良かった!リモートワークがますます快適にw
  • まだトラックボールマウスを使用したことがなく、マウス操作で腱鞘炎などで手首が疲れてる自覚がある方には購入して損はないです。
  • 最初の違和感さえ克服すれば後は快適です♪
    Amazonの「ロジクール ワイヤレスマウス トラックボール 無線 M575GR」ページへ

Excel:文字列から指定した数の文字列を取得する方法

ExcelでMID関数を使用することで文字列から指定した数の文字列を取得することが出来ます。

MID関数は「=MID(文字列,開始位置,文字数)」で指定します。

開始位置へ 1 を指定することで先頭から取得することができます。

MID関数を使用して郵便番号から先頭3桁、末尾3桁を取得する例

  • 以下の例ではB4セルへ「=MID(B2,1,3)」を指定して郵便番号の先頭3桁を取得し、B5セルへ「=MID(B2,5,4)」を指定して末尾4桁を取得して表示しています。