Oracle Databaseの認証をActive Directoryで行う②


前回は、AD認証の環境構築から実際にAD認証できるところまで紹介しました。今回は、そのユーザーに対するデータベース・ロールの付与から始めます。

ADグループによるデータベース権限の管理

グローバル・ユーザーに直接データベース・ロールを付与するのではなく、ADのグループを使った動的なロール付与の方法を試します。ここでは、testusrにデータベースのDBAロールを付与します

Active Directoryにdbaroleグループを作成

#PDBに接続し、ロールをADのdbaroleグループにマッピングするように作成。そのロール自身にDBA権限を付与
SQL> create role dbarole identified globally as 'cn=dbarole,cn=users,dc=cmutest,dc=com';
SQL> grant dba to dbarole;

#ADユーザで接続し、今のtestusrが保持している権限を確認
connect "[email protected]"@PDB
SQL> select * from session_roles;
no rows selected

Active Directoryのdbaroleグループにtestusrを追加

ADユーザで再ログインし、testusrにDBAロールが付与されていることを確認

connect "[email protected]"@PDB
SQL> select * from session_roles;
ROLE
-----------------------------------------
DBA
23 rows selected.

上記の通り、DatabaseのロールとActive Directoryのグループをマッピングし、ADユーザーのグループの追加/削除に応じて、動的にユーザーの権限が変更されます。予めいくつかの権限レベル分けしたロールを作成し、ADグループにマッピングしておけば、ADだけの操作でユーザーに対応する権限付与が可能です

Databaseのグローバル・ユーザーとADユーザーのマッピング


今までは、Databaseのグローバル・ユーザー = Active Directoryのユーザーが1:1でマッピングをする設定でした。(上記のスライドのDedicated Database Schemaの部分)
ただこれは、ADユーザーと同数のグローバル・ユーザが必要になるので、実際の運用では共有のグローバル・ユーザーにADグループをマッピングし、グローバル・ユーザー数を最小限にする方法も有効です。(スライドのShared Database Schema)
説明だけだとピンと来ないかと思うので、次はこの共有データベース・スキーマの設定を試します

共有グローバル・ユーザーを使用したAD認証

3つのADユーザー(emp_mgr,emp1,emp2)を作成し、ORA_VFR_12Cグループに追加。追加後にパスワードをリセットし再設定

emp_commonグループを作成

emp_commonグループに作成したユーザーを追加

#共有グローバル・ユーザーの作成。emp_commonのグローバル・ユーザーに対して、ADのemp_commonグループをマッピングしている点に注目(ユーザーではない)
create user emp_common identified globally as 'cn=emp_common,cn=users,dc=cmutest,dc=com';
#権限を付与
grant create session, resource to emp_common;

ADユーザー(emp1)で接続

SQL> connect "[email protected]"@PDB
Enter password:
Connected.

#保持している権限
SQL> select * from session_roles;
ROLE
--------------------------------------------------------------------------------
RESOURCE
SODA_APP

#セッション情報を確認。実際には、Databaseのemp_commonユーザーで接続していることが分かる
select SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') net_proto,sys_context('USERENV', 'AUTHENTICATED_IDENTITY') auth_identity,SYS_CONTEXT('USERENV','SESSION_USER') db_user,sys_context('USERENV','ENTERPRISE_IDENTITY') ent_identity from dual;
NET_PROTO  AUTH_IDENTITY     DB_USER     ENT_IDENTITY
---------  ----------------  ----------  ----------------------------------
tcp        [email protected]  EMP_COMMON  cn=emp1,cn=Users,dc=cmutest,dc=com

他のempユーザでも同様の結果となる

ADでemp_mgrだけをdbaroleグループに追加し、emp_mgrで接続

connect "[email protected]"@PDB

SQL> select * from session_roles;
ROLE
--------------------------------------------------------------------------------
RESOURCE
SODA_APP
DBAROLE
DBA
25 rows selected.
↑DBAロールが追加されているのが確認できる

AD認証時の二つの方法 Dedicated Database SchemaとSharad Database Schemaを紹介しました。
いずれもデータベース側はグローバル・ユーザーを使用していますので、DMLやDDLなどの権限付与を直接付与したり、または、ADのグループを経由での付与など運用に合わせた柔軟な設計ができます。
Oracle Databaseには、Virtual Private DatabaseやDatabase Vaultなどのアクセス制御機能がありますが、AD認証の場合でも同じように利用可能です。