第二章Oracle用户管理
【目标】
1.掌握用户的创建、删除、修改
2.掌握基本的权限管理
3.了解数据字典及基本操作
【内容】
用户的创建、删除、修改
创建用户
语法:createuser 用户名identifiedby 密码;
注:在oracle中创建用户只能由管理员或者具有管理员的权限的用户创建。
案例:新建用户abc

新建的用户是没有任何权限的,包括连接数据库的权限。
新创建的用户是没有任何权限的,直接登录会报如下错误:

此时必须有管理员授权,才可以连接数据库。
如果新建的用户想要连接数据库,就需要被赋予权限,只有管理员才能赋予新用户权限。
赋予用户连接数据库的权限:grantcreate session to abc;
赋予用户dba的角色:grantdba to abc;

DBA: 数据库管理员
修改密码
在oracle中如果要修改自己的密码直接使用passw[ord]命令,如果要修改其他用户的密码则必须具备dba角色或alteruser权限
1. 修改自己的密码


修改其他用户的密码
语法:alteruser 用户名identifiedby 密码;

修改用户信息
在oracle数据中修改用户信息只能由管理员或者具有管理员权限的用户操作。
修改用户密码
alter user 用户名identifiedby 密码;
解锁用户/锁定用户
解锁用户:alter user 用户名accountunlock;
锁定用户:alter user 用户名accountlock;
删除用户
语法:drop user 用户名;

如果当前用户拥有数据库表、视图、序列等等,删除用户就需要指定关键字:cascade.
drop user abc cascade;
基本的权限管理
Oracle权限:系统权限和用户权限(对象权限/角色权限)
系统权限:创建表,创建用户,修改表或者用户,视图等等。
对象权限:包含另外对象数据库信息的查询,修改等等操作的
Oracle对象之间访问数据库内容,需要用户名.表名访问。
对象与对象之间是不可以直接操作的,也是需要具备相应的权限。
2.1授权
语法:grant权限/角色to用户名;
系统权限:createtable,createsession,dropuser,droptable等等
角色权限:dba管理员
connect:连接数据库
resource:创建表的权限
案例1:创建用户abc1,并赋予他连接数据库和创建表的权限。
步骤:
sys管理员连接数据库:conn sys/system as sysdba;
新建用户abc1:create user abc1 identified by abc1;
给abc1用户授权:事实上、
grantconnect,resourceto abc1;

abc1 连接数据库:

案例2:授予abc1查询scott用户emp表的权限。
步骤:
sys管理员连接数据库:conn sys/system as sysdba;
给abc1用户授权:
grantselect on scott.emp to abc1;

连接abc1,查询scott 用户下emp表

案例3:授予abc1用户scott的emp表的所有权限。
步骤:
sys管理员连接数据库:conn sys/system as sysdba;
给abc1用户授权:
grantall on scott.emp to abc1;
abc1 连接数据库:conn abc1/abc1;
向scott 的emp表中插入一条数据:
insertinto scott.emp(empno, ename) values(123, ‘zhangsan’);

2.2 回收权限
Oracle中只有管理员才可以回收权限。
语法:revoke权限/角色from用户名;
案例1:回收abc1对于scott的emp表的所有权限。
步骤:
sys管理员连接数据库: conn sys/system as sysdba;
撤销abc1的权限:revoke all on scott.emp from abc1;

连接abc1:conn abc1/abc1;
查询下scott 用户的emp表:select * from scott.emp;

案例2:回收abc1对于连接数据库的权限。
步骤:
sys管理员连接数据库: conn sys/system as sysdba;
撤销abc1的权限:revoke connect from abc1;

abc1连接数据库:conn abc1/abc1;

2.3 给其他用户授权的能力
with admin option:授予系统相关的admin权限
with grantoption:授予对象相关的grant权限
语法:grant权限to用户名withadmin option;
grant 权限to用户名withgrant option;
案例.1:给abc1赋予连接数据库,创建表和授予别的用户的权限的权限,并授予abc2用户连接数据库的权限。
步骤:
sys管理员连接数据库: conn sys/system as sysdba;
给abc1用户授权: grant create session, create table to abc1 with admin option;
创建用户abc2:create user abc2 identified by abc2;
abc1连接数据库: conn abc1/abc1;
abc1给abc2授权create session:grant create session to abc2;
abc2连接数据库:conn abc2/abc2;

