ユーザー、権限、ロール(1)-ユーザー管理


ユーザー管理のオプション
1.ユーザー名:一意でなければなりません.アルファベットの先頭.特殊文字は含まれません.最長30個です.
2.認証方式が必要
パスワード認証
OS認証
その他
3.デフォルトの表領域:
Oracle 10 gでは、データベース・レベルのデフォルト表領域(USERS)が定義されています.ユーザーを作成するときにデフォルトの表領域を定義しないと、データベース・レベルのデフォルトの表領域が自分のデフォルトの表領域として扱われます.
10 g以前はシステム表空間(SYSTEMS)をデフォルト表空間としていた.これはとても不合理だ.次に、現在のデータベース・レベルのデフォルトの永続表領域をクエリーするコマンドを示します.
SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties
    2    where PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE';
PROPERTY_NAME
------------------------------
PROPERTY_VALUE
--------------------------------------------------------------------------------
DEFAULT_PERMANENT_TABLESPACE
USERS
変更方法:
SQL> alter database DEFAULT TABLESPACE DEFAULT_TABLESPACE;
Database altered.
SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties
  2  where PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE';
PROPERTY_NAME		       PROPERTY_VALUE
------------------------------ ----------------------------------------
DEFAULT_PERMANENT_TABLESPACE   DEFAULT_TABLESPACE

4.デフォルトの一時表領域
一時表領域は、主にソート時に使用されます.一般的にPGAの配分は小さく、ランキングによって生成された大量の一時データを収容できない.9 iからデータベースレベルのデフォルトの一時表領域を指定することができる.
コマンド(表示と変更)
SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties
  2  where PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';
PROPERTY_NAME		       PROPERTY_VALUE
------------------------------ ----------------------------------------
DEFAULT_TEMP_TABLESPACE        TEMP
SQL> alter database DEFAULT TEMPORARY TABLESPACE DEFAULT_TEMP_TABLESPACE;
Database altered.
SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties
  2  where PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';
PROPERTY_NAME		       PROPERTY_VALUE
------------------------------ ----------------------------------------
DEFAULT_TEMP_TABLESPACE        DEFAULT_TEMP_TABLESPACE
    

5.プロファイル
ユーザーパスワードポリシーおよびリソースの使用を制御するための構成情報.
6.ユーザーグループ
7.ロック状態
上のステータスをクエリーし、次のコマンドでクエリーできます.(ユーザ名、デフォルト表領域、デフォルト一時表領域、デフォルトプロファイル、ユーザーグループ、ロックステータスの順)
SQL> select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE,PROFILE,INITIAL_RSRC_CONSUMER_GROUP,ACCOUNT_STATUS
  2  from DBA_USERS
  3  where USERNAME = 'SCOTT';
USERNAME		       DEFAULT_TABLESPACE	      TEMPORARY_TABLESPACE	     PROFILE			    INITIAL_RSRC_CONSUMER_GROUP    ACCOUNT_STATUS
------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ --------------------------------
SCOTT			       USERS			      TEMP			     DEFAULT			    DEFAULT_CONSUMER_GROUP	   EXPIRED & LOCKED

データベースが確立されると、sys,systemの2つの重要なユーザーが生成されます.
Sysはスーパー管理者でsysdba権限があります.ログイン時にsysdbaとしてログインする必要があります.
sysの権限が大きすぎるため(クラスUNIXシステムのrootに相当)、sysを使用してログインすると、監査ファイルにログインの時間情報が記録される.(監査については、後で補足)
提案:特別な場合を除き、sysまたはsystemユーザーを使用して操作しないでください.dbaの権限(ここでdbaはロール-role)を付与、そのユーザを用いて操作するユーザを確立することが望ましい.
ユーザーの作成:
ユーザを作成する、EMを使用して作成することができる(EMについては、後述).
コマンド:
CREATE USER「SYSUSER」--ユーザー名
IDENTIFIED BY「TEST 1234」--パスワードの設定
PASWORD EXPIRE--パスワードの期限切れモードを設定します(ログイン後すぐにパスワードを変更しなければなりません)
PROFILE「DEFAULT」--PROFILEの設定
DEFAULT TABLESPACE「USERS」--デフォルトの表領域を設定
TEMPORARY TABLESPACE「TEMP」--デフォルトの一時表領域を設定
ACCOUNT UNLOCK--ロックの設定(非ロック)
SQL> CREATE USER "SYSUSER"
  2  IDENTIFIED BY "TEST1234"
  3  PASSWORD EXPIRE
  4  PROFILE "DEFAULT"
  5  DEFAULT TABLESPACE "USERS"
  6  TEMPORARY TABLESPACE "TEMP"
  7  ACCOUNT UNLOCK
  8  /
