=========================
系统权限
=========================
指对数据库管理的操作以及对数据对象的操作[创建、删除、修改]
如何查询有哪些系统权限?
select * from system_privilege_map order by name;
创建用户?
create user tangtao identified by tangtao;
授予权限[重要]?
grant create session to tangtao with admin option; --登录权限
grant create table to tangtao with admin option; --创建表权限
grant create view to tangtao with admin option; --创建视图权限
说明:
[with admin option]: 可以让用户tangtao继续把得到的两个权限继续向别的用户转发
回收系统权限[重要]?
回收系统权限是dba完成的
如果其它用户会搜系统权限,要求该用户必须具有响应系统权限及转授系统权限的选项[with admin option]
--系统权限级联回收问题?
system------------->ken--------------->tom[不级联回收]
回收系统权限:
revoke create view from tangtao;
=========================
对象权限
=========================
对数据对象的操作[select, update, delete, insert]
指访问其它方案对象的权利,用户可以直接访问自己方案的对象
但是如果访问别的方案的对象,则必须具有对象的权限
查看所有的对象权限[dba用户可以查看]?
select distinct privilege from dba_tab_privs;
比如smith用户要访问scott.emp表?
grant select on scott.emp to tangtao;
grant insert on scott.emp to tangtao;
grant update on scott.emp to tangtao;
grant delete on scott.emp to tangtao;
或者 一句话搞定---
grant all on scott.emp to tangtao;
授予对象权限[重要]?
grant 对象权限 on 方案.数据对象 to 用户名[,角色] [with grant option];
grant all on 方案.数据对象 to 用户名[,角色] [with grant option];
[with grant option] : 只能授予用户,不能授予角色
授予alter权限?
如果black用户要修改scott.emp表的结构,则必须授予alter对象权限
grant alter on scott.emp to black;
授予execute权限?
如果用户想要执行其它方案的包/过程/函数,则必须有execute权限
授予index权限?
如果用户想要其它方案的表建立索引
让tangtao用户在scott.emp上建立索引。则scott则必须授予tangtao用户index权限
SQL> conn scott/tiger
SQL> grant index on scott.emp to tangtao; --授权
SQL>revoke index on scott.emp from tangtao; --回收
回收对象权限?
--对象权限级联回收问题?
system------------->ken--------------->tom[级联回收]
回收对象权限:
revoke 对象权限 on 方案.数据对象 from 用户名[,角色];
角色:
角色是一组权限的集合,目的是为了简化对权限的管理,从而达到简单对用户的管理
=========================
预定义角色
=========================
connect
resource
dba[dba角色不具备(启动和关闭数据库)]
查看角色?
SQL> conn system/manager;
SQL> select * from dba_roles;
查看角色具有[系统]权限?
select * from role_sys_privs where role='角色名';
select * from role_sys_privs where role='RESOURCE';
查看角色具有[对象]权限?
select * from dba_tab_privs where grantee='角色名';
select * from dba_tab_privs where grantee='RESOURCE';
如何查看某个用户具有什么角色?
select * from dba_role_privs where grantee='用户名';
select * from dba_role_privs where grantee='SCOTT';
授予角色?
grant 角色名 to 用户名;
grant RESOURCE to tangtao;
=========================
自定义角色
=========================
创建角色?--[具有create role权限的用户建立]
如果角色是[公用的角色],可以采用不验证的方式建立角色
create role 角色名 not identified;
[数据库验证]
采用这样的方式时,角色名、口令存放在数据库中
当激活该角色时,必须提供口令,在建立这种角色时,需要为其提供口令
create role 角色名 identified by 口令;
授予角色权限?
grant 权限 to 角色名;
SQL>create role myrole not identified;
SQL> grant create session to myrole;
SQL> grant select on scott.emp to myrole;
SQL> grant insert on scott.emp to myrole;
SQL> grant update on scott.emp to myrole;
或者
grant select,insert,update,delete on scott.emp to myrole;
使用角色?
grant 角色名 to 用户名[with admin option]
SQL> grant myrole to tangtao;
回收角色?
revoke 角色名 from 用户名;
SQL> revoke myrole from tangtao;
删除角色?
drop role 角色名;
SQL> drop role myrole;
=========================
精细访问控制
=========================
是指用户可以使用函数、策略实现更加细微的安全访问控制。
如果使用精细访问控制,则当在客户端发出sql语句(select, insert, update, delete)时
oracle会自动在sql语句后追加谓词(where 子句),并执行新的sql语句
通过这样的控制,可以使得不同的数据库用户在访问相同表时,返回不同的数据信息