Oracleデータベースの認証には、データベース内部での認証情報を利用する「データベース認証」と、OSユーザー情報を用いる「OS認証」の2種類があります。それぞれに適した用途や設定手順が異なるため、本記事では、Linux環境でのユーザー作成から、OS認証の詳細な設定方法や、OS_AUTHENT_PREFIXの役割を丁寧に解説します。セキュリティの観点を踏まえたベストプラクティスも紹介しますので、初心者から実務者まで活用できる内容となっています。
1. データベース認証とは?
データベース認証は、Oracleデータベースに直接、ユーザー名とパスワードを設定し、データベース自体が管理する認証方式です。データベースごとにユーザーを作成し、認証情報を一元管理できるため、特に複数の利用者が存在するシステムにおいて、厳密なアクセス制御を行いたい場合に適しています。
メリット・デメリット
メリット | デメリット |
---|---|
ユーザーごとのアクセス制御が柔軟に設定可能 | パスワード管理の手間がかかる |
データベース単独でのセキュリティ設定が可能 | ユーザー数が多いと管理が複雑になる |
設定手順:データベース認証
1.ユーザーの作成CREATE USER
文を用いてデータベースユーザーを作成します。
CREATE USER hr IDENTIFIED BY hr_password;
2.権限の付与
接続に必要な権限を付与します。
GRANT CONNECT, RESOURCE TO hr;
3.接続確認
作成したユーザーでデータベース接続を行い、正常に認証が行われることを確認します。
sqlplus hr/hr_password@orcl
ベストプラクティス
- プロファイル設定でセキュリティ強化:パスワード有効期限や複雑さを設定します。
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90;
- ログイン監査の有効化:不正アクセスを検知するためにログイン監査を設定します。
AUDIT SESSION BY ACCESS;
2. OS認証とは?
OS認証は、データベースにアクセスする際に、OS(オペレーティングシステム)のユーザー情報を利用して認証を行う方式です。Oracleデータベース側では、OSで既に認証されているユーザーに対して、パスワードなしでの接続が許可されます。この方法は、スクリプトの自動実行やバッチ処理の利用に便利で、パスワード管理の手間も省けます。
OS_AUTHENT_PREFIXの役割
OS認証を利用する場合、OSユーザーを識別するために、OS_AUTHENT_PREFIXというパラメータが重要になります。デフォルトでは「ops$
」が設定されており、Oracleデータベースは、この接頭辞とOSユーザー名を組み合わせた名前で認証を行います。
例えば、Linux上のユーザー名がtest1
の場合、データベースではops$test1
として認証されます。このプレフィックスは変更も可能で、組織のポリシーに合わせたプレフィックスを設定することで、ユーザー管理が容易になります。
3. 設定手順:LinuxでのOS認証
OS認証をLinux上で設定するためのステップを、順を追って説明します。ここでは、OSユーザーとしてtest1
を作成し、データベースにアクセスできるように設定します。
1.Linuxでtest1
ユーザーを作成
Linux上でOracleデータベースの認証に利用するtest1
ユーザーを作成します。
# useradd -G dba,oper,backupdba,dgdba,kmdba test1
# passwd test1
2.データベースでOS認証ユーザーを作成
デフォルトのOS_AUTHENT_PREFIX
(通常はops$
)を利用して、test1
に対応するデータベースユーザーを作成します。
CREATE USER "ops$test1" IDENTIFIED EXTERNALLY;
3.権限の付与
OS認証ユーザーに接続に必要な権限を付与します。
GRANT CONNECT, RESOURCE TO "ops$test1";
4.接続の確認
作成したtest1
ユーザーでLinuxにログインし、OS認証を利用してOracleデータベースに接続できることを確認します。
su - test1
sqlplus / as sysdba
#このコマンドで接続が成功すれば、OS認証が正常に機能しています。
[root@v19single ~]# useradd -G dba,oper,backupdba,dgdba,kmdba test1 ★ユーザー作成
[root@v19single ~]# passwd test1
Changing password for user test1.
New password:
BAD PASSWORD: The password is shorter than 7 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@v19single ~]# su - oracle
Last login: Fri Nov 15 11:23:54 JST 2024 on pts/0
[oracle@v19single ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 金 11月 15 11:27:16 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> CREATE USER "ops$test1" IDENTIFIED EXTERNALLY;
ユーザーが作成されました。
SQL> GRANT CONNECT, RESOURCE TO "ops$test1";
権限付与が成功しました。
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ su - test1
Password:
[test1@v19single ~]$ export ORACLE_SID=v19
[test1@v19single ~]$ export ORACLE_BASE=/u01/app/oracle
[test1@v19single ~]$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
[test1@v19single ~]$ export PATH=$PATH:$ORACLE_HOME/bin
[test1@v19single ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on 金 11月 15 11:39:22 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> ★接続できた
OS_AUTHENT_PREFIXのカスタマイズ
OS_AUTHENT_PREFIXは、必要に応じて変更が可能です。たとえば、組織やプロジェクトごとに接頭辞を分けたい場合、以下のように設定をカスタマイズします。この設定は、データベースの再起動が必要です。
ALTER SYSTEM SET OS_AUTHENT_PREFIX = 'custom$' SCOPE=SPFILE;
例えばOS_AUTHENT_PREFIX
をcustom$
に設定すると、データベース側ではcustom$test1
というユーザー名で認証が行われます。
SQL> show parameter os_authent_prefix
NAME TYPE VALUE
---------------------- ------------- ----------------
os_authent_prefix string ops$
SQL> alter system set os_authent_prefix='custom$' scope=spfile;
システムが変更されました。
SQL> shutdown immediate ★再起動
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。
Total System Global Area 1543500120 bytes
Fixed Size 8925528 bytes
Variable Size 889192448 bytes
Database Buffers 637534208 bytes
Redo Buffers 7847936 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL> show parameter os_authent_prefix
NAME TYPE VALUE
---------------------- ------------- ----------------
os_authent_prefix string custom$ ★
4. データベース認証とOS認証の選択ポイント
項目 | データベース認証 | OS認証 |
---|---|---|
パスワード管理 | 必要 | 不要 |
使用シーン | 個別管理、セキュリティ強化 | 自動処理、スクリプト利用時 |
OS_AUTHENT_PREFIXの利用 | 不要 | 必須 |
管理の利便性 | 中程度 | 高い(OSユーザーと連携する場合) |
セキュリティ設定の柔軟性 | プロファイルやパスワードポリシー設定可能 | OSユーザーの管理に依存 |
- データベース認証が推奨される場面:個別のユーザー管理が必要な環境や、厳格なセキュリティが求められるシステム
- OS認証が推奨される場面:スクリプトやバッチ処理の自動化が求められる環境
5. トラブルシューティングとセキュリティのベストプラクティス
よくあるエラーと対策
- ORA-01017: 無効なユーザー名/パスワード
- 問題点:OS認証が有効でない、または
OS_AUTHENT_PREFIX
が不一致である可能性があります。 - 対策:
sqlnet.ora
にSQLNET.AUTHENTICATION_SERVICES = (NTS)
が設定されているか確認。また、OS_AUTHENT_PREFIX
の設定とデータベースのユーザー名が一致しているか確認します。
- 問題点:OS認証が有効でない、または
- ORA-28000: アカウントがロックされています
- 問題点:認証に失敗するとアカウントがロックされる場合があります。
- 対策:以下のコマンドでアカウントをアンロックします。sqlコードをコピーする
ALTER USER "ops$test1" ACCOUNT UNLOCK;
- 接続時の権限不足
- 問題点:OS認証ユーザーに十分な権限が付与されていないと、接続に失敗します。
- 対策:必要な権限を再付与します。sqlコードをコピーする
GRANT CONNECT, RESOURCE TO "ops$test1";
セキュリティのベストプラクティス
- OSユーザーグループによる制限:OS認証を利用するユーザーは、特定のグループに所属させ、アクセス制御を行います。
- 監査の有効化:不正な接続やアクセスを記録するため、Oracle監査ログを有効化します。
- OS_AUTHENT_PREFIXの命名規則:組織のポリシーに基づき、わかりやすく適切なプレフィックスを設定することで、ユーザーの混乱を避けます。
6. まとめ:最適な認証方法の選択と管理のポイント
Oracleデータベースの認証方式は、それぞれに異なる強みがあります。OS認証を利用する際のOS_AUTHENT_PREFIXの活用法や、セキュリティのベストプラクティスを踏まえ、業務要件に応じた最適な認証方法を選択しましょう。
[参考]
Oracle Databaseセキュリティ・ガイド 19c
コメント