TOPユーザーの管理等 > ユーザーの管理

ユーザーの管理

  1. ユーザーの作成
  2. ユーザーの変更
  3. ユーザーの削除
  4. ユーザーの管理

1.ユーザーの作成

Oracleデータベースと接続してデータにアクセスする為にはOracleにログインするためのアカウントである 「ユーザー」を作成する必要があります。
ユーザー作成の際に管理者は作成した各ユーザーに対して、何ができるかを設定することでセキュリティを保つことができます。
ユーザーを作成するには通常、SYSTEMユーザーSYSユーザーで作成します。

SYSTEMユーザー
Oracleインストール時に作成されるデータベース管理用ユーザーです。
すべてのデータベースのシステム権限が付与されます。
一般の管理作業は、SYSTEMユーザーでデータベースにアクセスして行ないます。

SYSユーザー
Oracleインストール時に作成されるデータベース管理用ユーザーです。
DBAロールが付与され、データ・ディクショナリの所有者です。

ユーザーを作成するにはCREATE USER 文を使用します。
【構文】ユーザーの作成
CREATE USER ユーザー名 IDENTIFIED BY パスワード
[DEFAULT    TABLESPACE デフォルト表領域名 ]
[TEMPORARY  TABLESPACE 一時表領域名       ]
[QUOTA   サイズ ON 表領域名 ]
[PROFILE プロファイル名     ];

ユーザー名(省略不可)
データベースに接続するユーザーの名前を指定します。(大文字/小文字は関係ありません)
ユーザー名に _ と # 以外の非英数字を使用することは出来ません。
ユーザー名の先頭の文字は英字にする必要があります。
オペレーティング認証を使用する場合は、ユーザー名の先頭にデフォルトで $OPS を付ける必要があります。

パスワード(省略不可)
接続の際、入力させるパスワードを指定します。予約語は使用できません。
ユーザーを作成し、ユーザーにパスワードを変更させるには PASSWORD EXPIER 句 を使用します。
オペレーティング認証を使用する場合は、 IDENTIFIED EXTERNALLY キーワードを使用します。

デフォルト表領域(省略可)
ユーザーが作成するオブジェクトを格納するデフォルトの表領域を指定します。
省略するとSYSTEM表領域が割り当てられててしまいますので注意が必要です。

一時表領域(省略可)
ソート(Order By)などを行う際に使用する一時セグメントが確保される表領域を指定します。
省略するとSYSTEM表領域が割り当てられててしまいますので デフォルト表領域同様 注意が必要です。

クォータ(省略可)
ユーザーに指定されたサイズ(なしまたはKまたはM)バイトの領域の使用を許可します。
UNLIMITED を指定すると表領域への領域を無制限に割り当てることがでます。
複数の表領域に対してQUOTA句が指定できます。
QUOTA 100M      ON USER_01 → 表領域 USER_01 に対して 100M バイトの領域の使用を許可。
QUOTA UNLIMITED ON USER_02 → 表領域 USER_02 に対して無制限の使用を許可。
データファイルが追加できるわけではないので注意。
オブジェクトを無制限(表領域の許す限り)に作成できる。
クォータ句を省略するとすべての表領域のクォータが0に設定されるので、ユーザーはオブジェクトを作成できません。

プロファイル(省略可)
ユーザーに対して名前の付いたプロファイルを割り当てます。このプロファイルにより、ユーザーが使用できる
データベース・リソース容量が制限されます。
この句を省略した場合、DEFAULT プロファイルがユーザーに割り当てられます。

