1
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-03-26

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

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

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

Active Directoryにdbaroleグループを作成
image.png

#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を追加
image.png

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ユーザーのマッピング

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

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

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

emp_commonグループを作成
image.png

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

#共有グローバル・ユーザーの作成。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認証の場合でも同じように利用可能です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0