DCL数据库的控制语言
主要实现用户权限的控制
要实现用户的管理操作,必须要提供管理员权限(既用sys/system来操作)
1、首先用管理员创建一个用户dog/wangwang
create user dog identified by wangwang;
然后创建完成的时候,用户还不能登录,因为创建缺少session 的权限
2、为用户授予创建session 的权限
grant create session to dog;
3、如果我们要创建表,还 需要创建表的权限
grant create table to dog;
但是我们在创建用户的时候,一个一个的分配权限太麻烦了,在我们oracle中,提供了两个角色(connect,resource),这两个角色就相当于一个权限包,里面包含了我们所需要的一些权限,我们只要将这个角色给用户,用户就有了角色里面相应的权限
给用户分配角色:
grant connect,resource to dog;
权限分配之后,一定要重新登录用户;
那么如何查看这个角色内有多少系统/对象权限呢?
这就需要通过查看数据字典来查看:
--该角色的系统权限
select* from dba_sys_privs where grantee = 'dba'
--该角色的对象权限
select * from dba_tab_privs where grantee = 'dba'
--查询某个用户具有多少角色
select* from dba_role_privs where grantee = '用户名';
一旦有的用户,我们可能就会遇到忘记密码这种尴尬问题,下面用管理员修改密码等一系列操作;
修改用户密码:
alter user dog identified by miaomiao;
让密码失效:登录之后需要立即修改密码:
alter user dog password expire;
锁定用户:
alter user dog account lock;
解锁用户:
alter user dog account unlock;
指定用户输入密码错误的次数,并指定超过次数之后的锁定时间:
--创建profile 文件
create profile lock_account limit failed_login_attempts 3 password_lock_time 2
--最多可以输入3次,超过后用户将被锁定2天
-- lock_account: profile文件名
alter user scott profile lock_account
让用户定期修改密码,若到期后不修改,则在宽限期后锁定用户:
--创建profile文件
create profile myprofile limit password_life_time 10 password_grace_time 2;
--10天后修改密码,宽限期为2天
alter user scott profile myfrofile;
删除profile文件:
drop profile myprofile [cascade]
对象权限:
两个普通用户之间不能互相访问资源,但是管理员可以访问;但是我们如果想让一个用户访问到另一个用户的资源该怎么办?
这就要在管理员界面将访问另一个用户的权限赋予给他:
实际上访问一个用户,用到的一共就四个权限:insert update select delete
我们一般只给一个用户查看(select) 的权限:
grant select on scott.emp to tog;(将scott的emp表的查看权限赋予给dog)
回收权限:
revoke connect,resource from dog;
revoke create session,create table from dog;
删除用户;
drop user 用户 cascade
假如,用户A创建视图a需要访问用户B的数据b,这个时候,就需要把B的查看b表权限赋给A,但是,如果用户C想要查看用户A的视图a,就需要把A的查看视图a的权限赋给C,但是这个时候,会提示ora-01720 授权选项对于‘b’不存在
,这是因为,视图a中的数据中有用户B中b表的数据,而C是没有权限查看的,这个时候,需要在把B的查看b表的权限语句后面加上 with grant option,这样,就可以把A的查看视图a的权限赋给C了。
grant select on a to C with grant option;
权限分为系统权限和对象权限两种:
系统权限:create table ,create session…
对象权限:insert ,select,update,delete
而因为我们在使用过程中一个个的分配权限太麻烦,又定义了一个角色权限:他属于一个权限包,里面有一揽子系统或者对象权限;