以下のリソースについて制限を行います。
リソース名 意味
SESSION_PER_USER 1人のユーザーの同時セッション数(整数で指定)を制限します。
CPU_PER_SESSION 1セッション当たりのCPU時間を制限します。この値は、 100分の1秒単位で表します。
CPU_PER_CALL 1コール(解析、実行、取出しなど)当たりのCPU時間を制限します。この値は、100分の1秒単位で表します。
CONNECT_TIME 1セッション当たりの合計経過時間を制限します。この値は、分単位で表します。
IDLE_TIME セッション中の連鎖する非活動時間を制限します。この値は、分単位で表します。実行時間の長い問合せなどの操作は、この制限を受けません。
LOGICAL_READS_PER_SESSION メモリーおよびディスクから読み取られるブロックなど、セッション中に読み取られるデータ・ブロックの数を整数で指定するブロック数に制限します。
LOGICAL_READS_PER_CALL SQL文の処理コール(解析または実行、フェッチ)で読み取られるデータ・ブロックの数を 整数で指定するブロック数に制限します。
COMPOSITE_LIMIT 1セッション当たりのリソースの総コストを制限します。このパラメータの値は、サービス単位で表す必要があります。
PRIVATE_SGA 1セッションでシステム・グローバル領域(SGA)の共有プール内で割当て可能なプライベート領域を、integerで指定する整数バイト数に制限します。 KまたはMを使用してKBまたはMB単位でも制限を指定できます。この制限はマルチスレッド・サーバー・アーキテクチャを採
FAILED_LOGIN_ATTEMPTS アカウントからのロックアウト前に許可されるログイン試行の失敗回数を制限します。
PASSWORD_LIFE_TIME パスワードの存続期間を、整数で指定する日数に制限します。この日数を超えるとパスワードの使用期限が切れます。
PASSWORD_REUSE_TIME パスワードの使用期限が切れた後、再使用できるまでの日数を制限します。 PASSWORD_REUSE_TIMEを整数値に設定する場合、PASSWORD_REUSE_MAXをUNLIMITEDに設定しなければなりません。
PASSWORD_REUSE_MAX パスワードの再使用に必要なパスワード変更回数を指定します。 PASSWORD_REUSE_MAXを整数値に設定する場合、 PASSWORD_REUSE_TIMEをUNLIMITEDに設定しなければなりません。
ACCOUNT_LOCK_TIME パスワードの再使用に必要なパスワード変更回数を指定します。
PASSWORD_GRACE_TIME パスワードを変更できる猶予期間の日数を制限します。この日数は、パスワードの期限切れの後に最初に正常にログインしたときから数えます。特定した猶予期間中にパスワードが変更されない場合、そのユーザーのアカウントはロックされます。
PASSWORD_VERIFY_FUNCTION PL/SQLのパスワードの複雑さ検証スクリプトをCREATE PROFILEコマンドの引数として渡すことを可能にします。 Oracleには、デフォルトのスクリプトがありますが、ユーザー固有のルーチンを作成することも、サード・パーティのソフトウェアを使用することもできます。

但し、ユーザーを作成しただけではデータベースにアクセスできません!!下の例を見てみましょう。
【例】ユーザーの作成
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production
に接続されました。

@SQL> SELECT USERNAME FROM USER_USERS;                ← 現在のユーザー(後述)を表示

USERNAME
------------------------------
SYSTEM

ASQL> DESC DBA_USERS;                                   ← DBA_USERSディクショナリ(後述)の確認
 名前                                      NULL?    型
 ----------------------------------------- -------- ----------------------------
 USERNAME                                  NOT NULL VARCHAR2(30)
 USER_ID                                   NOT NULL NUMBER
 PASSWORD                                           VARCHAR2(30)
 ACCOUNT_STATUS                            NOT NULL VARCHAR2(32)
 LOCK_DATE                                          DATE
 EXPIRY_DATE                                        DATE
 DEFAULT_TABLESPACE                        NOT NULL VARCHAR2(30)
 TEMPORARY_TABLESPACE                      NOT NULL VARCHAR2(30)
 CREATED                                   NOT NULL DATE
 PROFILE                                   NOT NULL VARCHAR2(30)
 INITIAL_RSRC_CONSUMER_GROUP                        VARCHAR2(30)
 EXTERNAL_NAME                                      VARCHAR2(4000)

BSQL> SELECT USERNAME, PROFILE FROM DBA_USERS;    ← 現在のDBに登録済みのユーザ一覧を表示

USERNAME                       PROFILE
------------------------------ ------------------------------
SYS                            DEFAULT
SYSTEM                         DEFAULT
OUTLN                          DEFAULT
DBSNMP                         DEFAULT
AURORA$ORB$UNAUTHENTICATED     DEFAULT
ORDSYS                         DEFAULT
ORDPLUGINS                     DEFAULT
MDSYS                          DEFAULT
CTXSYS                         DEFAULT
SCOTT                          DEFAULT

