您的位置:首页 > 数据库 > Oracle

Oracle Database :玩转Oracle学习笔记之(21):Oracle用户和用户管理

2013-06-07 09:31 393 查看
1、SYS是超级用户,具有最高权限,具有syadba角色,有create database的权限;

2、system用户是管理操作员,权限也很大,具有sysoper角色,没有create database的权限;

3、一般来讲,对数据库维护使用system登陆就可以了;

传统的数据库系统,比如SQL Server,当我们用一个用户登录的时候,我们可以通过这个用户看到很多的数据库,而且还可以通过这个用户对数据库进行一些操作;

而Oracle则不同,他的特点是,你启动的是哪一个数据库实例,你就可以通过一个角色进去,而这个Oracle数据库里面,可以有很多用户去使用;

比如:Sql Server通过sa登录后可以看到很多的数据库,而其还可以进行相关的操作,同时还可以自己建立数据库;

而Oracle数据库则不同,当我们启动一个Oracle数据库,我们实际上是启动了一个数据库实例,是一个单独的数据库,当我们要创建数据库是,我们就要通过Oracle提供的机制去创建自己的数据库;当创建完成后,在服务管理器中又会增加一个服务,这就是新创建的Oracle实例;

一个Oracle数据库实例在启动后,会有多个用户或者角色可以对他进行操作,然而不同的角色和用户所操作的数据对象的权限是不同,有的数据对象只能是有更高的权限的角色或者用户才能操作,而有的数据对象是大多数用户和角色都可以操作的,Oracle通过权限管理和授权来实现这种机制;

1、Oracle创建用户:

在Oracle中创建用户使用create user语句,一般是具有dba(数据库管理员)的权限才能使用;Oracle的对象组织方式是以用户为单位的;因此每个用户都可在自己的表空间中建立自己的表,而不必去理会其他用户所建立的表是否和自己的表空间中的表名字是否相同;

2、给用户修改密码:

概述:如果给自己修改密码,可以直接使用sql>passw[ord] [用户名]

如果给别人修改密码要具有dba的权限,或是拥有alter user的系统权限;

sql>alter user 用户名 identified by 新密码

3、删除用户:

概述:一般要以dba的身份去删除某个用户,如果用其他用户区删除用户,需要具有drop user的权限:自己不能删除自己;

sql>drop user 用户名 [csacade]

在删除用户时,注意,如果删除的用户,已经创建了表了,那么就需要在删除的时候带一个参数cascade;

创建的新用户是没有任何权限的,甚至连登陆数据库的权限都没有,需要为其制定相应的权限,给一个用户赋予权限的命令是grant,回收权限使用命令revoke;

Oracle中的权限分为两种:系统权限和对象权限;

系统权限:指用户对数据库的相关权限(建立数据库,建表,建索引等);(用户对没有的数据库对象的构造权限);

对象权限:用户对其他用户的数据对象操作的权限;(用户对已有数据库的编辑权限);

对象权限简单的划分有如下几种:select , insert , update , delete , all,create index 等等;

用户要登录数据库,需要有create session权限;

为了供数据库管理员创建用户并且给用户分配权限,Oracle将一些普通的权限提取出来分配给一个角色,这个角色就具有所分配的权限,然后再给所创建的用户授权者个角色,那么用户就获得了角色所具有的权限;

这样数据库管理员就不必一个一个的去给用户分配权限了;

这就好比给一个人一个官职,官职就是一个角色,官职所拥有的权利就是权限,我们可以直接给一个人授予一个官职的角色,让他拥有官职的权限,而不必去逐个为这个人授权一个一个官职所拥有的权限;

角色又分为两种:预定义角色和自定义角色;

常见的角色有:connect , dba , resource(让被授予权限的用户在任何一个表空间建表);

当我们创建了一个用户后,用户会有自己的表,如果我们想让用户去访问其他用户的表的话,就得谈谈数据对象的授权了;

如果想让一个用户去访问另一个用户的数据对象(例如表),这就需要通过Oracle色数据对象授权来实现;

例如:我们创建了一个用户,在Scott用户下,我们执行:

grant select on emp to xiaoming ;

授权后,我们也可以收回权限:revoke select on emp from xiaoming;

这样就把岁emp表的查询权限授予个了xiaoming这个用户,如果我们希望xiaoming可以将查询权限授予其他用户的话,我们在授权的时候可以这样执行:

在scott方案模式下:

grant select on emp to xiaoming with grant option;

或者在dba方案模式下:

grant select on scott.emp to xiaoming;

最后我们可以在xiaoming方案下查询:

select * from scott.emp;

当然上面是对象权限的向后授权,我们可以用with grant option;

但是如果是系统权限的向后授权,我们可以用with admin option;

比如:grant connect to xiaoming with admin option;

这就说明xiaoming可以吧connect角色授权向后传递;

由于这后向后授权关系,如果我们把xiaoming的select权限收回的话,那么xiaohong的相应权限会怎样呢,通过测试,也会被收回;

那么这种情况对于系统权限(比如:connect角色或者create session权限)会如何呢?经过测试,系统权限不会被级联回收;

Oracle口令管理;

使用profile管理用户口令:

概述:profile是口令限制,资源限制的命令集合,当建立数据库时,oracle会自动建立名为default的profile,当建立用户没有知道profile选项,那么Oracle就会将default分配给用户:

1、账户锁定:

概述:指定该账户(用户)登录时最多可以输入密码的次数,也可以指定用户锁定的时间(天),一般用dba的身份去执行该命令;

比如:指定tea这个用户最多只能尝试3次登录,锁定时间为2天,看看怎么实现:

//首先创建一个profile文件,

sql>create profile lock_account limit failed_login_attempts 3 password_lock_time 2;

//将创建好了的profile赋予指定的用户;

sql>alter user tea profile lock_account;

2、给账户(用户)解锁:

sql>alter user tea account unlock;

3、终止口令;

为了让用户定期修改密码,可以使用终止口令的指令来完成,同样这个命令也需要dba的身份来完成;

例如:在前面的例子中,为用户tea创建了一个profile文件,要求该用户每个十天修改自家的登录密码,宽限期为两天,看看怎么做:

sql>create profile myprofile limit password_life_time 10 password_grace_time 2;

sql>alter user tea profile myprofile;

口令历史:

概述:如果希望用户在修改密码是,不能使用以前用过的密码,可以使用口令历史,这样Oracle就会将口令修改的信息存放到数据字典当中,这样修改密码时,Oracle就会对新旧密码进行比较,当发现新旧密码一样是,就提示用户重新输入新密码;

例子:

1、建立profile

sql>create profile password_history limit password_life_time 10 password_grace_time 2 password_reuse_time 10;

//password_reuse_time: 指定口令可重用的时间,即10天后既可以重用;

create profile myprofile limit failed_login_attempts 3 password_lock_time 2 password_life_time 10 password_grace_time 2 password_reuse_time 2;

2、分配给用户:

删除profile:

概述:当不需要某个profile文件时,可以删除该文件;

sql>drop profile profile文件名称 [cascade];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: