カテゴリー
Oracle Database 運用 未分類

ORA-28001 the password has expired の対応

Oracle をインストールした後何もしないと 180日目で表題のエラーを受取り、接続障害が発生します。この障害を発生させないためには、あらかじめ運用アカウントへ適用するセキュリティーポリシーを定めて、プロファイルに反映させることが必要ですが、目前で起きている障害を直ちに取り除き、運用を速やかに再開させる為の方法も同じように必要なので対応手順をメモしておきます。

和文表記:
ORA-28001: パスワードが期限切れです。

SQL*Plus 等でDBAとしてデータベースを接続し次のコマンドを実行して、プロファイルの設定状況を確認します。

SQL*Plus を使う場合には事前に次のコマンドを実行しておくと、画面表示が見やすくなります:

set linesize 100 pagesize 250
column USERNAME format a30
column ACCOUNT_STATUS format a20
column PROFILE format a10
column LIMIT format a16

現状、DFAULT プロファイルの設定がどうなっているかを調べるのが次のSQLです。

select LIMIT from dba_profiles where RESOURCE_NAME='PASSWORD_LIFE_TIME' and PROFILE='DEFAULT';

初期値のままだと次の様に表示されます。

LIMIT
----------------
180

データベース作成後180日目以後に大騒ぎにならないようにする為には次のSQLを実行しておきます。

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

パスワードの有効期限が切れているアカウントの現況を調べるには次のSQLを実行します。

select USERNAME,ACCOUNT_STATUS,EXPIRY_DATE,PROFILE from dba_users where username = 'アカウント名';

上記の問合せ結果からパスワードの有効期限が切れている事は”EXPIRED”というキーワードで確認できます。

USERNAME                       ACCOUNT_STATUS       EXPIRY_D PROFILE
------------------------------ -------------------- -------- ----------
アカウント名                    EXPIRED              日付時刻  DEFAULT

このアカウントを有効化する為には次の SQL を実行します。

ALTER USER アカウント名 IDENTIFIED BY 新しいパスワード;

これで終わりです。

カテゴリー
アプリ

Git for Windows と ssh を使ってリポジトリへ接続する方法

Windows 環境下での ssh の設定には Linux のものとは多少異なる操作があります。忘れた時の為にこの記事を残すことにしました。

自分しか使わない前提の GitLab サーバを構築(自己証明書で運用)しましたが、アップデートを重ねていくうちに git pull/push 時に次の警告が出るようになってしまいました。

warning: ----------------- SECURITY WARNING ----------------
warning: | TLS certificate verification has been disabled! |
warning: ---------------------------------------------------
warning: HTTPS connections may not be secure. See https://aka.ms/gcmcore-tlsverify for more information.

これは次のコマンドが実行され、サーバー証明書のチェックを回避する設定が選択されている場合に表示されます。

git config --global http.sslverify true

因みに http.sslverify false が設定されている場合だと、次のエラーが発生して git pull/push 操作自体に失敗します。

fatal: unable to access 'https://接続先/オーナー名/リポジトリ名.git/': SSL certificate problem: self signed certificate

この時、リモート・リポジトリの設定は次のようなものでした。https で始まる点に注目して下さい。

git remote -v
origin https://接続先/オーナー名/リポジトリ名.git (fetch)
origin https://接続先/オーナー名/リポジトリ名.git (push)

Git リポジトリへの接続には ssh を使うやり方も選べるので切り替えることにしました。それにより、目障りな警告メッセージを見なくて済むようになる事を目論んだからです。

まずは ssh-keygen コマンドを使って公開鍵とプライベート鍵のペアを作ります。作り方は簡単にググれるので省きます。鍵のファイル名はそれぞれ id_rsa.pub と id_rsa とします。

公開鍵(id_rsa.pub)の方を GitLab の PreferencesSSH 鍵の画面で登録します。

次に、ユーザのホームディレクトリ下に .ssh というフォルダを作成します。PowerShell を表示させて次のコマンドを入力します。

mkdir ${env:UserProfile}/.ssh

上記のコマンドで作成された ${env:UserProfile}/.ssh というフォルダの下に config というファイルを作成します。中身は次の内容とします。

Host エリアス
    HostName ホスト名.ドメイン名
    User git
    IdentityFile ~/.ssh/id_rsa
    Port ポート番号
    TCPKeepAlive yes
    IdentitiesOnly yes

ssh では通常ポート番号 22 を使いますが、Docker コンテナとして GitLab を運用する場合は、publish スイッチを伴う docker run コマンドを使い、ホスト側の22番との競合を回避させるのが通例です。上記の設定例にあるポート番号は回避させる為に与えた番号を記述します。

config ファイルを作成したら、同じフォルダへ公開鍵とプライベート鍵を保存します。

続いて、所有者以外に書き換えられないようアクセス権を剥奪します。Linux の場合だと chmod 700 を実行する操作に該当します。

icacls $env:UserProfile/.ssh/config /inheritance:r
icacls $env:UserProfile/.ssh/config /grant "${env:UserDomain}\${env:UserName}:F"
icacls $env:UserProfile/.ssh/id_rsa /inheritance:r
icacls $env:UserProfile/.ssh/id_rsa /grant "${env:UserDomain}\${env:UserName}:F"
icacls $env:UserProfile/.ssh/id_rsa.pub /inheritance:r
icacls $env:UserProfile/.ssh/id_rsa.pub /grant "${env:UserDomain}\${env:UserName}:F"

フォルダのアクセス権も同様に剥奪します。

icacls $env:UserProfile/.ssh /inheritance:r
icacls $env:UserProfile/.ssh /grant "${env:UserDomain}\${env:UserName}:F"

ssh を使ってGitLabサーバーへアクセスできるか確認します。’v’ オプションはデバッグ用で、接続障害が発生した時に役立つ診断情報を画面に表示させることが出来ます。

ssh -v エリアス

接続を無事確認することが出来たら、このエリアスを使ってgit の構成を変更します。

git remote set-url origin git@エリアス:オーナー名/リポジトリ名.git

もはや https 接続を使いませんので不要な設定を取り除きます。

git config --global --unset http.sslverify
git config --global --unset http.sslcainfo

あとは、git pull コマンドなどを実行して問題が無いことを確認します。