10行が選択されました。

CSQL> CREATE USER NIKA IDENTIFIED BY NIKA         ← ユーザー NIKA、パスワード NIKA で作成してみます
  2  DEFAULT   TABLESPACE USERS
  3  TEMPORARY TABLESPACE TEMP
  4  QUOTA 10M ON USERS;
ユーザーが作成されました。

DSQL> SELECT USERNAME, PROFILE FROM DBA_USERS;   ← 再度現在のDBに登録済みのユーザ一覧を表示してみます

USERNAME                       PROFILE
------------------------------ ------------------------------
SYS                            DEFAULT
SYSTEM                         DEFAULT
OUTLN                          DEFAULT
DBSNMP                         DEFAULT
AURORA$ORB$UNAUTHENTICATED     DEFAULT
ORDSYS                         DEFAULT
ORDPLUGINS                     DEFAULT
MDSYS                          DEFAULT
CTXSYS                         DEFAULT
SCOTT                          DEFAULT
NIKA                           DEFAULT                 ← プロファイルは DEFAULT で作成されていますね

11行が選択されました。

ESQL> CONNECT NIKA/NIKA                            ← では早速、作成したユーザ NIKA で接続を試してみます
ERROR:
ORA-01045: ユーザー NIKAにはCREATE SESSION権限がありません。
ログオンが拒否されました。                             ← だめだって...(CREATE SESSION権限が必要です!)

警告: Oracleにはもう接続されていません。


2.ユーザーの変更

CREATE USER文によって作成したユーザのパスワードデフォルト表領域一時表領域表領域の使用制限を変更することができます。

ユーザの情報を変更するには ALTER USER 文を使用します。
【構文】ユーザの変更
ALTER USER ユーザー名
[IDENTIFIED BY パスワード]
[DEFAULT    TABLESPACE デフォルト表領域名 ]
[TEMPORARY  TABLESPACE 一時表領域名 ]
[QUOTA サイズ ON 表領域名 ];

パスワード(省略可)
接続の際のパスワードを変更します。

デフォルト表領域(省略可)
ユーザが作成するオブジェクトを格納するデフォルトの表領域を変更します。
ALTER USERシステム権限が必要です。

一時表領域(省略可)
ソート(Order By)などを行う際に使用する一時セグメントが確保される表領域を変更します。
ALTER USERシステム権限が必要です。

クォータ(省略可)
ユーザに指定されたサイズ(なしまたはKまたはM)バイトの領域の使用を許可を変更します。
ALTER USERシステム権限が必要です。

自ユーザによるパスワード以外の変更にはALTER USERシステム権限が必要です!
自ユーザのパスワードは ALTER USERシステム権限は必要ありません。
【例】ユーザーの変更
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production

@SQL> CONNECT NIKA/NIKA ←新たに作成したユーザ nika で接続(権限を付加後)
接続されました。

ASQL> ALTER USER NIKA IDENTIFIED BY NIKA2001;   ←パスワードを nika2001 に変更してみる
ユーザーが変更されました。

BSQL> CONNECT NIKA/NIKA ←古いパスワードで接続してみる
ERROR:
ORA-01017: ユーザー名/パスワードが無効です。
ログオンは拒否されました。           ← だめだって...

警告: Oracleにはもう接続されていません。

CSQL> CONNECT NIKA/NIKA2001 ←新しいパスワードで接続してみる
接続されました。

DSQL> ALTER USER NIKA TEMPORARY TABLESPACE USERS;   ←一時表領域を変更してみる
ALTER USER NIKA
*
エラー行: 1: エラーが発生しました。
ORA-01031: 権限が不足しています。  ←権限がないのでだめ!

SQL>


3.ユーザーの削除

CREATE USER文によって作成したユーザの削除ができます。

ユーザの情報を削除するには DROP USER 文を使用します。
【構文】ユーザーの削除
DROP USER ユーザー名
[CASCADE];

ユーザ名(省略不可)
削除するユーザを指定します。

カスケード(省略可)
ユーザが所有するオブジェクトが存在する場合に指定します。