User created.

アカウントを作成するのではなく、権限を付与する必要があります.
SQL> GRANT "CONNECT" TO "SYSUSER";
Grant succeeded.

SYSSUSERにログインできる権限を付与します
SQL> conn SYSUSER/test1234
ERROR:
ORA-28001: the password has expired
Changing password for SYSUSER
New password: 
Retype new password: 
Password changed
Connected.

最初のログインでパスワードを変更するように設定したので、ここでパスワードを変更しなければなりません.
OS認証ユーザーを見てみましょう
データベースにパラメータがあります:os_authent_prefix. このパラメータのデフォルト値はops$です.オペレーティングシステムのユーザー名がoracleで、Oracle内部にops$oracleというユーザー名があると仮定すると、このoracleユーザーはオペレーティングシステムにログインしてから認証を必要とせず、直接Oracleにログインすることができます.
SQL> show parameter os_authent_prefix
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
os_authent_prefix		     string	 ops$
SQL> CREATE USER "OPS$ORACLE"
  2  IDENTIFIED EXTERNALLY
  3  DEFAULT TABLESPACE "USERS"
  4  TEMPORARY TABLESPACE "TEMP"
  5  PROFILE "DEFAULT"
  6  ACCOUNT UNLOCK
  7  /
User created.
SQL> GRANT "CONNECT" TO "OPS$ORACLE";
Grant succeeded.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@R ~]$ whoami
oracle
[oracle@R ~]$ sqlplus /
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Aug 31 05:55:42 2009
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> show user;
USER is "OPS$ORACLE"
SQL> 

資格認定について
一般ユーザーの場合、パスワードはデータ辞書テーブルに存在します(MD 5で暗号化されています)
USERNAME		       PASSWORD
------------------------------ ------------------------------
MGMT_VIEW		       4F538DF5F344F348
SYS			       0B6C11EB930B9A0B
SYSTEM			       830FA13F70C5D923
DBSNMP			       78FF70CF75D301E6
SYSMAN			       2060095DE00E9C43
OPS$ORACLE		       EXTERNAL
TEST001 		       E47B4975ABE8187E
... 

