Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

【基本】Oracle Database データベース・ユーザー・セキュリティ入門

【基本】Oracle Database データベース・ユーザー・セキュリティ入門

oracle4engineer

June 11, 2024
Tweet

Video

More Decks by oracle4engineer

Other Decks in Education

Transcript

  1. はじめに Copyright © 2024, Oracle and/or its affiliates 2 近年、データベースにますます⾼い安全性が求められています

    データベースはセキュアに構成されている必要があります データベースには⾮常に重要な情報が格納されています(クレジットカード情報など) 情報漏洩をはじめとするセキュリティ・インシデントが話題となっています。 データベースでのセキュアな構成例として以下の設定が挙げられます。 • セキュリティ・インシデントに対応できる⾼度なセキュリティ設定 • 悪意のある処理を抑⽌するための監査やログの保存
  2. Oracleデータベースへのログインに使⽤できるアカウント セキュリティを⾼めるためにデータベース管理者は、ユーザー・アカウントを適切に作成・管理する必要があります。 データベース・ユーザーとは Copyright © 2024, Oracle and/or its affiliates

    5 データベース・ユーザー クライアント SQL>connect <ユーザー名>/<パスワード> データベースに登録された データベース・ユーザーで接続 【参考】 代表的なOracle Databaseインストール時にデフォルト作成されるユーザー例 ユーザ名 詳細 SYS データベースの起動停⽌を含むすべての処理を実⾏でき、 データベースの管理情報(データ・ディクショナリ)を所有するユーザー SYSTEM データベース起動中のほとんどの処理を実⾏できる管理ユーザー SYSBACKUP,SYSDG,SYSKM,SYSRAC データベース管理者の業務の分離を容易化するためのユーザー セキュリティ・ガイド: 2.6 Oracle Databaseから提供される事前定義済のスキーマ・ユーザー・アカウント
  3. マルチテナント・アーキテクチャ(MTA)におけるユーザー 共通ユーザー • 各コンテナ(ルートと各 PDB) に同じ名前で存在するユーザー • 共通ユーザーはCDB$ROOTへ接続して作成します。 • 初期化パラメータ

    common_user_prefix で接頭辞を定義可能 デフォルトは C## ローカル・ユーザー • 特定の PDB のみに存在するユーザー (重複可能) • ローカル・ユーザーはそれぞれのPDBへ接続して作成します。 • PDB個別の管理ユーザも含まれます。 データベース・ユーザー Copyright © 2024, Oracle and/or its affiliates 6 SYS/SYSTEM は 特殊な共通ユーザ ローカル・ユーザー 共通ユーザー 重複 可能 SCOTT SCOTT ※ アプリケーション共通ユーザーについては以下のマニュアル記述をご確認ください Oracle Multitenant管理者ガイド: CDBの共通ユーザーおよびローカル・ユーザーの概要
  4. • ユーザー・アカウント※の ステータス確認 • ユーザー・アカウント※の ロック/ロック解除 • データベース管理者による パスワードの変更 •

    プロファイルの設定 • パスワードに関する制限設定と ユーザー・アカウントへの割当て • パスワード管理ポリシー設定 • パスワード⻑ • ⽂字種別 データベース管理者によるデータベース・ユーザーの認証管理 Copyright © 2024, Oracle and/or its affiliates 8 不要なユーザーの確認と制限 パスワードの変更 認証に関する制限設定 ※ マニュアルでは、データベース・ユーザーの認証に関する 説明において「データベース・ユーザー」と同じ意味で 「ユーザー・アカウント」という⽤語をつかうことがあります OPEN LOCKED EXPIRED
  5. sqlplus / AS SYSDBA [oracle@dbase ~] sqlplus / AS SYSDBA

    SQL*Plus: Release 19.0.0.0.0 – Production on Tue Mar 5 03:36:34 2024 Version 19.22.0.0.0 Copyright (c) 1982, 2023, Oracle. All right reserved. Connected to: Oracle Database 19c EE High Perf Release 19.0.0.0.0 – Production Version 19.22.0.0.0 ユーザーの管理を⾏う際は、管理者権限を持つユーザーでログインする必要があります 管理者権限でのログイン Copyright © 2024, Oracle and/or its affiliates 9 • SQL*Plusでデータベースに接続。 • SYSDBA権限をOS認証で利⽤する場合、 ユーザー名とパスワードを省略できます。 • SYSでログインします。 • 現在データベースに接続しているユーザーを表⽰します。 SQL> SHOW USER; USER is "SYS" SHOW USER; 【参考】 通常のSQL*Plusの利⽤ sqlplus <ユーザー名>/<パスワード>@<サービス名>
  6. SQL> DESC DBA_USERS; Name Null Type --------------------------- -------- ------------------------- USERNAME

    NOT NULL VARCHAR2(128) USER_ID NOT NULL NUMBER PASSWORD VARCHAR2(4000) ACCOUNT_STATUS NOT NULL VARCHAR2(32) LOCK_DATE DATE … … … DBA_USERSビューはデータベースのすべてのデータベース・ユーザーの情報を提供 データベース・ユーザー情報 Copyright © 2024, Oracle and/or its affiliates 10 DBA_USERSビューによって、ユーザー名(USER_NAME)、 ユーザーID(USER_ID)、アカウントのステータス (ACCOUNT_STATUS)など、ユーザーの詳細情報を確認 することができます。 OPEN アカウントはロックされていません。 ACCOUNT_STATUS LOCKED アカウントはロックされています。 EXPIRED パスワードが期限切れです。 DBA_USERSビュー SQL> SELECT USER_NAME, ACCOUNT_STATUS FROM DBA_USERS; USERNAME ACCOUNT_STATUS --------------------------- --------------------------- SYS OPEN SYSTEM OPEN XS$NULL EXPIRED & LOCKED LBACSYS LOCKED … …
  7. SQL> ALTER USER TEST_USER ACCOUNT LOCK; User altered. SQL> SELECT

    USER_NAME, ACCOUNT_STATUS FROM DBA_USERS 2 WHERE USER_NAME = TEST_USER; USERNAME ACCOUNT_STATUS --------------------------- --------------------------- TEST_USER LOCKED ALTER USER <ユーザー名> ACCOUNT LOCK; / ALTER USER <ユーザー名> ACCOUNT UNLOCK; アカウントのロック / ロック解除 Copyright © 2024, Oracle and/or its affiliates 12 • ユーザーをロックしてログインできないようにします。 • ここではTEST_USERユーザーをロックしています。 SQL> ALTER USER TEST_USER ACCOUNT UNLOCK; User altered. SQL> SELECT USER_NAME, ACCOUNT_STATUS FROM DBA_USERS 2 WHERE USER_NAME = TEST_USER; USERNAME ACCOUNT_STATUS --------------------------- --------------------------- TEST_USER OPEN • ユーザーのロックを解除してログインできるようにします。 • ここではTEST_USERユーザーをロック解除しています。 ALTER USER <ユーザー名> ACCOUNT LOCK; ALTER USER <ユーザー名> ACCOUNT UNLOCK;
  8. SQL> ALTER USER TEST_USER IDENTIFIED BY WelCome123#123#; User altered. ALTER

    USER <ユーザー名> IDENTIFIED BY <パスワード>; アカウントのパスワード変更 Copyright © 2024, Oracle and/or its affiliates 13 • ユーザーのパスワードを変更しています。 • ここではTEST_USERユーザーのパスワードを 「WelCome123#123#」に変更しています。 ALTER USER <ユーザー名> IDENTIFIED BY <パスワード>; 【参考】データベース管理者のパスワード データベース管理者はOracle Databaseインスタンスが起動していない場合でも管理操作をおこないます そのため、Oracle Databaseインスタンスの外部にパスワードを保持します SQL> SELECT * FROM V$PASSWORDFILE_INFO; FILE_NAME ------------------------------------------------------------ FORMAT IS_AS CON_ID ------ ----- ---------- /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwee1922 12 FALSE 0 セキュリティ・ガイド: 3.3 データベース管理者の認証 データベース・リファレンス: 8.111 V$PASSWORDFILE_INFO セキュリティ・ガイド: 2.3.4 SYSユーザー・パスワードの変更 セキュリティ・ガイド: 2.3.3 SYS以外のユーザー・パスワードの変更
  9. ユーザーのデータベース・リソース制限とパスワード・パラメータをセットにしたもの プロファイルで以下を管理可能です。 • リソース使⽤量の制限 ※ • アカウント・ステータス及びパスワードの管理 プロファイルをユーザーに割り当てた場合、そのユーザーはプロファイルの制限を超えることはできません。 プロファイルとは Copyright

    © 2024, Oracle and/or its affiliates 14 データベースには「DEFAULT」という事前定義された プロファイルがあります。 ユーザー作成時にプロファイルを指定しなかった場合、 「DEFAULT」プロファイルが割り当てられます。 セキュリティ・ガイド: 2.4.4 プロファイルによるリソースの管理 SQL⾔語リファレンス: CREATE PROFILE ※ リソース制限はデータベース・リソース・マネージャ を使⽤をお勧めします 管理者ガイド: 27.1 Oracle Database Resource Managerについて
  10. プロファイルによるアカウント・ステータスの変更およびパスワードの有効期限の管理 Copyright © 2024, Oracle and/or its affiliates 15 アカウント・ステータスの変更

    • 特定のユーザーが、ある回数以上データベースの接続に失敗した 場合、そのユーザーをロックする設定ができます。 LOCKED 3回ログイン失敗! パスワードの有効期限の管理 • パスワードに有効期限を付けて、同じパスワードを使い続けないよう に設定できます。 Connect scott/tiger@xxx Connect scott/tiger@xxx
  11. SQL> CREATE PROFILE TEST_PROF1 LIMIT FAILED_LOGIN_ATTEMPTS 3 -- ユーザー・アカウントがロックされる前に --

    そのアカウントへのログインに連続して失敗できる回数 PASSWORD_LIFE_TIME 60 -- パスワードの存続⽇数 PASSWORD_REUSE_TIME 365 -- パスワードの使⽤期限切れ後、再利⽤可能になるまでの⽇数制限 PASSWORD_REUSE_MAX 5 -- パスワードの再使⽤に必要なパスワード変更回数 PASSWORD_LOCK_TIME 1 -- パスワードが指定回数連続失敗した際のアカウントがロックされる⽇数 PASSWORD_GRACE_TIME 7 -- パスワードの変更可能⽇数 INACTIVE_ACCOUNT_TIME 15 -- ユーザー・アカウントがロックされるまでの連続⾮ログイン⽇数の許容値 PASSWORD_ROLLOVER_TIME 1 -- 段階的なパスワード・ロールオーバー期間を設定 PASSWORD_VERIFY_FUNCTION ORA12C_STRONG_VERIFY_FUNCTION -- パスワード・ポリシー関数 ; Profile created. CREATE PROFILE⽂を使⽤すると、プロファイルを作成できます プロファイルの作成 Copyright © 2024, Oracle and/or its affiliates 16 • ユーザーのプロファイルを作成します。 • リソース使⽤量の制限やアカウント・ステータス およびパスワードの有効期限の管理が可能。 • ⼀部パラメータを抜粋して左に記載しています。 CREATE PROFILE <プロファイル名> LIMIT <制限名> <設定値> ...; SQL> ALTER USER TEST_USER PROFILE TEST_PROF1; User altered. • ユーザーにプロファイルを割り当てています。 • ここではTEST_PROF1というプロファイルを TEST_USERユーザーに割り当てています。 ALTER USER <ユーザー名> PROFILE <プロファイル名>; SQL⾔語リファレンス: CREATE PROFILE
  12. パスワード管理ポリシー Copyright © 2024, Oracle and/or its affiliates 17 パスワードの複雑度をチェックするパスワード検証関数

    • 上記のポリシー以外に、カスタム・パスワード・ポリシーを作成することができます。 • カスタム・パスワード・ポリシーでは、パスワード⻑、⽂字種別、前回のパスワードとの違いを、ユーザー独⾃に設定可能です。 • セキュリティを⾼めるためには、推測困難な複雑なパスワードを使⽤しましょう。 パスワード・ポリシー関数 パスワード⻑ ⽂字種別 前回のパスワードとの違い verify_function_11G 8 ⽂字以上 数字と英字をそれぞれ1つ以上 3 ⽂字以上 ora12c_verify_function 8 ⽂字以上 数字と英字と特殊⽂字をそれぞれ1つ以上 3 ⽂字以上 ora12c_strong_verify_function 9 ⽂字以上 数字と英⼤⽂字と英⼩⽂字と特殊⽂字を それぞれ2つ以上 4 ⽂字以上 ora12c_stig_verify_function 15 ⽂字以上 数字と英⼤⽂字と英⼩⽂字と特殊⽂字を それぞれ1つ以上 8 ⽂字以上 セキュリティ・ガイド: 3.2.6 パスワードの複雑度の管理
  13. 権限とロールによってユーザーのデータへのアクセスおよび実⾏可能なSQL⽂のタイプを制御 データベースで処理を⾏うための「権利」。 システム権限とオブジェクト権限の2つに分類されます。 権限とロール Copyright © 2024, Oracle and/or its

    affiliates 19 権限や他のロールをセットにして名前をつけたもの。 MTA構成の場合、共通ロールとローカル・ロールの2種類が存在します。 データベース内で特定の操作をするための権限 特定のオブジェクトへのアクセスを制御 権限 システム権限 オブジェクト権限 ロール CDBルートとCDB内の全PDBに存在 特定のPDBのみに存在 共通ロール ローカル・ロール CREATE TABLE権限 CREATE SESSION権限 SELECT権限 CREATE TABLE権限 CREATE SESSION権限 SELECT権限 独⾃のロール システム権限 オブジェクト権限 セキュリティ・ガイド: 4 権限とロール認可の構成
  14. 権限の付与 Copyright © 2024, Oracle and/or its affiliates 20 CREATE

    TABLE権限 1. ユーザーに対して権限を付与 2. 権限をロールに付与、そのロールをユーザーに付与 ロールを利⽤すると、⼀括して権限の管理を⾏えるため効率的です。 付与したい権限をユーザーに直接付与します。 CREATE TABLE権限 CREATE SESSION権限 SELECT権限 独⾃のロール
  15. -- ローカル・ユーザーTEST_USERにCREATE VIEW権限を付与します。 SQL> GRANT CREATE VIEW TO TEST_USER CONTAINER=CURRENT;

    Grant succeeded. 権限とロールのGRANT⽂による付与とREVOKE⽂による取り消し 権限とロールの付与 / 取り消し Copyright © 2024, Oracle and/or its affiliates 21 • ユーザーに権限を割り当てています。 • オブジェクト権限を付与する場合はon <オブジェクト>句でオブジェクトを指定 する必要があります。 • 権限・ロールを全コンテナに共通で付与する場合、CONTAINER=ALL句を 指定します。CDBルートで共通ユーザーに対してのみ実⾏可能です。 • 権限・ロールを特定のPDBにローカルで付与する場合、 CONTAINER=CURRENT句を指定します。PDBではローカルにのみ付与可 能です。 • CONTAINER句を省略した場合、デフォルトで権限・ロールはローカルに付与 されます。 GRANT <権限> (on <オブジェクト> ) to <ユーザー名>; -- ローカル・ユーザーTEST_USERからCREATE VIEW権限を取り消します。 SQL> REVOKE CREATE VIEW FROM TEST_USER CONTAINER=CURRENT; Revoke succeeded. • ユーザーに付与された権限を取り消ししています。 • オブジェクト権限を取り消しする場合はon <オブジェクト>句でオブジェクトを指定 する必要があります。 • CONTAINER句について、権限・ロールを付与するGRANT⽂と同様の特徴を 持ちます。 REVOKE <権限> (on <オブジェクト> ) from <ユーザー名>; -- 共通ユーザーC##TEST_USERにCREATE VIEW権限を付与します。 SQL> GRANT CREATE SESSION TO C##TEST_USER CONTAINER=ALL; Grant succeeded. -- 共通ユーザーC##TEST_USERからCREATE VIEW権限を取り消します。 SQL> REVOKE CREATE SESSION FROM C##TEST_USER CONTAINER=ALL; Revoke succeeded.
  16. あるシステム権限が付与されているユーザーは、他のユーザーにそのシステム権限を付与可能。 OPTIONが指定されている権限について Copyright © 2024, Oracle and/or its affiliates 22

    DBA USER1 USER2 CREATE TABLE権限 GRANT CREATE TABLE TO USER1 WITH ADMIN OPTION; GRANT CREATE TABLE TO USER2; WITH ADMIN OPTION句 WITH GRANT OPTION句 あるオブジェクト権限が付与されているユーザーは、他のユーザーにオブジェクト権限を付与可能。 CREATE TABLE権限 WITH ADMIN OPTION句を 持つので、他のユーザーへ CREATE TABLE権限が 付与可能
  17. CREATE ROLE <ロール名>; SQL> CREATE ROLE TEST_ROLE1; Role created. CREATE

    ROLE⽂を使⽤することでロールを作成 ロールの作成と権限の割り当て、ユーザーへの付与 Copyright © 2024, Oracle and/or its affiliates 23 • ロールを作成します。 • ここでは、test_role1というロールを作成しています。 • ユーザー作成の共通ロールの場合、共通ロールの名前の先頭に「C##」を 追加します。 SQL> GRANT CREATE SESSION to TEST_ROLE1; Grant succeeded. SQL> GRANT TEST_ROLE1 TO TEST_USER; Grant succeeded. • 権限をロールに付与します。 • ここでは、test_role1というロールにCREATE SESSION権限を付与しています。 • ロールをユーザーに付与します。 • ここでは、test_role1というロールをTEST_USERユーザーへ付与しています。 GRANT <権限>もしくは<ロール> to <ロール名>; GRANT <ロール名> to <ユーザー名>;
  18. • PUBLICロールへの権限付与は、全てのユーザーへ影響を与えるので⼗分に注意を払い、必要最低限の権限とすべきです。 • 権限を取り消す場合、PUBLICロールから取り消す必要があります。 【参考】USER_TABLEビュー • USER_TABLESビューはPUBLICロールに対して参照権限が付与されています • USER_TABLESビューと同じ名前のパブリック・シノニムが作成されています。パブリック・シノニムにはすべてのユーザーが USER_TABLESのオーナがSYSであることを意識せずに⾃⾝のオブジェクトであるかのようにアクセスできます。

    • すべてのユーザーはパブリック・シノニム経由でUSER_TABLESビューにアクセスし、PUBLICロールに付与された権限により 参照できるようになっています。 PUBLICロールに権限を付与することですべてのユーザーがその権限を使⽤可能 PUBLICロールに付与された権限、ロールについて Copyright © 2024, Oracle and/or its affiliates 24 USER_TABLES (パブリック・シノニム) すべてのユーザー PUBLIC (ロール) SYS USER_TABLES (ビュー) PUBLIC (ロール) 参照権限 シノニム(別名) 【条件絞り込み】 ログイン・セッションのユーザー情報で ⾃⾝がオーナーの表の情報のみ参照 セキュリティ・ガイド: 4.5.5 ANY権限とPUBLICロールについて
  19. 不要な権限がユーザーに付与されていないか確認 権限分析とは Copyright © 2024, Oracle and/or its affiliates 26

    データベース全体 権限分析の対象 ロール 指定されたロールが付与されたユーザー コンテキスト コンテキストで作成した評価式が TRUEに評価された場合 ロールとコンテキスト 指定されたロールが付与されており、 かつ、コンテキストで作成した評価式が TRUEに評価された場合 使⽤済み/未使⽤の権限の特定 データ・ディクショナリー・ビューへの書き込み 使⽤済み権限 未使⽤権限 SYSユーザー以外の全ユーザー DBAは権限分析の結果より、不必要な権限を削除 未使⽤権限 コンテキストで作成した評価式: ここではSYS_CONTEXTで取得する、現⾏のインスタンスのコンテキストに関連付けられたパラメータの値を評価しま す 例) SYS_CONTEXT ('USERENV', 'OS_USER') IN ('psmith', 'jrawlins') セキュリティ・ガイド: 5 権限分析の実⾏による権限使⽤の特定
  20. 権限分析の実⾏⼿順 SQL> begin #権限分析ポリシーの作成 DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE ( name => 'test_capture', #権限ポリシーの任意の名前

    description => 'Test Capture', #ポリシーの説明(省略可能) type => DBMS_PRIVILEGE_CAPTURE.G_DATABASE #権限ポリシーのタイプ ); end; / SQL> begin #権限分析ポリシーの有効化 DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE( name => 'test_capture', #権限ポリシーの任意の名前 run_name => 'RUN_FOR_TEST', #権限分析の任意の実⾏名 ); end; / • DBMS_PRIVILEGE_CAPTURE. CREATE_CAPTUREプロシージャを実⾏し、 権限分析ポリシーを作成します。 DBMS_PRIVILEGE_CAPTURE. CREATE_CAPTURE • DBMS_PRIVILEGE_CAPTURE. ENABLE_CAPTUREプロシージャを実⾏し、 作成したポリシーを有効化します。 • キャプチャが開始します。 DBMS_PRIVILEGE_CAPTURE. ENABLE_CAPTURE 1 2 Copyright © 2024, Oracle and/or its affiliates 27
  21. 権限分析の実⾏⼿順 Copyright © 2024, Oracle and/or its affiliates 28 SQL>begin

    #権限分析ポリシーの無効化 DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE ( name => 'test_capture', #権限ポリシーの任意の名前 ); end; / • DBMS_PRIVILEGE_CAPTURE.DISA BLE_CAPTUREプロシージャを実⾏し、 権限分析ポリシーを無効化します。 • キャプチャが終了します。 DBMS_PRIVILEGE_CAPTURE. DISABLE_CAPTURE 権限分析の対象となる アプリケーションの実⾏ 3 4
  22. 権限分析の実⾏⼿順 SQL>SELECT SYS_PRIV, #システム権限 OBJ_PRIV, #オブジェクト権限 OBJECT_NAME #オブジェクト権限で使⽤されたオブジェクト名 FROM DBA_USED_PRIVS

    #使⽤済み権限が格納されたディクショナリー・ビュー WHERE USERNAME = 'TEST_USER' AND CAPTURE = 'test_capture' AND RUN_NAME = 'RUN_FOR_TEST' ; SYS_PRIV OBJ_PRIV OBJECT_NAME --------------- --------------- --------------- CREATE ANY TABLE SELECT EMP SELECT DEPT SQL> SELECT SYS_PRIV , #システム権限 OBJ_PRIV , #オブジェクト権限 OBJECT_NAME #オブジェクト権限で使⽤されたオブジェクト名 FROM DBA_ UNUSED_PRIVS #未使⽤権限が格納されたディクショナリー・ビュー WHERE USERNAME = 'TEST_USER' AND CAPTURE = 'test_capture' AND RUN_NAME = 'RUN_FOR_TEST' ; SYS_PRIV OBJ_PRIV OBJECT_NAME --------------- --------------- --------------- CREATE ANY VIEW SELECT HR • 使⽤中の権限は、ディクショナリー・ビューの DBA_USED_PRIVSより確認することができま す。 • 格納されたレポートはポリシーの削除を⾏うま で格納されます。 • DBAはレポート結果を⾒て、不要な権限を削 除します。 DBA_USED_PRIVS • 未使⽤権限は、ディクショナリー・ビューの DBA_UNUSED_PRIVSより確認する ことができます。 • 格納されたレポートはポリシーの削除を⾏ うまで格納されます。 • DBAはレポート結果を⾒て、不要な権限 を削除します。 DBA_UNUSED_PRIVS 5 6 Copyright © 2024, Oracle and/or its affiliates 29 セキュリティ・ガイド: 5.6 権限分析ポリシーおよびレポート・データ・ディクショナリ・ビュー
  23. プロキシ・ユーザー・アカウントおよびプロキシ・ユーザー・アカウントを介した接続の認可 Copyright © 2024, Oracle and/or its affiliates 33 CREATE

    USER psmith IDENTIFIED BY WelCome1234__; GRANT CREATE SESSION TO psmith; ALTER USER sales_user GRANT CONNECT THROUGH psmith; ALTER USER sales_user GRANT CONNECT THROUGH psmith WITH ROLE sales_role; • プロキシ・ユーザー・アカウントは 通常のユーザー・アカウントと同様。 • 最⼩限(CREATE SESSIONのみ)の権限 を付与します。 CREATE ROLE sales_role; GRANT CONNECT,RESOURCE TO sales_role; CREATE USER sales_user NO AUTHENTICATION; GRANT sales_role TO sales_user; • 業務で使う表を保持するユーザ (業務ユーザー)とロール(業務ロール)を 作成します。 • スキーマ限定アカウント(オブジェクトを所 有するだけのログインできないアカウント)と して作成します。(18c以降) • 業務ユーザーに対し、プロキシ・ユーザー・ アカウント経由での接続を許可 (デフォルトはWITH ROLE ALL) • 業務ユーザーに対し、プロキシ・ユーザー・ アカウント経由での接続を許可 (業務ロール権限のみに制限) セキュリティ・ガイド: 3.5 スキーマ限定アカウント 3.13.1.5 プロキシ・ユーザー・アカウントの作成と、作成したプロキシ・ユーザー・アカウントを介したユーザー接続の認可
  24. Oracle上のユーザーのパスワード管理とユーザー認証を外部サービスにて実施する認証 外部認証: データベースによるパスワード認証以外の認証(1) Copyright © 2024, Oracle and/or its affiliates

    34 • 既にOSやドメインで認証されている必要があります。 • マルチテナント環境において基本的には利⽤しません。 ネットワーク認証 • ネットワーク・サービスとして、RADIUS、 SSL、Kerberos、 Windowsネイティブ認証などが挙げられます。 • sqlnet.oraのSQLNET.AUTHENTICATION_SERVICES パラメータで認証⽅法を指定します。 DBログイン 認証を委託 外部認証では、ユーザー名/パスワードを指定せずにデータベースに接続することができます。 OS認証 OSログイン DBログイン My Oracle Supportドキュメント: How To Connect to PDB By OS Authentication In 19c Container Database Environment (Doc ID 2729416.1) SQL> CREATE USER psmith IDENTIFIED EXTERNALLY;
  25. ユーザー関連情報をディレクトリ・サービスにて⼀元管理 ユーザーと権限を全社規模で集中管理します。 個別のユーザーごとに各データベースにデータベース・アカウントを作成する必要がありません。 グローバル認証: データベースによるパスワード認証以外の認証(2) Copyright © 2024, Oracle and/or

    its affiliates 35 DB接続 ユーザーと権限の集中管理 Oracle Internet Directory、 Microsoft Active Directory、 Entra ID(Azure AD)、OCI IAM • ユーザーおよび管理者はデータベース 内でグローバル・ユーザーとして識別 SQL> CREATE USER psmith IDENTIFIED GLOBALLY AS '認証⽅式';
  26. グローバル・ユーザー • ディレクトリ・サービス上のユーザーやグループにマッピング される、Oracle Database上に作成されるユーザー • ディレクトリ・サービスで認証されたユーザーがデータベースに ログインすると、このユーザーでログインすることになります。 • グローバル・ユーザーがディレクトリ・サービスのグループに

    マッピングされた場合、そのグループに所属するユーザーはすべて 同じグローバル・ユーザーとしてデータベースに接続します。 グローバル・ロール • ディレクトリ・サービス上のグループにマッピングされる、 Oracle Database上に作成されるロール • グローバル・ロールは通常のロールと同様、システム権限、 オブジェクト権限、他のロールを含む(GRANT)ことができます。 • グローバル・ロールがマッピングされたディレクトリ・サービスのグ ループのメンバーがデータベースにログインした場合、グローバル・ ロールに含まれる権限が利⽤可能となります。 • 同じグローバル・ユーザーに割り当てられても、利⽤者ごとに権限が 異なります。 グローバル・ユーザーとグローバル・ロール Copyright © 2024, Oracle and/or its affiliates 36 CREATE USER widget_sales IDENTIFIED GLOBALLY AS 'CN=widget_sales_group, OU=sales,DC=production, DC=examplecorp,DC=com'; CREATE ROLE widget_sales_role IDENTIFIED GLOBALLY AS 'CN=widget_sales_group, OU=sales,DC=production, DC=examplecorp,DC=com'; user1 user1 user2 user3 group1 user2 ディレクトリ・サービス Oracle Database グローバル・ユーザー ユーザー グループ user2 user3 group1 user2 ディレクトリ・サービス Oracle Database グローバル・ ユーザー ユーザー グループ role1 role2 group2 group3 グローバル・ ロール
  27. エンタープライズ・ユーザー・セキュリティとMicrosoft Active Directoryによる集中管理ユーザー エンタープライズ・ユーザー・セキュリティ(EUS) • Oracle8i〜 • Enterprise Edition機能 •

    認証⽅式 • パスワード、Kerberos、PKI証明書 • Oracle Identity Management Directory Services Plusライセンスが別途必要 • Oracle Internet Directory(OID)を別途構築 Microsoft Active Directoryによる集中管理ユーザー (Centrally Managed Users: CMU) • Oracle Database 18.1〜 • Enterprise Edition機能 • 認証⽅式 • パスワード、Kerberos、PKI証明書 • Microsoft Active Directory(AD)に、 データベース・ユーザーの認証と認可を統合 • EUSにくらべてシンプルな構成 グローバル・ユーザーとして利⽤可能な仕組み(1) Copyright © 2024, Oracle and/or its affiliates 37 エンタープライズ・ユーザー・セキュリティ・ガイド: 5.5 エンタープライズ・ドメインの管理 セキュリティ・ガイド: 6 Microsoft Active Directoryによる集中管理ユーザーの構成 user2 user1 role_a role2 Oracle Internet Directory Oracle Database エンタープライズ・ ユーザー user1 role1 グローバル・ ロール グローバル・ ユーザー エンタープライズ・ ロール Domain エンタープライズ・ ドメイン user1 group1 Active Directory Oracle Database ユーザー グループ user2 user3 group2 user1 role1 グローバル・ ロール グローバル・ ユーザー user2 排他マッピング(1:1) 共有マッピング(n:1)
  28. OAuth2トークンによるOracle Databaseの認証と認可 OCI IAM Identity DomainsおよびEntra ID(Azure AD) による統合的なユーザー管理 •

    Oracle Databaseのグローバル・ユーザおよびグローバル・ ロールとのマッピングの考え⽅は、CMUと同様。 • JDBC-thinドライバ、ODP.NETはネイティブクラウド認証対応 • 以下のOracle Database環境で利⽤可能 • Oracle Autonomous Database Serverless • Oracle Autonomous Database on Dedicated Exadata • Oracle Exadata Database Service on Dedicated Infrastructure • Oracle Base Database Service • オンプレミスOracle Databaseリリース19.18以降 (Entra IDのみ) OAuth2トークンによるOracle Databaseの認証と認可 グローバル・ユーザーとして利⽤可能な仕組み(2) Copyright © 2024, Oracle and/or its affiliates 38 セキュリティ・ガイド: 7 Oracle DBaaSデータベースに対するIAMユーザーの認証と認可 8 Oracle DatabaseのMicrosoft Azure Active Directoryユーザーの認証および認可 user1 group1 OCI IAM / Entra ID Oracle Database ユーザー グループ user2 user3 group2 user1 role1 グローバル・ ロール グローバル・ ユーザー user2 排他マッピング(1:1) 共有マッピング(n:1) OAuth2 token token ユーザー情報に アクセスするための アクセス権のリクエスト アクセストークンからユーザー情報 を取得してログイン OCI、Entra IDユーザー Oracle Databaseと IAM/Entra ID間の 通信はTLSにより 暗号化されセキュアに トークンを受け渡す Request Send OCI IAM / Entra ID(Azure AD) Blog記事: Oracle Databaseの外部認証 Oracle DatabaseのTLS暗号化を設定する OCI IAMとBaseDBのトークン・ベースの認証連携① OCI IAMとBaseDBのトークン・ベースの認証連携② OCI IAMとAutonomous Databaseのトークン・ベースの認証連携
  29. 以下の4点によって、データベースへの悪意のあるアクセスや操作を防⽌し、セキュアに利⽤可能です。 まとめ Copyright © 2024, Oracle and/or its affiliates 40

    1. 2. 3. 4. データベース・ユーザー認証の基本 権限とロール認可 権限分析の実⾏による権限使⽤の特定 データベース・ユーザーのさまざまな認証と認可 アカウント・ロックやプロファイルなどを利⽤し、セキュアなユーザー認証 権限やロールを利⽤して、ユーザーのデータのアクセスや操作を制御 権限分析によって、使われていない権限を明らかにするための仕組みを提供 多様な認証⽅法によって、皆さんのセキュリティ要件に最適化
  30. 中間層サーバを経由した接続においてプロキシ認証を利⽤できます。 • Oracle Call Interface(OCI)、JDBC/OCIまたはJDBC-thinドライバを利⽤することで利⽤可能です。 • プロキシ認証を使⽤すると、中間層アプリケーションのすべての層を通じてクライアント識別情報と権限が保持され、 クライアントのアクションが監査されます。 【参考】中間層サーバーにおけるプロキシ認証 Copyright

    © 2024, Oracle and/or its affiliates 42 user1 group1 ディレクトリ・サービス Oracle Database ユーザー グループ user2 user3 group2 proxy_user role1 グローバル・ ロール グローバル・ ユーザー sales_user 業務⽤ ユーザー APサーバー Wallet Wallet Wallet user1 接続プール セキュリティ・ガイド: 3.11 複数層の認証と認可 JDBC開発者ガイド: 10 プロキシ認証