【例】ユーザーの削除
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production

@SQL> CONNECT NIKA/NIKA2001         ←ユーザ nika で接続(権限を付加後)
接続されました。

ASQL> CREATE TABLE TSAMPLE          ←オブジェクト(テーブル)を作成しておく
  2  (
  3     CODE     CHAR(03),
  4     NAME     VARCHAR(20)
  5  );

表が作成されました。

BSQL> SELECT OBJECT_NAME, OBJECT_TYPE, STATUS FROM USER_OBJECTS;   ← 確認

OBJECT_NAME          OBJECT_TYPE        STATUS
-------------------- ------------------ -------
TSAMPLE              TABLE              VALID

CSQL> DROP USER NIKA;              ←自分(nika)で自分を DROP はできない?
DROP USER NIKA
*
エラー行: 1: エラーが発生しました。
ORA-01031: 権限が不足しています。      ←権限があればできるのか?

DSQL> CONNECT SYSTEM/MANAGER      ←管理者になって
接続されました。

ESQL> DROP USER NIKA;              ←ユーザ NIKA の削除
DROP USER NIKA
*
エラー行: 1: エラーが発生しました。
ORA-01922: NIKAを削除するにはCASCADEを指定する必要があります。

FSQL> DROP USER NIKA CASCADE;     ← CASCADEオプションをつけて...

ユーザーが削除されました。

SQL>

【おまけ】ユーザーの削除
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production

@SQL> CONNECT SYSTEM/MANAGER ←管理者で接続
接続されました。

ASQL> CREATE USER NIKA IDENTIFIED BY NIKA ←ユーザ NIKA を作成
  2  DEFAULT TABLESPACE USERS
  3  TEMPORARY TABLESPACE TEMP;

ユーザーが作成されました。

BSQL> GRANT CONNECT TO NIKA; ←CONNECTロールを付与

権限付与が成功しました。

CSQL> GRANT DROP USER TO NIKA; ←DROP USERシステム権限を付与

権限付与が成功しました。

DSQL> CONNECT NIKA/NIKA; ←ユーザ NIKA で接続
接続されました。

ESQL> DROP USER NIKA; ←自分自身を削除してみる
DROP USER NIKA
*
エラー行: 1: エラーが発生しました。
ORA-01940: 現在接続中のユーザーを削除することはできません。 ← 誰か一人は残ることになる
SQL>


4.ユーザーの管理

ユーザの情報はデータディクショナリで確認することができます。
ユーザの情報を確認するには、以下のディクショナリを使用します。

