###我所使用的系统为Linux AS 4U6数据库版本为10.2.0.1.0###
用户管理的一些选项
1. 用户名:必须是唯一的。字母开头。不包括特殊字符。最长30个。
2. 要有一种认证方式
密码认证
操作系统认证
其他3. 默认表空间:
Oracle 10g中定义了一个数据库级别的默认表空间(USERS)。在创建用户时没有定义默认表空间,就会把数据库级别的默认表空间当作自己的默认表空间。
在10g以前,是把系统表空间(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_TABLESPACE4. 默认临时表空间
临时表空间主要是用来排序时使用。一般PGA分配的小,容纳不了排序所产生的大量临时数据。从9i开始可以指定数据库级别的默认临时表空间.
命令(查看和更改)
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_TABLESPACE5. 配置文件
用来控制用户密码策略以及资源使用的配置信息。
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
sys是超级管理员,有sysdba权限.登录时必须用sysdba身份去登录.
因为sys的权限太大(相当于类UNIX系统的root),使用sys登录以后,审计文件会记录登录的时间信息.(关于审计,以后补充)
建议:除非是特出情况,请不要使用sys或system用户来做操作.最好建立一个用户,赋予dba权限(这里dba是角色-role),使用该用户来进行操作.
创建用户:
创建用户,可以使用EM来创建(关于EM,以后会有专门说明).
命令方式:
CREATE USER "SYSUSER" --用户名
IDENTIFIED BY "TEST1234" --设置密码
PASSWORD 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.现在就是赋予SYSUSER可以登录的权限
SQL> conn SYSUSER/test1234 ERROR: ORA-28001: the password has expired Changing password for SYSUSER New password: Retype new password: Password changed Connected.由于我们设定了第一次登录就得更改密码,我们得在这里更改密码.
看一下操作系统认证用户
数据库有个参数: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>
关于认证:
对于普通用户,密码存在于数据字典表里面(是用MD5加密的)
USERNAME PASSWORD ---------------- ------------------- MGMT_VIEW 4F538DF5F344F348 SYS 0B6C11EB930B9A0B SYSTEM 830FA13F70C5D923 DBSNMP 78FF70CF75D301E6 SYSMAN 2060095DE00E9C43 OPS$ORACLE EXTERNAL TEST001 E47B4975ABE8187E ...可以看到,除了OPS¥ORACLE(这个为操作系统认证),都是加密形式显示的.
对于sys用户的认证方式,有些特殊. 有如下两种方式登录
1. 操作系统认证
2. 密码文件认证操作系统认证
在类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"是否能用操作系统认证,取决于下面一个文件的设置。
[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,就说明不使用操作系统认证了。这个过程中不需要重新启动数据库等的操作。另一个是密码认证。
密码认证是需要密码文件来管理。
密码文件位于:
UNIX:$ORACLE_HOME/dbs
WINDOWS: $ORACLE_HOME/database文件名:orapw (我的SID为oracle10g)
[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 EXCLUSIVEremote_login_passwordfile参数是决定是否能用密码文件来登录。
NONE:不能使用。只能使用操作系统认证,以sysdba权限登录。
EXCLUSIVE:默认,只能被一个实例使用。我们可以向密码文件添加新的用户。
SHARED:可以被多个实例使用。RAC时会用到。这种方法只能存放sys和system用户的密码。
remote_login_passwordfile 这个参数是只有在登录数据库后才能更改的。这个为NONE,SQLNET.AUTHENTICATION_SERVICES=(NONE),这样,是不能登录数据库的。
这时,就更改SQLNET.AUTHENTICATION_SERVICES=(NTL)(或者注释掉),然后使用操作系统认证来登录。
关于权限,请查看"用户管理-权限"