Oracle Database はデータベース・インスタンスに接続するための「ユーザー」とテーブル等のオブジェクトをグループ化する「スキーマ」がほぼ同一の概念として定義されています。このため、オブジェクトをグループ化するスキーマを作成するためにはデータベース・ユーザーを作成する必要があります。
Oracle Database 18c ではデータベースの認証に使用できない「スキーマ限定アカウント」を作成することができるようになりました。
スキーマ限定アカウントを作成
スキーマ限定アカウントは、CREATE USER 文または ALTER USER 文に NO AUTHENTICATION 句を指定します。認証を行わないため、同時に IDENTIFIED BY 句は使用できません。
SQL> CREATE USER schema1 NO AUTHENTICATION;
User created.
SQL> ALTER USER schema2 NO AUTHENTICATION;
User altered.
アカウントロックとの違い
従来は、接続できないユーザーを作成する場合にはアカウントをロックする方法が取られました。ロックされたユーザーに対して接続を行う場合、「ORA-28000: The account is locked.」が発生しますが、スキーマ限定アカウントに接続する場合は「ORA-01017: invalid username/password; logon denied」が発生します。
SQL> ALTER USER schema2 IDENTIFIED BY schema2 ACCOUNT LOCK;
User altered.
SQL> CONNECT schema2/schema2
ERROR:
ORA-28000: The account is locked.
Warning: You are no longer connected to ORACLE.
SQL>
SQL> CONNECT schema1/schema1
ERROR:
ORA-01017: invalid username/password; logon denied
PROXY接続時の動作についても動きが異なります。下記ではスキーマ限定アカウントを作成し、代理認証が成功しています。本来の用途を考えると接続できないようにすべきではないかと思いますが、現状ではこのような仕様になっています。
SQL> CREATE USER real1 NO AUTHENTICATION;
User created.
SQL> GRANT CREATE SESSION TO real1;
Grant succeeded.
SQL> CREATE USER proxy1 IDENTIFIED BY proxy1;
User created.
SQL> ALTER USER real1 GRANT CONNECT THROUGH proxy1;
User altered.
SQL> CONNECT proxy1[real1]/proxy1;
Connected.
SQL> SELECT USER FROM DUAL;
USER
------------------------------
REAL1
一方でアカウントがロックされたユーザーの代理接続は失敗します。
SQL> ALTER USER real1 IDENTIFIED BY real1 ACCOUNT LOCK;
User altered.
SQL> CONNECT proxy1[real1]/proxy1;
ERROR:
ORA-28000: The account is locked.
Warning: You are no longer connected to ORACLE.
制約
Oracle Databaseセキュリティ・ガイド にはスキーマ限定アカウントの制約として以下の記述があります。
・スキーマ限定アカウントは管理者アカウントおよび非管理者アカウントの両方に使用できます。
・スキーマ限定アカウントはデータベース・インスタンスでのみ作成され、Oracle Automatic Storage Management(ASM)環境では作成できません。
・スキーマ限定アカウントにはシステム権限(CREATE ANY TABLEなど)や管理者ロール(DBAなど)を付与できます。スキーマ限定アカウントは、付与された権限を修正する必要があることを前提として、表またはプロシージャのようなオブジェクトを作成できます。
・スキーマ限定アカウントにSYSDBA、SYSOPER、SYSBACKUP、SYSKM、SYSASM、SYSRAC、およびSYSDG管理権限を付与することはできません。
・スキーマ限定アカウントは、単一セッション・プロキシのプロキシ認証でクライアント・ユーザーとして使用されるように構成できます。これは単一セッション・プロキシの場合、プロキシ・ユーザーの資格証明のみが検証され、クライアント・ユーザーの資格証明が検証されないためです。したがって、スキーマ限定アカウントがクライアント・ユーザーになることができます。ただし、2つのプロキシが存在するシナリオの場合はクライアントの資格証明を検証する必要があるため、スキーマ限定アカウントを構成することはできません。したがって、スキーマ限定アカウントの認証は失敗します。
・スキーマ限定アカウントは、接続されたユーザー・リンク、固定ユーザー・リンク、または現行ユーザー・リンクのいずれかを使用してデータベース・リンク経由で接続することはできません。