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 に対して無制限の使用を許可。 データファイルが追加できるわけではないので注意。 オブジェクトを無制限(表領域の許す限り)に作成できる。 |
プロファイル(省略可)
ユーザーに対して名前の付いたプロファイルを割り当てます。このプロファイルにより、ユーザーが使用できる
データベース・リソース容量が制限されます。
この句を省略した場合、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にはもう接続されていません。 |
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> |
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> |
ユーザの情報はデータディクショナリで確認することができます。
ユーザの情報を確認するには、以下のディクショナリを使用します。
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 | 作成日 |
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> |
2001/04/24 担当:H.O
2001/11/26 更新:H.O
2003/02/23 更新:H.O