ユーザー、権限、ロール(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
変更方法:
4.デフォルトの一時表領域
一時表領域は、主にソート時に使用されます.一般的にPGAの配分は小さく、ランキングによって生成された大量の一時データを収容できない.9 iからデータベースレベルのデフォルトの一時表領域を指定することができる.
コマンド(表示と変更)
5.プロファイル
ユーザーパスワードポリシーおよびリソースの使用を制御するための構成情報.
6.ユーザーグループ
7.ロック状態
上のステータスをクエリーし、次のコマンドでクエリーできます.(ユーザ名、デフォルト表領域、デフォルト一時表領域、デフォルトプロファイル、ユーザーグループ、ロックステータスの順)
データベースが確立されると、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--ロックの設定(非ロック)
アカウントを作成するのではなく、権限を付与する必要があります.
SYSSUSERにログインできる権限を付与します
最初のログインでパスワードを変更するように設定したので、ここでパスワードを変更しなければなりません.
OS認証ユーザーを見てみましょう
データベースにパラメータがあります:os_authent_prefix. このパラメータのデフォルト値はops$です.オペレーティングシステムのユーザー名がoracleで、Oracle内部にops$oracleというユーザー名があると仮定すると、このoracleユーザーはオペレーティングシステムにログインしてから認証を必要とせず、直接Oracleにログインすることができます.
資格認定について
一般ユーザーの場合、パスワードはデータ辞書テーブルに存在します(MD 5で暗号化されています)
OPS¥ORACLE(これはオペレーティングシステム認証)以外は暗号化形式で表示することがわかる.
sysユーザの認証方式については、いくつかの特殊なものがある.次の2つの方法でログインします.
1.オペレーティングシステム認証
2.パスワードファイル認証
OS認証
クラスUNIXシステムの下で、ユーザーがDBAグループに属している場合、ユーザーはオペレーティングシステムにログインした後、sysdba権限を使用してログインできます.
Windowsの下で、ユーザーはora_に属します.dbaグループでは、ユーザーがオペレーティングシステムにログインするとsysdbaを使用してログインできます.
OSで認証できるかどうかは、次のファイルの設定によって異なります.
ここのSQLNETだけです.AUTHENTICATION_SERVICESはNONEに設定しなければ良い(ここではコメントされています.)
操作を確認してください.
SQLNETを見つけたらAUTHENTICATION_SERVICES=(NONE)コメントを落とす(またはNONEをNTSに変更してもよい)ことでログインできます.
NONEに変更すると、OS認証は使用しません.この過程でデータベースなどの操作を再起動する必要はありません.
もう1つはパスワード認証です.
パスワード認証は、管理するためにパスワードファイルが必要です.
パスワードファイルは次の場所にあります.
UNIX:$ORACLE_HOME/dbs
WINDOWS: $ORACLE_HOME/database
ファイル名:orapw(私のSIDはoracle 10 g)
ログイン方式は以下の通りです.
パスワードファイルを変更する方法は次のとおりです.
[oracle@R dbs]$ orapwd file=orapworacle10g password=test123 entries=5 force=y
ここでfileはあなたのパスワードファイルの名前(orapw)、passwordの後ろにあるのは変更されたパスワード、entriesはこのファイルを使用できる最大ユーザー数、force=yは現在のファイルを上書きします
このファイルを紛失した場合、パスワードファイル認証でログインすることはできません.リモートログインでは、sysdba権限でログインするにはパスワードファイルしか使用できません.
remote_login_passwordfileパラメータは、パスワードファイルでログインできるかどうかを決定します.
NONE:使用できません.OS認証のみを使用してsysdba権限でログインできます.
EXCLUSIVE:デフォルトでは、1つのインスタンスしか使用できません.パスワードファイルに新しいユーザーを追加できます.
SHARED:複数のインスタンスで使用できます.RACの場合に使用されます.この方法はsysとsystemユーザのパスワードしか保存できない.
remote_login_passwordfileというパラメータは、データベースにログインしてから変更できます.これはNONE、SQLNETです.AUTHENTICATION_SERVICES=(NONE)では、データベースにログインできません.
このとき、SQLNETを変更する.AUTHENTICATION_SERVICES=(NTL)(またはコメントを外して)、オペレーティングシステム認証を使用してログインします.
権限については、「ユーザー管理-権限」を参照してください.
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
[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
このファイルを紛失した場合、パスワードファイル認証でログインすることはできません.リモートログインでは、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)(またはコメントを外して)、オペレーティングシステム認証を使用してログインします.
権限については、「ユーザー管理-権限」を参照してください.