DBA_USERS(管理ユーザのみ使用可能
システムに存在する全ユーザー情報の確認に使用する。
列名 意味
USERNAME ユーザー名
USER_ID ユーザーのID番号
PASSWORD 暗号化されたパスワード
ACCOUNT_STATUS ユーザー・アカウントが、ロック状態または期限切れ状態、非ロック状態のいずれであるかを表示
LOC_DATE ユーザー・アカウントがロック状態の場合、ロックされた日付
EXPIRY_DATE ユーザー・アカウントの期限切れの日付
DEFAULT_TABLESPACE デフォルトで使用する表領域名
TEMPORARY_TABLESPACE 一時的に使用する表領域名
CREATED 作成日
PROFILE リソース・プロファイル名

USER_USERS(全ユーザが使用可能(自分の情報のみ参照可能である)
現在使用しているユーザー情報の確認に使用する。
列名 意味
USERNAME ユーザー名
USER_ID ユーザーのID番号
ACCOUNT_STATUS ユーザー・アカウントが、ロック状態または期限切れ状態、非ロック状態のいずれであるかを表示
LOCK_DATE ユーザー・アカウントがロック状態の場合、ロックされた日付
EXPIRY_DATE アカウントの期限切れの日付
DEFAULT_TABLESPACE デフォルトで使用する表領域名
TEMPORARY_TABLESPACE 一時的に使用する表領域名
CREATED 作成日

-------- 2001/11/16(金)追加 ここから↓ ---------
ALL_USERS(全ユーザが使用可能)
全ユーザの情報が参照可能であるが情報量がDBA_USERSやUSER_USERSに比べて少ない(アカウントのロック情報など)
全ユーザの情報の確認に使用する。
列名 意味
USERNAME ユーザー名
USER_ID ユーザーのID番号
CREATED 作成日
-------- 2001/11/16追加(金) ここまで↑ ---------

USER_TS_QUOTAS(全ユーザが使用可能
現在使用しているユーザーの表領域の情報の確認に使用する。
列名 意味
TABLESPACE_NAME 表領域名
BYTES 使用しているバイト数
MAX_BYTES 最大利用可能バイト数。UNLIMITEDの場合は、「-1」と表示
BLOCKS 使用ブロック数
MAX_BLOCKS 最大利用可能ブロック数。UNLIMITEDの場合は、「-1」と表示

【例】ユーザー情報の表示
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production

@SQL> CONNECT SYSTEM/MANAGER ←管理者で接続
接続されました。

ASQL> CREATE USER NIKA IDENTIFIED BY NIKA       ← ユーザ NIKA を作成
  2  DEFAULT TABLESPACE USERS
  3  TEMPORARY TABLESPACE TEMP;

ユーザーが作成されました。

BSQL> GRANT CONNECT TO NIKA;                     ← CONNECTロールを付与

権限付与が成功しました。

CSQL> CONNECT NIKA/NIKA;                          ← ユーザ NIKA で接続
接続されました。


DSQL> SELECT * FROM DBA_USERS;                   ← DBA_USERS ビューを確認
SELECT * FROM DBA_USERS
              *
エラー行: 1: エラーが発生しました。
ORA-00942: 表またはビューが存在しません。              ← 権限がないので見れない!

ESQL> SELECT USERNAME, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE FROM USER_USERS;

USERNAME        DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
--------------- ------------------------------ ------------------------------
NIKA            USERS                          TEMP

FSQL> SELECT * FROM USER_TS_QUOTAS;            ← 表領域の情報が存在しない

レコードが選択されませんでした。

GSQL> CREATE TABLE TSAMPLE                      ← 試しにテーブルを作成してみる
  2  (
  3    CODE CHAR(03),
  4    NAME VARCHAR2(20)
  5  );
CREATE TABLE TSAMPLE
*
エラー行: 1: エラーが発生しました。
ORA-01950: 表領域 USERSに対する権限がありません。     ← 権限がないのでだめ

HSQL> CONNECT SYSTEM/MANAGER                   ← 管理者で接続
接続されました。

ISQL> ALTER USER NIKA QUOTA 10M ON USERS;    ← 表領域 USERS に権限を与える

ユーザーが変更されました。

JSQL> CONNECT NIKA/NIKA                        ← 再度ユーザ NIKA で接続
接続されました。

KSQL> SELECT * FROM USER_TS_QUOTAS;           ← 表領域の情報を確認

TABLESPACE_NAME                     BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS
------------------------------ ---------- ---------- ---------- ----------
USERS                                   0   10485760          0       1280

LSQL> CREATE TABLE TSAMPLE                    ← 再度テーブルを作成してみる
  2  (
  3    CODE CHAR(03),
  4    NAME VARCHAR2(20)
  5  );

表が作成されました。

MSQL> SELECT * FROM USER_TS_QUOTAS;         ← できた!

TABLESPACE_NAME                     BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS
------------------------------ ---------- ---------- ---------- ----------
USERS                              131072   10485760         16       1280

NSQL> CONNECT SYSTEM/MANAGER                ← 管理者で接続
接続されました。

OSQL> ALTER USER NIKA QUOTA UNLIMITED ON TEMP;  ← 表領域 TEMP に無制限の権限を与える

ユーザーが変更されました。

PSQL> CONNECT NIKA/NIKA                     ← 再度ユーザ NIKA で接続
接続されました。

QSQL> SELECT * FROM USER_TS_QUOTAS;       ← 表領域情報を確認

TABLESPACE_NAME                     BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS
------------------------------ ---------- ---------- ---------- ----------
USERS                              131072   10485760         16       1280
TEMP                                    0         -1          0         -1  ← 重要!

SQL>


TOPユーザーの管理等 > ユーザーの管理

2001/04/24 担当:H.O
2001/11/26 更新:H.O
2003/02/23 更新:H.O