OracleマスターSilver 12ｃ ユーザー・セキュリティの管理


※用語はなるべく、Oracle® Databaseリファレンス　12c リリース1 (12.1) より抜粋しております。
【太字】：試験最重要ポイント
【青色】：試験問題を解くために必要な理解
【赤字】：最低限押さえておきたい知識
出題例：正解のみ掲載しています

###■公式チェックリストより出題範囲
●ユーザー・セキュリティの管理
　・データベース・ユーザー・アカウントを作成および管理する
　・権限の付与と取消しを行う
　・ロールを作成および管理する
　・プロファイルを作成および管理する

－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－

###要点
　編集中の記事が一度吹き飛んでやる気がなくなったので簡潔にまとめた。

「ユーザー」「プロファイル」「権限付与」「ロール」がポイントです。コマンドや正誤問題で出題されます。
特にユーザーやプロファイルについては細かいところまで出題されます。
　またロールについては、「事前定義のロール」も確実に押さえておきましょう。事前定義のロールは、リリースによってデフォルトで含まれる権限に違いがあるので要注意です。
ユーザーについては、CREATE USERコマンドを正確に押さえておくとよいでしょう。12c Silver試験では、この例題のようにコマンドに絡めた正誤問題というタイプの出題がよく見られます。また、SYSDBAやSYSOPER権限での接続についても、よく出題されますので確認しておくとよいでしょう。
ユーザーセキュリティ関連では、他にも権限の付与や剥奪、ロールも出題されるので、コマンドや使い方をよく確認しておいてください。

SYS、SYSTEM、SYSBACKUP、SYSDG、SYSKMの職責分離は出題されません。がSYSとSYSTEMに関しては他の分野での出題もあるので理解を深めるために確認しましょう。

－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－

###データベース・ユーザー・アカウントを作成および管理する
■データベースユーザーアカウントの作成
ユーザーアカウントを作成すると同時にユーザー名と同じ名前のスキーマも作成されます。

　・IDENTIFIED：認証方式
　・BY パスワード：Oracleデータベースで管理される。
　・EXTERNALLY：OS認証
　・GLOBALLY AS '外部認証名'：グローバル認証　Oracle Advanced Securityオプションによる認証方式
　・PASSWORD EXPIRE：パスワード期限切れ
　　**最初のログイン時にパスワード変更を促すことができます**
　・DEFAULT TABLESPACE：オブジェクトを格納する際のデフォルト表領域の指定　QUOTAキーワードでサイズを割り当てる必要がある
　・TEMPORARY TABLESPACE：一時表領域。QUOTAキーワードで**サイズを割り当てる必要はない**
　・QUOTA サイズ | UNLIMITED ON 表領域　
　　割当制限を指定する。
　・ACCOUNT LOCK | UNLOCK
　　作成したユーザーはアカウントロックもしくはアンロックしておくことができます。
　・PROFILE プロファイル名

　●パスワード認証
　データディクショナリに格納したユーザー名とパスワードを使用して認証を行う最も一般的な認証方式です。
パスワードを変更する時の構文
`ALTER USER ユーザー名 IDENTIFIED BY 新しいパスワード；`

####外部認証　
　●OS認証
　パスワードはOSまたはネットワーク認証サービスで管理される。ユーザー名には**OS_AUTHENT_PREFIX初期化パラメータ**で指定された接頭辞を付けます。
OS認証とパスワードファイルが存在している場合はOS認証が優先されます。

