用户、权限、角色(1)- 用户管理

###我所使用的系统为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_TABLESPACE

4. 默认临时表空间

临时表空间主要是用来排序时使用。一般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_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

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      EXCLUSIVE

remote_login_passwordfile参数是决定是否能用密码文件来登录。

NONE:不能使用。只能使用操作系统认证,以sysdba权限登录。

EXCLUSIVE:默认,只能被一个实例使用。我们可以向密码文件添加新的用户。

SHARED:可以被多个实例使用。RAC时会用到。这种方法只能存放sys和system用户的密码。

remote_login_passwordfile 这个参数是只有在登录数据库后才能更改的。这个为NONE,SQLNET.AUTHENTICATION_SERVICES=(NONE),这样,是不能登录数据库的。

这时,就更改SQLNET.AUTHENTICATION_SERVICES=(NTL)(或者注释掉),然后使用操作系统认证来登录。

关于权限,请查看"用户管理-权限"

Technorati :
Del.icio.us :
Zooomr :
Flickr :

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值