1. 创建用户

创建用户使用create user语句,需要DBA权限:

CREATE USER tom IDENTIFIED BY mot;

2. 更改用户密码

修改别人的密码需要DBA权限,或者alter user权限:

ALTER USER tom IDENTIFIED BY newpasswd;

或者修改别人的密码带上用户名:

SQL> PASSWORD tom;
更改 tom 的口令
新口令: ******
重新键入新口令: ******
口令已更改

如果是更改自己的密码的话可以省略掉用户名,注意更改自己密码的时候需要输入旧密码来证明我是我自己:

SQL> PASSWORD
更改 SYS 的口令
旧口令: ******
新口令: ******
重新键入新口令: ******
口令已更改

修改密码的语法跟Linux下修改密码的语法类似,猜想是因为在很久之前大家都是用Linux的,这么设计可能是为了兼容性吧,尽量不去改变用户习惯。

4. 删除用户

删除用户也需要DBA的权限,自己删除自己是不允许的,不能自杀...

DROP USER tom;

如果需要在删除用户的时候删除此用户创建的所有表,那么在用户名后面加上cascade:

DROP USER tom CASCADE;

需要注意如果此用户已经登录到系统中的话是暂时不能删除的,所以不能自杀。

4. 更改用户权限

创建的新用户是没有任何权限的,需要为其指定权限,不指定权限的话连系统都登录不上去。
为一个用户赋予权限使用grant,回收权限使用revoke。

为创建的用户Tom赋予权限使其可以登录:

GRANT connect TO tom; 

上面的命令到底是什么意思呢?这个connect实际上是一个预定义角色,上面表示我们把一个叫做connect的角色赋予给了用户tom。

Oracle中权限分为系统权限和对象权限。

系统权限:用户对数据库的相关权限,大概有一百四十多种。

对象权限:用户对其它用户的数据对象操作的权限,大概有二十多种。

因为权限实在太多了,一个用户的权限可能非常非常的多,这个时候我们管理起来就会很崩溃,所以就引入了一个新概念叫做角色,给一个角色初始赋予很多权限,让一个角色表示一个权限的集合,这样子我们再对权限进行管理的时候就多了一个选择,可以将一个角色直接授予一个用户,当用户拥有某种角色的时候就拥有这个角色表示的所有权限。

角色又分为两种,一种是预定义角色,一种是自定义角色。

系统中初始化了一些预定义角色,但是也可能仍然满足不了我们的需求,这个时候就让我们可以自定义角色,来自定义权限集合。

GRANT connect TO tom; 

系统权限中有一种叫做create session,拥有这个权限才可以登录到系统,而connect角色包含了create session权限。

特殊的角色:

DBA:可以让一个普通用户变成一个DBA,DBA大概相当于MySQL下的root。

RESOURCE:可以让某个用户建表等一堆乱七八糟的创建(create)相关的权限。

对象权限都是啥:

select
insert
update
delete
all
create index
...

授予一个用户创建表的权限:

GRANT resource TO tom;

希望一个用户Tom可以去查看其它用户Scott创建的表emp,让用户Scott授权给用户Tom相应的对象权限:

GRANT select on emp TO tom;

登录Tom,查询Scott下的emp表:

SELECT * FROM scott.emp;

注意需要使用用户名进行引用,联想到MySQL中使用databaseName.tableName可以跨数据库查询,将一个用户当做一个数据库,引用的时候使用username.tableName进行引用,这样的话使用用户名进行分割,不同的用户名下是可以有相同表名的表的。

上面的如果需要Tom能够把赋予的这个权限继续传递,比如传递给Sam,可以在授权的时候在后面加上with grant option:

GRANT select on emp TO tom WITH GRANT OPTION;

Tom现在也可以把这个权限授予给别人了,而且还可以把权限最大化的传递,让别人也拥有授权权限,使用sys创建一个用户:

CREATE USER sam IDENTIFIED BY toor;

然后让Tom把这个权限授予给Sam:

GRANT select on scott.emp TO sam WITH GRANT OPTION;

注意如果这个时候Scott把赋予Tom的权限收回了的话,Tom授予给其他人的权限仍然是存在的,大概就相当于赵立春书记上任的时候提拔了好些干部,如果他倒台了这些干部也都全给一撸到底回家种地,这样子就没办法管理了,这里不实行连坐。

收回权限的时候只是将grant改为revoke,将to改为from:

REVOKE select on emp FROM tom;

5. 使用profile管理用户口令

profile是口令限制、资源限制的命令,当建立数据库的时候Oracle自动建立名为default的profile,当创建用户的时候没有指定profile的话,那么就意味着使用default的profile。

创建和管理profile需要DBA权限。

创建一个profile,名称为lock_account,用来限制登录时的最大失败尝试次数,锁定的时间单位为天:

CREATE PROFILE lock_account
LIMIT
failed_login_attempts 3
password_lock_time 2;

让Tom使用这个profile:

ALTER USER tom PROFILE lock_account;

当尝试次数超过了之后,账户又会被锁定了,再登录的时候就会提示,即使密码对了也登不上去了:

ERROR:
ORA-28000: the account is locked

账户被锁定的时候可以让DBA来解锁账户:

ALTER USER tom ACCOUNT UNLOCK;

某个用户的账户有异常行为需要冻结掉,DBA手动锁定账户:

ALTER USER scott ACCOUNT LOCK;

限制最大尝试次数可以在一定程度上提高账户的安全性。

为了提高安全性管理员通常会做的一个限制就是限定某个用户的密码每隔多长时间就修改一次,相当于一种"动态密码"了,创建一个profile限定用户必须周期性的改密码,password_life_time表示每隔多少天必须修改密码,password_grace_time表示到期后宽限几天:

CREATE PROFILE circle_passwd
LIMIT
password_life_time 10
password_grace_time 2;

上面的策略表示每隔12天就修改一次密码,在第十一天的时候就开始提醒,一直提醒两天,如果一直不修改密码的话在第十三天账户将被锁定。

我上一份工作的公司配的笔记本每隔几个月就要修改一次密码,因为我们都习惯一直用同一个熟悉的东西,不大想改变习惯嘛,所以我机智的想,如果我在到期的时候将密码随便修改一下再立刻修改回来,不仍然可以使用之前的密码而不被影响吗...哈哈哈,当我机智的这么做的时候我发现我还是太年轻...修改密码的时候有一个策略可以不允许用户使用历史密码,即之后再使用的密码不能与之前的重复,在Oracle的profile也有这个选项,使用password_reuse_time指定口令的可重用时间,比如:

CREATE PROFILE circle_passwd_history
LIMIT
password_life_time 10
password_grace_time 2
password_reuse_time 2;

删除profile:

DROP PROFILE circle_passwd_history;

当profile被删除的时候使用到这个profile的用户也不被约束了。

.

Oracle笔记之用户管理的更多相关文章

  1. Oracle DB 执行用户管理的备份和恢复

    • 说明用户管理的备份和恢复与服务器管理的备份和恢复 之间的差异 • 执行用户管理的数据库完全恢复 • 执行用户管理的数据库不完全恢复 备份和恢复的使用类型 数据库备份和恢复的类型包括: • 用户管理 ...

  2. oracle工具 sqlplus 用户管理

    可以通过system用户对普通用户解锁.alter user scott account unlock; 工具:1/ sqlplusw sqlplus 自带.调用oracle安装目录下bin目录下的e ...

  3. Linux实战教学笔记14:用户管理初级(下)

    第十四节 用户管理初级(下) 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,用户查询相关命令id,finger,users,w,who,last,lastlog,gr ...

  4. oracle数据库之用户管理

    转载 Oracle创建用户.角色.授权.建表   一.oracle数据库的权限系统分为系统权限与对象权限: 系统权限( database system privilege )可以让用户执行特定的命令集 ...

  5. Linux实战教学笔记14:用户管理初级(上)

    第十四节 用户管理初级(上) 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,账号管理 1.1 管理用户命令汇总 命令 注释说明(特殊颜色的必须掌握) useradd增 ...

  6. Linux实战教学笔记15:用户管理初级(下)

    第十四节 用户管理初级(下) 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,用户查询相关命令id,finger,users,w,who,last,lastlog,gr ...

  7. linux笔记:用户管理命令和用户组管理命令

    用户管理命令 命令名称:useradd功能:添加用户(添加完后不能立即使用,必须用passwd修改用户密码后才能使用)用法:useradd [选项] 用户名选项参数:-u 手工指定用户的UID-d 手 ...

  8. 吴裕雄--天生自然ORACLE数据库学习笔记:用户管理与权限分配

    create user mr identified by mrsoft default tablespace users temporary tablespace temp; create user ...

  9. Oracle基础和用户管理

    1.数据库的使用: 项目的规模:负载量(用户)有多大? 成本: 安全性:   (小型数据库)access.forbase 负载小 :100人以内,比如留言板,信息管理系统. 成本:千元以内. 安全性要 ...

随机推荐

  1. 【BioCode】根据seq与位点信息截取窗口

    代码说明 sequence24371.txt 以上为所有氨基酸的编号,序列,与位点标记.根据标记为“1”的位点,截取窗口:如下(实验结果): 图示为一个窗口为12的蛋白质片段 2N+1=25: 实现代 ...

  2. 关于command 'gcc' failed with exit status 1 解决方法

    Python踩坑之路 Setup script exited with error: command 'gcc' failed with exit status 1 由于没有正确安装Python开发环 ...

  3. Spring Cloud 之 Eureka

    Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务 ...

  4. appium1.6.3/1.6.4/1.6.5版本下如何支持安卓下ByName定位

    1. 换其他定位方式,比如用xpath代替 2. 使用ByAccessibilityId代替,感觉没什么效果 一招修改源码解决问题根源,修改方法如下: 找到你的appium\node_modules\ ...

  5. AtCoder Grand Contest 019 B: Reverse and Compare

    题意: 给出一个字符串,你可以选择一个长度大于等于1的子串进行翻转,也可以什么都不做.只能翻转最多一次. 问所有不同的操作方式得到的字符串中有多少个是本质不同的. 分析 tourist的题妙妙啊. 首 ...

  6. 【bzoj3130】[Sdoi2013]费用流 二分+网络流最大流

    题目描述 Alice和Bob做游戏,给出一张有向图表示运输网络,Alice先给Bob一种最大流方案,然后Bob在所有边上分配总和等于P的非负费用.Alice希望总费用尽量小,而Bob希望总费用尽量大. ...

  7. python写BMI指数菜单

    需求: # 1.创建并输出菜单, 菜单是不可变的. 所以使用元组menus = ("1, 录入", "2, 查询", "3, 删除", &q ...

  8. 520的信心赛——点点玩deeeep

                                   3.点点玩 deeeep(deeeep.cpp) 描述 点点最近迷上了 deeeep(此 de 非彼 de),在研究一个特殊的最长树链问题 ...

  9. Android 通过浏览器打开应用

    在很多应用的web站,其实都有这样一个功能,就是直接在网页中打开应用,接下来的就来探讨一下这个功能的实现,有些地方也我还没弄明白,还请懂的大神指点. 首先,得说一点不好消息,在微信中,这样的方式是行不 ...

  10. move_base代码学习一

    System overview move_base 源码 API nav_core BaseGlobalPlanner BaseLocalPlanner RecoveryBehavior Recove ...