Oracleでユーザー作成やアカウントロックなどのアカウント用SQLを実行する

覚えるべきキーワード
・CREATE USER ユーザー名 IDENTIFIED パスワード
・DEFAULT TABLESPACE 表領域名
・TEMPORARY TABLESPACE 表領域名
・QUOTA サイズON 表領域名
・PROFILE プロファイル
・ALTER USER ユーザー名 IDENTIFIED パスワード
・DROP USER ユーザー名[CASCADE] ・ALTER USER ユーザー名 ACCOUNT LOCK[ or UNLOCK ];

Oracleユーザーの作成方法

Oracleデータベースで使うユーザーを作成するにはデフォルトで作られるSYSユーザーか、SYSTEMユーザーかでログインし、CRATE USER文を使います。このユーザーは新たなユーザーを生み出せる管理者ユーザーです。いわば絶対的な権力者。ですので、ユーザーを作成する時はSYSユーザーか、SYSTEMユーザーでログインします。
そして、ユーザー作成の必須事項は2つのみ。ユーザー名とパスワードです。では、パスワードがtest02のtestユーザーを作成してみます。

CREATE USER ユーザー名 IDENTIFIED パスワード
CREATE USER test IDENTIFIED test02;

これでtestユーザーが作成できました。ではさっそくデータベースにログイン、、、と行きたいところですが、この状態ではまだユーザーが作成できただけでログインができません。このユーザーにCREATE SESSION権限を付与する必要があります。

GRANT CREATE SESSION TO test;

これでOKです。データベースへアクセス可能なtestユーザーが作成できました。

Oracleユーザー属性の設定

ユーザーにはあらゆる属性を設定することができます。細かくユーザーの特性を決めたい場合は複数の項目を設定してください。

DEFAULT TABLESPACE 表領域名

ユーザーがオブジェクトを作成する場合に際して、表領域を指定しなかった時にデフォルトで使用する表領域を設定します。パスワードがtest02のtestユーザーを作成する時に一緒にデフォルト表領域をdeptに設定するSQLです。

DEFAULT TABLESPACE 表領域名
CREATE USER test IDENTIFIED test02 DEFAULT TABLESPACE dept;

これでtestユーザーがオブジェクトを作成する際、表領域を指定しなければ、自ずとdept表領域にオブジェクトが作成されます。ただ、このデフォルト表領域を設定するには、testユーザーにオブジェクト作成権限と表領域の割り当て権限が付与されている必要があります。
ちなみにこのDEFAULT TABLESPACE 表領域名が未指定の場合は、デフォルトの永続表領域が自動で設定されます。

TEMPORARY TABLESPACE 表領域名

一時セグメント作成を必要とするSQLを実行する時に使う一時表領域を設定します。ソート処理や表結合のようなSQLは一時セグメントの作成を必要とするのですが、その際、Oracleでは一時表領域を使う仕組みになっています。
パスワードがtest02のtestユーザーを作成する際に一緒にtemp_deptという一時表領域を設定するSQLです。

TEMPORARY TABLESPACE 表領域名
CREATE USER test IDENTIFIED test02 TEMPORARY TABLESPACE temp_dept;

一時表領域を設定しない場合は、デフォルトの一時表領域が設定されます。

QUOTA サイズ ON 表領域名

ユーザーに対して、予め使用できる表領域の容量を決めておきたい場合に使うオプションです。ユーザーがたくさん存在するデータベースの場合、それぞれ好き勝手に表領域を使ってしまうとデータベースが圧迫される恐れがあります。ユーザーごとに容量を制限することで効率的な表領域の利用が可能になります。
デフォルトは0に設定されているため、未設定だと表領域が利用できませんので、表作成などを行うユーザーにはちゃんと表領域の容量をと割り当ててください。
パスワードがtest02のtestユーザーを作成する際、一緒に50Mのdeptという表領域を設定するSQLです。

QUOTA サイズON 表領域名
CREATE USER test IDENTIFIED test02 DEFAULT TABLESPACE dept QUOTA 50M ON dept;

PROFILE プロファイル

プロファイルとは、データベースのリソース制限のかたまりのようなものです。ユーザーが使用できるシステムリソースやアカウントのロック制限、パスワードの有効期限などあらゆる制限をまとめたルールみたいなものです。
ユーザーにプロファイルを設定するには、事前にプロファイルをCREATE文(CREATE PROFILE プロファイル名 LIMIT リソース名 パラメータ)で作成しておきます。そして、そのプロファイルをユーザーに設定するのがプロファイル設定の流れです。

プロファイルuser_ruleをtestユーザーに設定する場合は以下のSQLになります。

PROFILE プロファイル
CREATE USER test IDENTIFIED test02 PROFILE user_rule;

以上、ユーザー属性の設定です。他にアカウントステータスやパスワードステータスも設定できます。

Oracleユーザー属性の変更

一度作成したOracleユーザーの属性を変更したい時はALTER USER ユーザー名を使用します。パスワード、デフォルト表領域、一時表領域、表領域の容量、プロファイルなどが変更できます。試しにパスワードを変更してみます。testユーザーのパスワードtest02をtest04に変更します。

ALTER USER ユーザー名 IDENTIFIED パスワード
ALTER USER test IDENTIFIED BY test04;

これでユーザーパスワードがtest02からtest04に変更となりました。

もう一つお試しにユーザー属性のSQLを作ります。表領域をemployee、一時表領域temp_employeeにまとめて変更してみます。

ALTER USER ユーザー名 DEFAULT TABLESPACE 表領域名 TEMPORARY TABLESPACE 表領域名
ALTER USER test DEFAULT TABLESPACE employee TEMPORARY TABLESPACE temp_employee;

これで表領域がemployee、一時表領域がtemp_employeeに変更となりました。

Oracleユーザーアカウントの削除

表を削除するのと同じく、ユーザーアカウントの削除にはDROPを使います。DROP USER ユーザー名 [CASCADE]でユーザーが削除できます。
ただ、削除は慎重にしてください。ユーザーを削除するとそのユーザーでデータベースにログインできなくなるのはもちろん、ユーザーが所有している表や索引まで削除されます。

testユーザーを削除するSQLです。

DROP USER ユーザー名
DROP USER test;

testユーザーがオブジェクト未所有の場合はこれで削除できますが、もしtestユーザーがオブジェクトを所有している場合はエラーが返り、削除はできません。
オブジェクト所有ユーザーを削除する場合は、CASCADEを付けてください。

DROP USER ユーザー名 CASCADE
DROP USER test CASCADE;

これでtestユーザーが削除できます。ただし、同時にtestユーザーが所有している表や索引も削除されますので、ご決断は慎重に。
ちなみに、testユーザーを削除する時にtestユーザーが所有するオブジェクトに他のユーザーが接続中の場合はエラーが表示され、接続ができません。

Oracleユーザーアカウントのロックとロック解除

ユーザーをロックする場合もALTER TABLEを使います。testユーザーをロックするSQLです。

ALTER USER ユーザー名 ACCOUNT LOCK
ALTER USER test ACCOUNT LOCK;

これでtestユーザーはロックされます。データベースへログイン不可になります。

でも、やっぱりtestユーザーのロックを解除したくなったら、

ALTER USER ユーザー名 ACCOUNT UNLOCK
ALTER USER test ACCOUNT UNLOCK;

これでtestユーザーは再びデータベースにログインできるようになります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です