ORACLE的用户维护与权限操作
1 创建和维护用户
sql语句中,不区分大小写,但是值区分大小写(单引号中的内容)
1.1 创建用户
- 语法:create user 用户名 identified by 密码;
此时用户创建成功后,没有任何权限,包括登录数据库。
- 示例:
# 创建用户firstuser密码为firstuser
create user firstuser identified by firstuser;
1.2 更改用户密码
-
语法:alter user 用户名 identified by 新密码;
-
示例:
# 将firstuser用户密码修改为userfirst
alter user firstuser identified by userfirst;
1.3 删除用户
- 语法:drop user 用户名 [cascade]
如果要删除的用户已经创建了表,那么就需要在删除的时候带参数cascade。
- 示例:
drop user firstuser;
1.4 锁定用户
- 语法:alter user 用户名 account lock;
将用户锁定后不能登录
- 示例:
# 锁定scott用户
alter user scott account lock;
# 登录失败,提示账户已锁定
conn scott/tiger;
1.5 解锁用户
-
语法:alter user 用户名 account unlock;
-
示例:
# 解除scott用户的锁定状态
alter user scott account unlock;
# 登录scott用户 connect可以简写成conn
connect scott/tiger;
# 查看当前用户
show user;
# 返回之前的用户
conn sys/Oracle11g as sysdba;
1.6 更改用户表空间-无
2 用户权限维护
2.1 什么是权限
权限就是指由管理员赋予某个用户能够进行某个操作的权力。
比如赋予用户firstuser登录、建表的权限。
2.2 权限分类
系统权限(用户登录,创建对象):系统规定用户使用数据库的权限。(系统权限是对用户而言)。
对象权限(操作指定对象的某种权限):某种权限用户对其它用户的表或视图的存取权限(对象权限是针对表或视图而言的)。
2.3 常用系统权限角色
DBA: 拥有全部特权,是系统最高权限,可以登录用户、创建表、创建库。
RESOURCE:普通用户权限,只能创建表、不能创建库。
CONNECT:只可以登录Oracle。
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予dba、connect,resource权限。
2.4 权限的赋予
需要使用高权限用户登录(如system、sys、scottas sysdba 用户等)
根据需要赋予、收回相应权限
2.4.1 系统权限的赋予
-
语法:grant 权限1,权限2 to 用户名
-
示例:
# 创建用户
create user xykj identified by zzh;
# 赋权
grant dba to xykj;
# 登录
conn xykj/zzh;
# 查看其它用户的表
select * from scott.emp;
# 查看权限
select * from dba_role_privs where GRANTEE='XYKJ';
# 创建用户
create user xykj1 identified by zzh;
# 赋权
grant resource,connect to xykj1;
# 登录
conn xykj1/zzh;
# 查看其它用户的表 权限不同提示表不存在
select * from scott.emp;
# 查看权限 权限不足,提示不存在
select * from dba_role_privs where GRANTEE='XYKJ1';
2.4.2 对象权限的赋予
需要高权限用户
- 对象的权限:
select:查询权限
insert:插入数据权限
delete:删除行权限
update:修改行内容权限
all:所有权限
-
语法:grant 权限 on 用户.表 to 用户;
-
示例:
--查询失败,没有权限
conn xykj1/zzh;
select * from scott.emp;
--赋予查询权限
conn xykj/zzh;
grant select on scott.emp to xykj1;
conn xykj1/zzh;
select * from scott.emp;
--赋予修改权限
conn xykj/zzh;
grant update on scott.emp to xykj1;
conn xykj1/zzh;
update scott.emp set sal=1400 where empno=7934;
select * from scott.emp;
--收回修改权限
conn xykj/zzh;
revoke select on scott.emp from xykj1;
revoke update on scott.emp from xykj1;
2.4.3 对象权限的传递
- 语法:grant select on 用户.表 to 用户 with grant option;
- 示例:
--高权限用户赋予xykj1用户查询权限,允许权限传递
conn xykj/zzh;
grant select on scott.emp to xykj1 with grant option;
conn xykj1/zzh;
select * from scott.emp;
--xykj1用户通过权限传递,赋予xykj2用户查询权限
grant select on scott.emp to xykj2;
conn xykj2/zzh;
select * from scott.emp;
--当xykj1的权限被收回时,xykj2的权限也会被自动收回
conn xykj/zzh;
revoke select on scott.emp from xykj1;
conn xykj1/zzh;
select * from scott.emp;
conn xykj2/zzh;
select * from scott.emp;
2.5 查询用户拥有权限
可以从数据字典(系统表)中查询用户拥有的权限。
- 语法:select * from dba_role_privs where GRANTEE=‘用户名’;
- 注意事项
需要dbs权限
所有的用户名必须大写
- 示例:
select * from dba_role_privs where GRANTEE='xykj';
select * from dba_role_privs where GRANTEE='XYKJ';
2.6 权限的收回
2.6.1 系统权限的收回
需要高权限用户
-
语法:revoke 权限 from 用户名;
-
示例:
# 收回xykj1的resource权限
revoke resource from xykj1;
# 查看xykj1的权限
select * from dba_role_privs where GRANTEE='XYKJ1';
2.6.2 对象权限的收回
- 语法:revoke 权限 on 用户.表 from 用户;
- 示例:
revoke select on scott.emp from xykj1;
revoke update on scott.emp from xykj1;
3 管理用户口令
3.1 Profile概述
Profile是口令限制,资源限制的命令集合,当建立数据库时,ORACLE会自动建立名字为DEFAULT的Profile。当建立用户没有指定Profile选项,那么ORACLE就会将DEFAULT分配给用户。
Profile就是数据库设定的操作限制,类似于ATM机的3次密码错误就吞卡一类的规则。
3.2 Profile使用步骤
3.2.1 创建profile
- 指定scott用户最多只能尝试3次登录操作,锁定时间为2天
--建立profile及规则
create profile lock_account
limit failed_login_attempts 3
password_lock_time 2;
--将profile 赋予scott 用户
alter user scott profile lock_account;
conn scott/tige;
--登录3次错误,账户被锁定,正确密码也无法登录
conn scott/tiger;
--想要登录需等待两天后,或手动解锁
conn xykj/zzh;
alter user scott account unlock;
conn scott/tiger;
- 要求用户每10天要修改登录密码,宽限期为2天
create profile myprofile
limit password_life_time
10 password_grace_time 2;
3.2.2 删除prodile
--删除名为myprofile的口令
drop profile myprofile cascade
3.3 用户连接和退出
- 切换用户:conn 用户/密码 [as sysdaba];
conn scott/tiger;
- 注销当前用户
disc;
- 查询当前用户
show user;