控制用户访问
在多用户环境中,要维护数据库访问和使用的安全性。通过Oracle服务器数据库安全性,可以执行以下任务:
1.控制数据库访问
2.授予对数据库中特定对象的访问权限
3.通过Oracle数据字典确认给定的和接收的权限
4.为数据库对象创建同义词
数据库的安全性可以分为以下两类:系统安全性和数据安全性。系统安全性包括在系统级别上对数据库进行的访问和使用,例如用户名和口令、分配给用户的磁盘空间和用户可以执行的系统操作。数据库安全性包括对数据库对象的访问和使用以及用户可以对数据库对象执行的操作。
权限
系统权限:获得访问数据库的权限(可用的系统权限超过100个)
1. 常见的DBA权限:
create user:被授予者可以创建其他Oracle用户
drop user:被授予者可以删除另一位用户
drop any table:被授予者可以从任何方案中删除表
backup any table:被授予者可以用导出实用程序备份任何方案的任何表
select any table:被授予者可以查询任何方案中的表、视图或快照
create any table:被授予者可以在任何方案中创建表
2. 常见的用户权限:
create session:连接到数据库
create table:在用户方案中创建表
create sequence:在用户方案中创建序列
create view:在用户方案中创建视图
create procedure: 在用户方案中创建存储过程、函数或程序包
E.G
(1)首先创建用户
create user scott identified by tiger
(2)然后赋予其系统权限
grant create session,create table,create sequence,create view to scott;
(3)回收权限(建表,角色等)
revoke resource from app;
对象权限:处理数据库对象的内容
对象权限是能够对特定表、视图、序列或过程执行特殊操作的权限或权力。
对象权限 表 视图 序列 过程
ALTER Y Y
DELETE Y Y
EXECUTE Y
INDEX Y
INSERT Y Y
REFERENCES Y Y
SELECT Y Y Y
UPDATE Y Y
赋予对象权限
E.G
(1)授予对EMPLOYEES表的查询权限
grant select
on employees
to sue,rich;
(2)将更新特定列的权限授予用户和角色
grant update(department_name,location_id)
on departments
to scott,manager;
(3)允许系统上所有的用户查询Alice的departments表中的数据
grant select
on alice.departments
to public;
撤销对象权限:
(1)撤销用户scott对departments表的select和insert权限
revoke select,insert
on department
from scott;
注:授予权限使用with grant option关键字时,给用户特权以传递权限, 而当回收权限时,通过with grant option 子句授予其他用户的权限也会被撤销。
确认授予的权限(查看数据字典视图)
ROLE_SYS_PRIVS:授予角色的系统权限
ROLE_TAB_PRIVS:授予角色的表权限
USER_ROLE_PRIVS:用户可以访问的角色
USER_TAB_PRIVS_MADE:授予的对用户对象的对象权限
USER_TAB_PRIVS_RECD:授予用户的对象权限
USER_COL_PRIVS_MADE:授予的对用户对象的列的对象权限
USER_COL_PRIVS_RECD:授予用户的对特定列的对象权限
USER_SYS_PRIVS:列出授予用户的系统权限
角色
角色是可以授予用户的相关权限的指定组。此方法使得撤销和维护权限变得更容易。
一个用户可以访问几个角色,而同一角色也可以分配给几个用户。角色通常是为数据库应用程序创建的。
E.G
(1).创建角色
create role manager;
(2)将权限授予角色
grant create table,create view to manager;
(3)将觉得授予用户
grant manager to dehaan,kochar;
(4)删除角色
drop role manager;
注:几个常用的权限或角色查询语句
(1)查看谁有sysdba权限
select * from v$pwfile_users;
(2)查看当前用户有什么权限
select * from sessin_privs;
(3)查看用户拥有哪些角色
select * from user_role_privs;