　●グローバル認証
　Oracle Advanced Security オプションによる認証方式です。バイオメトリック（指紋認証）、X.509証明書、トークンデバイスおよびOracle Internet Directory(LDAP準拠）を使用してユーザーを識別することができます。

　●DEFAULT TABLESPACE
　ユーザーが表や索引などの領域を使用するオブジェクトを作成する場合、そのオブジェクトを格納するための表領域が必要です。指定を省略すると、データベースレベルで設定してあるデフォルト表領域（USERS表領域）が割り当てられます

　●TAMPORARY TABLESPACE
　SQLにおいてORDER BY、GROUP BYを指定すると、内部的にはソート処理が行われます。ソート処理はメモリー上で行われますが、ソートに必要な領域が十分でなかった場合、一時表領域を使用します。
 
####割当て制限
　割当制限とは、ユーザーがその表領域内で使用できる領域のサイズの事です。ユーザーは各表領域に対して割り当てられたサイズまでしか、領域を新たに獲得する操作を実行できません。
　この設定は表領域ごとに行う必要があり、<font color="Red">デフォルトでは、どの表領域に対しても割当制限は設定されていません。</font>
そのために、<font color="Blue">事前に割当制限を設定しておかないとユーザーはオブジェクトを作成することはできません。</font>
ただし、一時表領域、UNDO表領域は割当制限をしてなくても使用することが出来ます。

___
###権限の付与と取消しを行う
権限の種類
システム権限：データベースに対する操作を実行できるようにする権限
オブジェクト権限：他スキーマのオブジェクトに対する操作を実行できるようにする権限
他のユーザーの所有する表に対するSELECT、INSERTなどの権限

【権限の付与】
`GRANT システム権限 TO ユーザー名 ｜ PUBLIC WITH ADMIN OPTION；`
　WITH ADMIN OPTIONを指定すると、ユーザーは自分が付与された**システム権限**をほかのユーザーに与えることが可能になります。
　
`GRANT` オブジェクト権限 ON オブジェクト名 TO ユーザー名 ｜ PUBLIC WITH GRANT OPTION；
　WITH GRANT OPTIONを指定すると、ユーザーは自分が付与された**オブジェクト権限**をほかのユーザーに与えることが可能になります。

【権限の取り消し】
●システム権限の取り消し
　`REVOKE システム権限名 FROM ユーザー名 | ロール名 | PUBLIC；`

●オブジェクト権限の取り消し
　`REBOKE オブジェクト権限名 | ALL ON オブジェクト名 FROM ユーザー名 | ロール名 | PUBLIC`


■システム権限の取り消しとオブジェクト権限の取り消しの違い
システム権限を取り消すユーザーは付与したユーザーと異なっていてもかまわない。システム権限を取り消した場合、指定したユーザーからのみ権限は取り消される。第三者に対する影響はない。（Aユーザー→Bユーザー→Cユーザーの連鎖で権限を与えてBユーザーから権限をはく奪してもCユーザーからは取り消されない）

オブジェクト権限の場合、権限を取り消せるのは以下の場合のみ。
『公式ドキュメントより抜粋』　
・以前にそのユーザーまたはロールにそのオブジェクト権限を付与したユーザー。
・GRANT ANY OBJECT PRIVILEGEシステム権限を保有している。
→この場合は、オブジェクト所有者によって付与されたか、この所有者にかわってGRANT ANY OBJECT PRIVILEGEを持つユーザーによって付与されたあらゆるオブジェクト権限を取り消すことができます。ただし、With Grant Optionによって付与されたオブジェクト権限を取り消すことはできません。

ユーザーから権限が取り消されると、そのユーザーから付与された**他のユーザーに対しても連鎖的に取り消しが行われます。**
例：
①AユーザーがBユーザーに付与
②BユーザーがCユーザーに付与
③AユーザーがBユーザーの権限を取り消す
④連鎖的にCユーザーの権限も取り消される。

___
###ロールを作成および管理する
ロールは、関連するシステムおよびオブジェクト権限の名前付きグループです。ロールを作成し、ユーザーおよび他のロールに割り当てます。

ロールには次の特徴があります。
●**システム権限とオブジェクト権限で構成**することができる
●ユーザーだけでなく、ほかの**ロールにロールを付与することができる**
●ロールに権限を付与する際にADMIN OPTIONを指定すると付与したロールをさらにほかのユーザー（ロール）に付与することを許可できる
●有効/無効にすることができる
●パスワードを定義し、有効にする際にパスワードを要求することができる
●ロールは、スキーマオブジェクトではない

■ロールの作成
構文：CREATE ROLE ロール名 [IDENTIFIED {BY パスワード | EXTERNALLLY | GLOBALLY AS '外部名'}]

■ロールに権限をXXXロールに付与し、それをAユーザーに付与
構文：`GRANT create session, create table TO XXX;`
　　　`GRANT XXX TO A;`

■ロールの保護
ユーザーに付与したロールは通常有効になっていますが、無効に設定することもできます。

●デフォルトロールの設定
構文：ALTER USER ユーザー名 DEFAULT ROLE ロール名；
－上記のコマンドで指定されなかったロールは、付与されていてもログイン時には有効になりません。有効にするためにはSET ROLEコマンドを使用します。
構文：`SET ROLE XXX_ROLE IDENTIFIED BY password;`

－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
###プロファイルを作成および管理する

■プロファイル
　システム・リソースのコンテキストにおけるユーザー・プロファイルとは、リソース制限と**パスワード・パラメータをセット**にして名前を付けたもので、ユーザーに対して**データベースの使用率**および**データベース・インスタンス・リソースを制限**します。

■パスワード管理
　プロファイルを使用するとパラメータの設定によりパスワードの管理が可能になります。
重要なものだけ抜粋

PASSWORD_LIFE_TIME：パスワードが失効するまでの有効期間
PASSWORD_GRACE_TIME：パスワードが執行した後、最初に成功したログイン以降にパスワード変更できる猶予期間。**この期間内に変更しないとアカウントはロックされる。

　●パスワードの複雑さを検証するファンクションを設定する。
　　`@?/rdbms/admin/utlpwdmg.sql`
　　DEFAULTプロファイルにVERIFYファンクションを設定する。SYSユーザーで実行する必要がある。既存ユーザーにも適用されるようになります。

■リソースの制限
　データベース使用率およびインスタンスリソースに対する使用は、パラメータを設定することで制限できます。
リソース使用量に関する項目は、デフォルトでは無効になっています。RESOURCE_LIMIT初期化パラメータの値をTRUEにする必要があります。
『重要なものだけ抜粋』
IDLE_TIME：アイドル状態の時間。超過するとセッションが切除される。
PRIVATE_SGA：共有サーバー接続時に使用できるSGA内のUGA最大サイズ。超過するとSQL実行時エラーとなる。

■プロファイルの削除
　構文：DROP PROFILE プロファイル名[CASCADE]
ただし、**DEFAULTプロファイルを削除することはできません。**

現在、ユーザーに割り当てられているプロファイルを削除するためには**CASCADE**オプションを使用します。
その場合、自動的にDEFAULTプロファイルが代わりに割り当てられることになります。プロファイルを削除しても、現在アクティブなセッションには影響を与えません。つまりセッションを新たにした時点で変更されたプロファイルが適用されることになります。

プロファイルを使用して制限を施行することができます。
【理解】：**一部の制限に関しては**リソースマネージャーを使用して設定することも可能ですが、パスワード関係など、プロファイルを使用しないと制限できないこともある場合に注意。

###出題例

出題例：管理者権限に関する正しい説明を選択しなさい。
Oracleユーザー名とパスワードをOracle Netで送信するときは、自動的に暗号化が行われる。
OS認証とパスワード認証ではOS認証が優先される。

出題例：アカウント作成時のオプションについて正しい説明を選択しなさい。
頻出：EXPIRE、QUOTA、プロファイルを指定しなかった場合に設定されるプロファイル、IDENTIFIED EXTERNALLY

出題例：ユーザーを削除するとユーザーの所有していたスキーマオブジェクトはどうなりますか？
同時に削除される。

出題例：WITH ADMIN OPTIONを使用して、AユーザーがBユーザーにCREATE TABLE権限を与えました。その後AユーザーからCREATE TABLE権限を取り消しました。
Bユーザーはどうなりますか？
CREATE TABLE権限は有効である。
WITH ADMIN OPTIONの場合は連鎖しない、WITH GRANT OPTIONの場合は連鎖して権限が取り消される。この違いを出題してくる。

出題例：デフォルト表領域に表を作成しようとしています。ただしこの表領域には割当制限を行っていません。
以下のコマンドを実行しました。結果はどうなりますか。
create table Table1 
 col number;
tablespace example;
→ORA-01950：表領域'example'に対する権限がありません。
<font color="SlateGray">似たような問題が出題されました。デフォルト表領域（そのユーザーが所有するUSERS表領域）であっても割当制限を行わないと表領域にオブジェクトを作成することはできません。</font>

出題例：ユーザーAをアカウントロックしました、ユーザーAが所有していた表に他のユーザーでアクセスすることは可能ですか？
**アカウントロックされているユーザーが所有しているオブジェクトにアクセスすることは可能です。**（アクセスするための権限が別途必要）
<font color="SlateGray">出題されました。</font>

出題例：次の中からロールの特性をあらわしているものを選択しなさい。
→ロールの中にロールを含めることが出来る。
→システム権限とオブジェクト権限の両方を１つのロールに設定できる。
→ロールはスキーマには含まれない
→ユーザー名と同名のロールが存在する場合、ユーザーの作成に失敗する

出題例：ユーザーに割り当て済のプロファイルAを`DROP PROFILE profile_A;`コマンドで削除しようとしました。どうなりますか？
→ユーザーに割り当て済のプロファイルの場合は削除エラーとなる。
→ユーザーに割り当て済のプロファイルを削除するためにはCASCADEオプションが必要です。削除された場合は、デフォルトプロファイルに変更されます。

出題例：次の要件を満たすデータベース構成を用意したい。どうすればいいですか？
●接続に一定回数失敗した場合アカウントをロックする
●同一ユーザーによる接続を2つ以上持つことが出来ない
●10分以上アイドル状態のセッションは自動的に切断する
●パスワードに有効期限を設定する。
→プロファイルを設定する
古いバージョンだとプロファイルではなくOracleAdvancedSecurityを利用することもあります。怪しい選択肢として出題されるかもしれません。

出題例：デフォルトプロファイルを削除しようとしました。どうなりますか？
→デフォルトプロファイルは削除することができません。ALTER文で変更することは可能です。

出題例：完全リダクションのための新しいデフォルト値をアクティブにするには？
データベースの再起動
※リダクション（データをマスクする）
参考（Oracle公式の記事）：https://www.oracle.com/technetwork/jp/database/articles/jissenn12c/jissen12c-06-2163429-ja.html