案例2:给abc1赋予scott用户下emp表的所有权限和授予别人权限的权限,并给abc3用户授予scott用户下emp表的所有权限。
步骤:
sys管理员连接数据库: conn sys/system as sysdba;
给abc1用户授权: grant all on scott.emp to abc1 with grant option;
创建用户abc3:create user abc3 identified by abc3;
给abc3用户授予连接数据库的权限:grant create session to abc3;
abc1连接数据库: conn abc1/abc1;
abc1给abc3授权all on scott.emp :grant all on scott.emp to abc3;
abc3连接数据库:conn abc3/abc3;
abc3查询scott用户下emp表的内容:select * from scott.emp;

多级权限回收/撤销
语法:revoke权限from用户;
案例1:结合2.2中案例2,回收abc1对于scottemp的所有权限,测试abc3是否还有scottemp表的权限。回收对象权限
步骤:
1.sys管理员连接数据库:connsys/system as sysdba;
2.回收abc1对于scott用户emp表的权限;

3.测试abc3对于scottemp表的权限:
connabc3/abc3;
select*from scott.emp;

结果:abc1没有emp表上的权限,abc3没有了scott用户emp表的权限。
总结:对于对象权限,sys——>abc1——>abc3,当sys回收abc1权限的时候,abc3的权限也被回收了。
案例2:结合2.2中案例1,回收abc1连接数据库的权限,测试abc2是否还可以连接数据库。
步骤:
1.sys管理员连接数据库:connsys/system as sysdba;
2.Sys回收abc1的createsession的权限,测试abc1是否还能连接数据库
Revokecreate session from abc1;

测试abc2是否可以连接数据库。conn abc2/abc2;

结果:abc1不能连接数据库,abc2依然可以连接数据库。
总结:对于系统权限,sys——>abc1——>abc2,然后由sys将abc1的权限回收,abc2依然可以连接数据库。
练习:不要用sys回收abc2和abc3,多测试几个级联用户,由上级回收下级的权限,测试下下级的权限是否还可以使用。
Awith admin/grant option——>B——C,A回收B,测试C是否还具备那个权限。
三数据字典及基本操作,用户管理
基本操作
对表的操作
1.查看当前用户所拥有的表:
select *from user_tables;
查看当前用户所有表的表名:
selecttable_namefrom user_tables;
对用户的操作
查询当前有多少用户(必须用管理员身份才可以查询)
Select* from all_users;
查询dba:select* from dba_users;
查询当前用户的信息:select* from user_users;
对权限的操作
查询所有具有系统权限的dba:
Select* from dba_sys_privs where grantee=’DBA’;
查询数据库中所有的角色role
Select* from dba_roles;
profile管理用户
创建profile文件与指定给用户
案例1.如果用户连续3次登陆失败,锁定用户,锁定时间2天.lock
步骤:
1.先创建一个profile文件
createprofilelock_account(文件名)limit failed_login_attemptes 3 password_lock_time 2;
2.将profile文件指定给用户
alteruserabc2 profile lock_account;

3.abc2连续三次登陆失败,账号锁定。

解锁abc2用户 alter user abc2 account unlock;(管理员身份解锁)
解除用户的profile文件
Alteruser abc2 profile default;
案例2:用户每隔10天修改密码,宽限2天。
步骤:
1.sys管理员连接数据库:connsys/system as sysdba;
2.新建profile文件,用来限制用户十天修改密码,宽限期是2天。
createprofilechange_pwd limitpassword_life_time10 password_grace_time 2;
3.将profile配置文件指定给相应的用户
Alteruser abc2 profile change_pwd;

案例3:限制用户修改密码不能使用以前用过的密码
步骤:
1.sys管理员连接数据库:connsys/system as sysdba;
2.新建profile文件,限制用户修改密码,不能使用用过的密码
Createprofile password_history limit password_life_time 10password_grace_time 2password_reuse_time 2;

3.abc2连接数据库,然后连续两次修改密码:

查询所有的profile文件
select * from dba_profiles;
删除profile文件
dropprofile profile文件名;
drop profilepassword_history;
如果profile文件已经指定给用户了,就需要加上cascade关键字。