OPS¥ORACLE(これはオペレーティングシステム認証)以外は暗号化形式で表示することがわかる.
sysユーザの認証方式については、いくつかの特殊なものがある.次の2つの方法でログインします.
1.オペレーティングシステム認証
2.パスワードファイル認証
OS認証
クラスUNIXシステムの下で、ユーザーがDBAグループに属している場合、ユーザーはオペレーティングシステムにログインした後、sysdba権限を使用してログインできます.
Windowsの下で、ユーザーはora_に属します.dbaグループでは、ユーザーがオペレーティングシステムにログインするとsysdbaを使用してログインできます.
[oracle@R ~]$ id
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba)
[oracle@R ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Aug 31 06:19:23 2009
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> show user
USER is "SYS"

OSで認証できるかどうかは、次のファイルの設定によって異なります.
[oracle@R ~]$ cat $ORACLE_HOME/network/admin/sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
#SQLNET.AUTHENTICATION_SERVICES=(NONE)
[oracle@R ~]$ 

ここのSQLNETだけです.AUTHENTICATION_SERVICESはNONEに設定しなければ良い(ここではコメントされています.)
操作を確認してください.
[oracle@R ~]$ vi $ORACLE_HOME/network/admin/sqlnet.ora
		
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.AUTHENTICATION_SERVICES=(NONE)
[oracle@R ~]$ cat $ORACLE_HOME/network/admin/sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.AUTHENTICATION_SERVICES=(NONE)
[oracle@R ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Aug 31 06:28:02 2009
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
ERROR:
ORA-01031: insufficient privileges
Enter user-name: 
[oracle@R ~]$ vi $ORACLE_HOME/network/admin/sqlnet.ora
[oracle@R ~]$ cat $ORACLE_HOME/network/admin/sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
#SQLNET.AUTHENTICATION_SERVICES=(NONE)
[oracle@R ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Aug 31 06:28:22 2009
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> 

SQLNETを見つけたらAUTHENTICATION_SERVICES=(NONE)コメントを落とす(またはNONEをNTSに変更してもよい)ことでログインできます.
NONEに変更すると、OS認証は使用しません.この過程でデータベースなどの操作を再起動する必要はありません.
もう1つはパスワード認証です.
パスワード認証は、管理するためにパスワードファイルが必要です.
パスワードファイルは次の場所にあります.
UNIX:$ORACLE_HOME/dbs
WINDOWS: $ORACLE_HOME/database
ファイル名:orapw(私のSIDはoracle 10 g)
[oracle@R ~]$ cd $ORACLE_HOME/dbs
[oracle@R dbs]$ ls -l
total 60
-rw-rw----  1 oracle oinstall  1544 Aug 25 23:13 hc_oracle10g.dat
-rw-rw----  1 oracle oinstall  1544 Aug 25 13:37 hc_orcl.dat
-rw-rw----  1 oracle oinstall 12920 May  3  2001 initdw.ora
-rw-rw----  1 oracle oinstall  8385 Sep 11  1998 init.ora
-rw-rw----  1 oracle oinstall    24 Aug 25 13:41 lkORCL
-rw-rw----  1 oracle oinstall    24 Aug 25 23:17 lkR
-rw-r-----  1 oracle oinstall  1536 Aug 31 05:45 orapworacle10g
-rw-r-----  1 oracle oinstall  1536 Aug 25 13:45 orapworcl
-rw-r-----  1 oracle oinstall  3584 Aug 31 02:37 spfileoracle10g.ora
-rw-r-----  1 oracle oinstall  2560 Aug 25 13:45 spfileorcl.ora

ログイン方式は以下の通りです.
[oracle@R dbs]$ sqlplus sys/test1234 as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Aug 31 07:23:07 2009
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> show user
USER is "SYS"
SQL> 

パスワードファイルを変更する方法は次のとおりです.
[oracle@R dbs]$ orapwd file=orapworacle10g password=test123 entries=5 force=y
ここでfileはあなたのパスワードファイルの名前(orapw)、passwordの後ろにあるのは変更されたパスワード、entriesはこのファイルを使用できる最大ユーザー数、force=yは現在のファイルを上書きします
このファイルを紛失した場合、パスワードファイル認証でログインすることはできません.リモートログインでは、sysdba権限でログインするにはパスワードファイルしか使用できません.
SQL> show parameter remote_login_passwordfile
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile	     string	 EXCLUSIVE

remote_login_passwordfileパラメータは、パスワードファイルでログインできるかどうかを決定します.
NONE:使用できません.OS認証のみを使用してsysdba権限でログインできます.
EXCLUSIVE:デフォルトでは、1つのインスタンスしか使用できません.パスワードファイルに新しいユーザーを追加できます.
SHARED:複数のインスタンスで使用できます.RACの場合に使用されます.この方法はsysとsystemユーザのパスワードしか保存できない.
remote_login_passwordfileというパラメータは、データベースにログインしてから変更できます.これはNONE、SQLNETです.AUTHENTICATION_SERVICES=(NONE)では、データベースにログインできません.
このとき、SQLNETを変更する.AUTHENTICATION_SERVICES=(NTL)(またはコメントを外して)、オペレーティングシステム認証を使用してログインします.
権限については、「ユーザー管理-権限」を参照してください.