1、用户管理的一些选项1、唯一的用户名、字母开头、不包括特殊字符、最长30个2、要有一种认证方式,通常采用密码认证,也就是登录时提供用户名和密码3、默认表空间Oracle10g中定义了一个数据库级别的默认表空间,如果用户没有定义默认表空间,那么就使用这个作为自己的默认表空间,10g以前,如果出现这种情况,那么就是用system表空间,这显然不合理,因此建立一个数据库级别的表空间还是很有意义的4、默认临时表空间临时表空间最经典的使用就是排序的时候,PGA容纳不了排序所产生的临时数据,9i开始可以指定数据库级别的默认临时表空间5、配置文件用来控制用户密码策略、以及资源使用的配置信息6、用户组7、锁定状
2、态数据库建立以后,会产生两个重要的用户:sys和systemsys是超级管理员,必须作为sysdba登陆,这是安全措施因为sys的权限太大,使用sysdba登陆以后,审计文件会记录登录的时间信息,system没有sys的权限大最通常的用法是:日常管理中,不要使用sys和system登录数据库,而是建立一个用户、并赋予DBA角色,使用该用户进行日常的管理工作创建用户口令是最常见的认证方式。CREATE USER SYSADMIN PROFILE DEFAULT IDENTIFIED BY * PASSWORD EXPIRE DEFAULT TABLESPACE USERS TEMPORARY T
3、ABLESPACE TEMP ACCOUNT UNLOCKGRANT CONNECT TO SYSADMIN 看一下外部认证(操作系统认证的例子)一个操作系统用户的账号是ora,那么在数据库里面需要建立一个用户叫做ops$ora,这个用户登陆操作系统以后,就可以直接登陆数据库了。因为操作系统已经认证了这个用户。CREATECREATE USERUSER OPS$ORA PROFILEPROFILE DEFAULT IDENTIFIEDIDENTIFIED EXTERNALLYEXTERNALLY DEFAULTDEFAULT TABLESPACETABLESPACE USERS TEMPORA
4、RYTEMPORARY TABLESPACETABLESPACE TEMP ACCOUNTACCOUNT UNLOCKUNLOCKGRANTGRANT CONNECT TOTO OPS$ORA不需要使用用户名和密码就可以直接登录。这就是一个反例,如果在数据库里面没有建立相应的用户名,不能使用外部认证。1、对于普通用户来说,账号存储在数据字典的表里面,数据库没有启动以前,不能对用户进行认证。2、对sys用户的认证方式有些特殊,因为sys用户需要在数据库还没有启动的情况下进行登录,对sys用户的认证主要有两种方式操作系统认证密码文件认证操作系统认证unix下面,如果用户属于DBA组,那么用户登录操
5、作系统后就可以使用sysdba进行登录windows下面,如果用户属于ora_dba组,那么用户登录操作系统以后,可以使用sysdba进行登录如果用户属于oinstall组,不能进行操作系统认证。如果用户属于DBA组,那么就可以使用操作系统认证,使用DBA角色登录数据库。在这方面,我们使用最多的就是Oracle用户。上面的认证需要我们的用户登陆Oracle所在的数据库服务器上。是否使用操作系统认证,还取决于一个设置这个文件中有这么一条记录,或者没有这么一条记录。那么就表示可以使用操作系统进行认证。如果改成NONE,那么表示不能使用操作系统进行认证。改回来以后,不需要重启什么服务,就直接可以进行
6、连接了。远程登录Oracle,如何实现sys认证,就需要使用口令文件。远程登录,必须提供sys的密码,这是安全要求。但是密码又不能存放在数据字典表里面,只能存放在另外一个位置,那就是密码文件。1、在服务器上建立一个密码文件unix上位于$ORACLE_HOME/dbswindows上位于$ORACLE_HOME/databaseSID为小写,那么口令文件中的orapwSID中的SID也要小些,两者必须相同,而且区分大小写。在WINDOWS平台下面,口令文件是PWDSID,SID也要遵循大小写。上面建立了一个口令文件,这个口令文件可以允许5个不同的oracle用户拥有sysdba权限。2、设置初
7、始化参数NONE:不能进行密码文件认证,Oracle未启动的情况下,远程用户没有办法通过网络服务的方式以SYSDBA权限登录到Oracle数据库。EXCLUSIVE:默认值,该密码只能被一个实例使用,我们可以向密码文件中添加新的用户SHARED:该密码文件可以被多个实例使用(用于RAC),但是密码文件里面只能存放sys和system用户的密码禁用操作系统以后,只能使用口令文件登陆。因为sysdba只有两种认证方式。目前使用口令文件只允许Oracle用户。显然可以使用口令文件进行认证了,但是目前为止只能sys用户使用口令文件。修改了参数以后,权限不够了。因为OS和口令文件全部禁止了,因此没有办法
8、启动数据库了,只能修改OS认证了。要启用口令文件认证,需要设置口令文件和配置上面的remote参数默认只有sys可以使用口令文件。密码文件丢失的情况可以重建口令文件。 sysadmin也进入了口令文件中。用户sysadmin也可以在数据库没有启动的情况下,使用口令文件进行认证了。用户sys的密码存在口令文件和数据字典中,修改了密码以后,会同时更新两个地方的密码。口令文件中可以存放多个用户,这些用户都可以使用sysdba在数据库没有启动的情况下登录数据库。建立了一个用户shd,给这个用户分配了连个权限。另起一个会话,使用shd登陆,建立一个用户。这个用户不能够被删除,因为这个用户正在连接中。如何
9、强行中断呢?等一会,PMON会启动起来,从而清理中断的session所占用的资源。session一直没有删除,可能是PMON未启动或者未能成功的解锁。找到被删除的那个进程的PADDR如果能够找到SPID的,那么就直接在linux上将这个进程给kill掉。虽然还是显示这个会话存在,但是过了一段时间以后,我们继续删除这个用户。发现另外报了一个错误,原来是这个用户下面对象。使用cascade删除用户,这个用户下面所有的对象都被删除。Profile的作用主要表现在两个方面1、密码策略2、对用户所能使用的资源进行管理3、profile存放在数据字典里面,默认有一个名字为default的profileDe
10、fault profile的一些项,这些项约束着用户。资源:kernel密码:password连续10次登陆不成功就锁定账号单位为天,一旦登陆次数超过指定的值以后,账号被锁定的时间,默认是unlimited,表示一直锁定下去。单位为天,密码在多少天以后失效,失效后必须更改密码单位为天,密码失效后,会缓冲一定的时间,这段时间,每次使用老密码登陆,都会提示更改密码,超过这段时间以后,如果还是没有更改密码,账号就被锁定。单位为天,在指定的天数以内,设定的密码不能重复。单位为次数,在指定的次数范围内,密码不能重复。上面的两个参数是互斥的,同时只能指定一个。密码复杂度,通过一个函数来实现。如何建立这个函
11、数,有一个样例。.可以修个脚本来建立密码函数,默认这个脚本执行后建立一个函数,这个函数绑定到default profile上。我们可以修改这个脚本达到我们的目的。一个密码函数绑定到了这个配置文件上。同一个用户同时最多能够产生多少个session同一个用户一次最多能够持续占用CPU的多少时间,以百分之一秒为单位,例如2000,就说明session一次能够持续使用20秒的CPU一次调用最多能够持续占用CPU的时间,一个SQL分为解析调用、执行调用等,以百分之一秒为单位每个session能够进行的逻辑读的最大个数。一次调用能够进行的逻辑读的最大个数一次会话能够idle的时间,超过这个时间以后,中断会
12、话,idle指的是既没有CPU、也没有IO等待SESSION连接数据库超过指定的时间,中断这个SESSION每个SESSION能够使用的PGA的最大个数权重可以使用DBCONTROL创建profile,然后将profile应用到用户上。删除profile的时候,如果有用户使用这个profile,那么需要加上参数cascade使用这个配置文件的用户的profile将为default。权限分为两种:系统权限、对象权限系统权限指的是用户能够做什么事情的权限例如:创建一个表空间、创建表等Oracle10g有超过100个的系统权限有很多的权限带有any,举例create table表示能够在自己的sch
13、ema里面创建表create any table表示能够在其他schema里面创建表所有的系统权限都放在system_privilege_map数据字典里面我们来研究一些和系统管理有关的权限1、sysdba和sysoper最重要也是最大的权限,在数据库里面能够做任何想做的事情2、restricted session拥有该权限的用户,则在数据库以restricted模式打开的时候,也能够登录数据库,以restricted模式打开数据库是为了进行维护性的工作,例如升级,我们不希望其他用户也能够登录到数据库,默认只有用户sys具有该权限3、以create以及create any开头的权限4、以dro
14、p 以及drop any开头的权限5、create session:表示用户能够连接到数据库实例并创建session,用户要能够登录数据库的话,至少要求该权限,也就是说,创建一个用户以后,至少要给与这个权限我们先看一下系统都有哪些权限。上面涉及都后面要讲的问题。用户systest不仅具有被赋予的create any table权限,还具有将这个权限付给别人的能力。如果用户需要在其所在的schema下创建对象,则需要游标空间上的配额(quota)1、unlimited tablespace系统权限,该用户能够在任何表空间里使用存储空间2、赋予用户在某些特定的表空间上的配额,该配额可以是一个具体的
15、数值,也可以是unlimited如何知道用户在哪些表空间上存在多少配额?带有any关键字的系统权限,表示可以在不同的schema下处理对象。默认情况下,即便具有any的系统权限,也不能操作用户sys所拥有的对象,这取决于下面的参数。保持这个参数的默认值false,防止sys的对象被被的用户访问,非常的危险。对象权限例如用户可以查询另一个用户下的一个对象,这就是对象权限对象权限名表视图序列号存储过程包InsertDeleteupdateSelectAlterIndexreferencesexecute必须以对象所有者的身份登陆,然后将当前用户所具有的某个对象权限赋给另外的用户。用户systest
16、1可以在userlevel上建立索引,如果userlevel表非常的大,那么访问这个表的时候需要使用索引。将一个包的执行权限赋给一个用户。对象权限的传递,使用with grant option。用户systest1可以将这个权限赋给别的用户。有一个系统权限grant any object privilege,如果用户具有了该系统权限,那么该用户就可以代表其他用户将他们所拥有的对象的权限赋给任意的用户。默认只有sys具有这个权限。将select on test11的权限撤回。权限具有连带效应。角色管理角色是一组权限的集合,并给该集合起了个名称,这个名称就是角色名。角色可以赋给某个用户,这样该用户
17、就具有了角色所包含的所有权限。角色还可以赋给另外的角色。角色的赋权过程中,不能形成环路,否则报错。A角色赋给了B角色,又把B角色赋给了C角色,如果有要把C角色赋给A角色,系统就会报错。角色管理的好处1、利于权限的分配20个用户,他们的权限相同,每个用户10个权限,总共需要赋权限200次。如果为10个权限建立一个角色,那么只需要付权限30次(10次给角色、20次给用户)2、利于权限的管理我们可以从角色中收回某个权限,这样20个都失去了这个权限我们通过禁用这个角色,让20个用户失去角色中所有的权限数据库创建好以后,就已经预先建立了很多的角色DBA:具有大部分的管理权限我们不应该使用sys和syst
18、em进行维护建立一个用户,然后将DBA权限付给这个用户不能够使用sysdba登陆。RESOURCE权限,该角色具有很多的create开头的系统权限比如create table、create procedure等。如果使用该角色,则用户可以创建很多不同类型的对象。在9i中,resource角色具有unlimited tablespace的系统权限在10g中,不再具有这个系统权限创建角色角色的启用、认证默认角色和非默认角色用户可以拥有很多的角色,用户登录的时候,默认角色一定会自动的启用,不管是否设置了角色的认证,默认角色总是启用的。非默认角色在用户登录后需要手工的启用,如果设置了认证,还需要通过认证。将一个角色设置为默认以后,别的角色就是非默认。用户登录后,只有默认角色起作用。第二个角色起作用了,下面的错误说明了在10g中,resource角色中已经没有了unlimited tablespace权限。