前回は、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 "testusr@cmutest.com"@PDB
SQL> select * from session_roles;
no rows selected
Active Directoryのdbaroleグループにtestusrを追加
ADユーザで再ログインし、testusrにDBAロールが付与されていることを確認
connect "testusr@cmutest.com"@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のグローバル・ユーザーに対して、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 "emp1@cmutest.com"@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 emp1@cmutest.com EMP_COMMON cn=emp1,cn=Users,dc=cmutest,dc=com
他のempユーザでも同様の結果となる
ADでemp_mgrだけをdbaroleグループに追加し、emp_mgrで接続
connect "emp_mgr@cmutest.com"@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認証の場合でも同じように利用可能です。