Oracle学习日历(一)-用户管理
学习了韩顺平前辈的oracle 视频 ,在这里记录学习日志。韩老师的讲解深入浅出,赞!
创建用户
概述:在oracle中要创建一个新的用户使用create user语句,一般是具有dba(数据库管理员)的权限才能使用。
create user 用户名 identified by 密码; (密码必须以字母开头)
给用户修改密码
概述:如果给自己修改密码可以直接使用
sql>password 用户名
如果给别人修改密码则需要具有dba的权限,或是拥有alter user的系统权限
SQL> alter user 用户名 identified by 新密码
删除用户
概述:一般以dba的身份去删除某个用户,如果用其它用户去删除用户则需要具有drop user的权限。
比如 drop user 用户名 【cascade】
在删除用户时,注意:
如果要删除的用户,已经创建了表,那么就需要在删除的时候带一个参数cascade;
Cascade有级联的作用
用户管理的综合案例
概述:创建的新用户是没有任何权限的,甚至连登陆的数据库的权限都没有,需要为其指定相应的权限。给一个用户赋权限使用命令grant,回收权限使用命令revoke。
给用户分配权限
给用户赋系统权限要有DBA或管理员权限的用户
oracle大概有140多种系统权限权限,对象权限有25个。
权限分类:系统权限 对象权限
系统权限:用户对数据的相关权限(建库、建表、登录、修改数据表等)
对象权限:用户对其他用户的数据对象访问或操作的权限(数据对象:过程、表空间、表、视图、触发器等其中操作权限包括select,insert,update,delete,all,create index等)
系统权限:
create session(登录权限)
resource(此权限可以在任何表空间创建表)
角色:connect connect包含了所有普通用户所具备的权限,connect属于预定义角色。
dba角色: resource (包含所有DBA权限,)
resource角色:此角色可以在任何表空间创建表
角色分类:自定义角色 预定义角色
grant connect to xiaoming; ( 给xiaoming这个用户connect角色权限)
grant resource to xiaoming (给xiaoming这个用户 resource角色权限)
create table test(userid varchar2(30),username varchar2(30));
(create table test创建表 userid username是字段名 varchar2(30)是类型 )
desc test查看表结构 ,test是表名
希望xiaoming用户可以去查询其他用户的表需要用到对象权限,分配权限需要用dba、管理员或其他本身拥有表权限的用户去授权,同时撤销权限需要授权与权限的用户去撤销才行。
grant select on emp to xiaoming (EMP表本身拥有用户登录授权xiaoming用户查询权限)
grant update on emp to xiaoming (EMP表本身拥有用户登录授权xiaoming用户修改权限)
grant all on emp to xiaoming (EMP表本身拥有用户登录授权xiaoming用户全部权限)
select * from scott.emp; (xiaoming用户得到emp表权限后,在查询的时候需要跟上emp表本身拥有者的用户名scott)
收回权限
revoke select on emp from xiaoming (用授权用户去收回xiaoming对emp表的查询权限)
revoke all on emp from xiaoming (用授权用户去收回xiaoming对emp表的全部权限)
权限传递
xiaoming得到权限想传递给其他用户
--如果是对象权限,就加入 with grant option
grant select on emp to xiaoming with grant option
xiaoming把权限传递给xiaohong
grant select on sott.emp to xiaohong
--如果是系统权限
system给xiaoming可传递权限时;with admin option
grant connect to xiaoming with admin option
如果权限用户把xiaoming的权限回收了,xiaohong权限也会受影响。
看图:
使用profile管理用户口令
概述:profile是口令限制,资源限制的命令集合,当建立数据库时,oracle会自动建立名称为default的profile.当建立用户没有指定profile选项,那oracle就会将default分配给用户。
账户锁定
概述:指定该账户(用户)登录时最多可以输入密码的次数,也可以指定用户锁定的时间(天)一般用dba的身份去执行该命令
例子:指定scott这个用户最多只有尝试3次登录,锁定时间为2天,让我们看看怎么实现。
创建profile文件 用DBA用户创建
sql>create profile lock_account limit failed_login_attempts 3 password_lock_time 2; (lock_account规则名称 3是次数 2是锁定天数。红色字是固定语句)
sql>alter user scott profile lock_account; (把刚建的lock_account规则分配给scott用户)
给账户(用户)解锁 要用DBA用户来完成
sql>aliter user scott account unlock; (给scott用户解锁)
终止口令 用DBA用户来完成
为了让用户定期修改密码可以使用终止口令的指令来完成,同样这个命令也需要DBA身份来操作。
例子:给面前创建的用户tea创建一个profile文件,要求该用户每隔10天要修改自家的登录密码,宽限期为2天,看看怎么做。
sql>create profile lock_account limit password_life_time 10 password_grace_time 2;(lock_account规则名称 10是天数 2是宽限期。红色字是固定语句)
sql>alter user tea profile lock_account (给tea用户赋予刚建立的lock_account规则)
口令历史
概述:如果希望用户在修改密码时,不能使用以前使用过的密码,可使用口令历史,因为oracle就会将口令修改的信息存放到数据字典中,这样当用户修改密码时,oracle就会对新旧密码进行比较,当发现新旧密码一样时,就提示用户重新输入密码。
例子:
sql> create profile lock_account limit password_life_time 10 password_grace_time 2 password_reuser_time 10 (lock_account规则名称 10是每隔10天修改一次密码 2是宽限期。10是10天后旧密码可以重用,红色字是固定语句)
password_reuse_time //指定口令可重用时间即10天后就可以重用
2、分配给某个用户
alter user tea profile lock_account (把lock_account规则分配给tea)
删除profile里面的某个规则
概述:当不需要某个profile 规则时,可以删除该规则。
sql>drop profiel lock_account 【cascade】 (删除 lock_account规则,加cascade就会级联删除相关的所有东西)
Oracle 密码过期
概述:导致密码消失的原因:Oracle 11g中默认的DEFAULT概要文件中口令有效期PASSWORD_LIFE_TIME默认值为180天。
当以客户端登陆Oracle提示ORA-28002,则基本可以确定登陆帐号已过有效期,使用具有DBA权限的帐号重置该帐号密码即可。
解决方法:
以下步骤以具有DBA权限用户操作
1.查看口令失效用户的profile文件
SQL>SELECT username,profile FROM dba_users;
EM:服务器>用户,查看口令失效的用户对应的概要文件,这里假设为DEFAULT,下同。
2.查看对应的概要文件的口令有效期设置
SQL>SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
注:如果这段语句查不到,可以直接查询 dba_profiles表 SELECT * FROM dba_profiles
EM:服务器>概要文件>选择刚刚查到的概要文件DEFAULT>查看,查看口令下面的有效期值。
3.将口令有效期默认值180天修改成“无限制”
SQL>ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
EM:服务器>概要文件>选择刚刚查到的概要文件DEFAULT>编辑>口令,在有效期输入或选择你需要的值,保存。
注:该参数修改实时生效。
出于数据库安全性考虑,不建议将PASSWORD_LIFE_TIME值设置成UNLIMITED,即建议客户能够定期修改数据库用户口令。
在修改PASSWORD_LIFE_TIME值之前已经失效的用户,还是需要重新修改一次密码才能使用。
SQL>alter user 用户名 identified by 密码;
将密码改为永久有效举例说明
假定我们所使用的数据库用户为test,密码为test123456
步骤一:登陆oracle所在的linux服务器(我们的oracle假设在linux服务器上),注意要用dba用户。
步骤二:执行'sqlplus / as sysdba'
步骤三:输入'alter profile default limit password_life_time unlimited;'并回车
步骤四:输入'alter user test identified by test123456;'
步骤五:输入'quit;'退出sqlplus。
步骤六:重启各个业务部件,一切OK。
需要注意的是,对于第四步,可能会失败,因为oracle有可能设置了修改密码时不能与历史密码重复的限制,我们可以先执行以下命令去掉限制,然后再执行第四步。虽然对于第四步而言设置前后密码没有改变,但却是必要的吗,实际测试中发现即使做了第三步处理,如果不执行第四步,jdbc连接数据时依然会连接失败。
alter profile default limit password_reuse_max unlimited;
alter profile default limit password_reuse_time unlimited;
在使用profile并想重复利用密码的时,需要满足如下条件
1)password_reuse_time和password_reuse_max都为unlimted的时候
可以随便重置
2)当指定password_reuse_time和password_reuse_max其中一个,另外一个unlimted的时候
密码永远无法重置
3)当同时指定password_reuse_time和password_reuse_max的时候
在满足password_reuse_max的时候,可以重置密码
在同时满足password_reuse_time和password_reuse_max的时候,可以重置密码
在满足password_reuse_time但从为更换过密码的时候,也就是password_reuse_max一次也没用的时候密码无法重置.
上面这种处理方案是修复现网问题的弥补性措施,根本的要在oralce安装的时候就去掉密码有效期的限制。
profile各字段介绍
PASSWORD_LIFE_TIME
设定口令的有效时间(天数),一旦超过这一时间,必须重新设口令。缺省为180天(11g,10gUNLIMITED).
PASSWORD_REUSE_TIME
许多系统不许用户重新启用过去用过的口令。该资源项设定了一个失效口令要经过多少天,用户才可以重新使用该口令。缺省为UNLIMITED.
PASSWORD_REUSE_MAX
重新启用一个先前用过的口令前必须对该口令进行重新设置的次数(重复用的次数)。
PASSWORD_LOCK_TIME
设定帐户被锁定的天数(当登录失败达到FAILED_LOGIN_ATTEMPTS时)。
PASSWORD_GRACE_TIME
设定在口令失效前,给予的重新设该口令的宽限天。当口令失效之后回,在登录时会出现警告信息显示该天数。如果没有在宽限天内修改口令,口令将失效。
PASSWORD_VERITY_FUNCTION
该资源项允许调用一个PL/SQL 来验证口令。Oracle公司已提供该应用 的脚本,但是只要愿意的话,用户可以制定自己的验证脚本。该参数的设定就是PL/SQL函数的名称。缺省为NULL.
参考网址
http://www.blogjava.net/freeman1984/archive/2013/04/23/398301.html oracle 密码修改永久
http://www.cnblogs.com/yangy608/p/4054393.html oracle 密码修改永久
http://blog.sina.com.cn/s/blog_490a0c99010103sx.html oracle 密码修改永久