辽宁本溪卫星地图:Oracle学习笔记(14)权限管理(

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 15:18:06

权限管理

 

1、Oracle两类型的用户权限:
System 使用户在数据库中完成部分行为
Object 使用户接触和操作一个特定的数据对象。只有owner(Object Schema才能授权)

 

2、系统权限(100多种)
其中,create table和create any table 的区别
any关键字指示用户在权限中可以操作任何schema. grant授权,revoke 取消权限
窗口1:
sql>create user testuser1
    identified by kxf_001 default tablespace users
    quota 10m on users;

sql>grant create table to testuser1;  //此权限只能给到自己创建一个表,而不能操作多张表

窗口2:
sql>conn testuser1/kxf_001;  //无法连接到Oracle
窗口1:
sql>grant create session to testuser1; //授权create session
窗口2:
sql>conn testuser1/kxf_001
sql>create table test1(id int) tablespace users; //创建表

sql>create table kong.tt1(id int) tablespace users; //权限不足
窗口1:
sql>grant create any table to testuser1;  //将“可以创建任何表”的权限给testuser1
窗口2:
sql>create table kong.tt1(id int) tablespace users;  //创建成功
窗口1:
sql>revoke create any table from testuser1;   //撤销testuser1的权限create any table

INDEX:CREATE ANY INDEX \ ALTER ANY INDEX \ DROP ANY INDEX
TABLE:CREATE TABLE \ CREATE ANY TABLE\ALTER ANY TABLE\DROP ANY TABLE\ SELECT ANY TABLE\ UPDATE ANY TABLE \ DELETE ANY TABLE
SESSION:CREATE SESSION\ ALTER SESSION\ RESTRICTED SESSION
TABLESPACE:CREATE TABLESPACE\ ALTER TABLESPACE\ DROP TABLESPACE \ UNLIMITED TABLESPACE(无限空间资源的使用)
【注意】没有create index权限。如:

grant system_privs,[....] to [user/role/public],[....] with admin option
其中,with admin option 可以把权限授予第三个人


sql>grant create index to testuser1;  //缺少或无效权限

sql>truncate table kong.sales; 
sql>grant truncate table to testuser1; //授予testuser1truncate table权限。
sql>grant truncate any table to testuser1;

sql>grant drop any table to testuser1;
sql>grant create table,create session,create view to kong,testuser1; //授予多个用户多个权限。

sql>grant create table to public;  //授权create table给系统中所有用户

sql>create role testrole1   //创建角色1
sql>create role testrole2;   //创建角色2
sql>grant create table to testrole2; //为角色2添加create table权限。

sql>create user testuser2 identified by kxf_001;
sql>conn testuser1/xkf_001;
sql>grant create table to testuser2; //权限不足,只允许testuser2创建表
窗口2:
sql>conn sys/admin1 as sysdba
sql>grant create table to testuser1 with admin option; //授权create table给testuser1带上管理权限。
窗口1:
sql>grant create table to testuser2; //授权成功

 

3、系统权限(System Privileges)
SYSDBA\SYSOPER 权限集合(特殊):实现database的管理和操作
SYSOPER:startup、shutdown、alter database open|mount、alter database backup controlfile to(数据库完整修复) 、recover database、alter database archivelog

SYSDBA:sysoper privileges with admin option、create database、alter database begin/end backup、restricted session、recover database until

注意:sysoper不能建立数据库,不能完成数据库的部分修复,没有受限(restricted)模式的权限,不具有备份权限。而sysdba具有sysoper所有的权限,同时带上了admin选项。

sql>grant sysdba to kong;  //为kong用户授予管理员sysdba的权限
sql>select * from v$pwfile_users;  //sysdba有权利查数据字典
sql>grant sysoper to kong with admin option //为kong授予sysoper权限并带上admin选项,其实kong已经是sysdba,而sysdba具有sysoper的所有权限带上了admin选项。

O7_DICTIONARY_ACCESSIBILITY 参数:数据字典表能不能存储或被改变。
sql>grant select any table to testuser1;
sql>select * from sys.aud$;  //查询系统审计表

sql>show parameter O7  //O7_DICTIONARY_ACCESSIBILITY value=false
sql>show user   //testuser1
sql>select * from sys.aud$;  //审计记录表(不能)

sql>alter system set o7_dictionary_accessibility=true ;//设计对任意表操作的用户能不能访问到系统表的资料,一般来说系统默认将这个参数值设置为false,即系统审计记录表不对普通用户开放。
sql>startup force  //强制重启,让数据库打开
窗口2:
sql>conn testuser1/kxf_001; //已经连接
sql>select * from sys.aud$;  //审计记录表(可以访问)

窗口1:
sql>revoke create table,create any table from testuser1;//系统权限未授予testuser1

sql>show user  //"sys"
sql>revoke create table from testuser1;  //撤销create table权限成功
sql>revoke create any table from testuser1; //系统权限create any table未授予testuser1;

sql>grant create session to testuser2;  //授予会话权限给testuser2
sql>alter user testuser2 quota 10m on users; //在表空间users上给testuser2分配10m限额资源。

sql>conn testuser2/kxf_001
sql>create table tt1(id int) tablespace users;  //此时,testuser2仍然还有创建表的权限,在撤销基于admin传递出的权限时,它是不会级联的。

注意:对象权限带上admin option选项授予出去时是会级联的。

 

4、对象权限(Object Privileges)
ALTER(Table\Sequence\Procedure)、DELETE(Table\View)、EXECUTE(Procedure)、INDEX(Table\View)、INSERT(Table\View)、PEFERENCES(Table)、SELECT(Table\View\Sequence)、UPDATE(Table\View)
grant [object_privs(column,...)],[....]on object_name to user/role/public,....with grant option
其中with grant option可以将权限授予第三个人。默认owner可以授权第三个人。

GRANT EXECUTE ON dbms_output TO jeff;  //授予执行某个存储过程的权限
GRANT UPDATE ON emi.customers TO jeff WITH GRANT OPTION;

窗口1:
sql>show user //"SYS"
sql>select * from kong.authors;

窗口2:
sql>conn sys/admin1 as sysdba
sql>set wrap off
sql>set linesize 800
sql>select * from kong.authors;
sql>grant  select,update on kong.authors to testuser1; //默认不可以将权限授予第三个人

sql>conn kong/kxf_001
sql>grant select,update on kong.authors to testuser1;  //授权成功

sql>grant select,update on kong.authors to sys with grant option; //sys也可以享有grant授予权限。

sql>conn sys/admin1 as sysdba
sql>grant select,update on kong.authors to testuser1; //授权成功

sql>conn kong/kxf_001
sql>grant select on authors(au_id,au_lname) to testuser1; //授予testuser1查询authors,缺少无效权限

取消权限:
REVOKE SELECT on emi.orders FROM jeff;
sql>revoke select on authors from testuser1;

注意:with grant option 取消权限应该是级联的。

sql>grant select on authors to testuser1 with grant option

sql>conn testuser1/kxf_001
sql>select * from kong.authors;
sql>grant select on kong.authors to testuser2;  //testuser1也可以将这个权限授出给testuser2

sql>conn testuser2/kxf_001
sql>select * from kong.authors; //testuser2也可以使用这个权限

sql>conn kong/kxf_001
sql>revoke select on authors from testuser1;  //取消testuser1的select权限。

sql>conn kong/kxf_001
sql>revoke select on authors from sys;// 取消sys的select 权限

sql>conn testuser2/kxf_001
sql>select * from kong.authors;  //此时,无法访问testuser2的select 权限。

 

5、获取权限信息:
DBA_SYS_PRIVS dba系统权限
SESSION_PRIVS 会话权限
DBA_TAB_PRIVS
DBA_COL_PRIVS

sql>conn sys/admin1 as sysdba
sql>select * from dba_sys_privs ;//dba授了哪些权限给哪些人

sql>conn testuser2/kxf_001
sql>select * from session_privs; //当前开的session里用户拥有什么权限

sql>conn kong/kxf_001
sql>select * from user_tab_privs; //授予了哪些对象权限给哪些用户

sql>conn sys/admin1 as sysdba
sql>select * from dba_col_privs;  // 授予了哪些栏位权限给哪些用户

 

6、审计Auditing
审计规则:审计用户、语句或对象;语句执行是否成功;
审计策略:默认审计(实例启动或关闭、Administrator权限)、Database审计(由DBA进行enable<初始关闭>,不可以基于column值的记录)、Value-based基于值或应用程序审计:使用触发器。

Database审计(默认关闭):
启动database审计 >设定Audit option选项(表 AUDIT TABLE\触发器 AUDIT create any trigger\select选项 AUDIT SELECT ON emi.orders\进一步审计给予栏位的值则使用DBMS_FGA package) >一旦用户发出相应的command就会生成相关的审计记录,该审计记录可以记录在OS中也可以记录在Database中或默认(audit_trail=none)
audit create table
      select/update/insert[on object]
 by session/by access
whenever successful/not successful //可选,只记录成功或失败的,若不指定,则全部记录

其中:by session 发出相同command,只记录一次
      by access  每发出一次command,记录一次


sql>show parameter audit_trail 跟踪记录 // value=db/os/none
sql>audit select on kong.authors by session; //启动kong.authors表的审计,只审计select动作。
sql>audit create table; //审计create table动作

sql>audit update on kong.authors whenever not successful; //只记录不成功的update审计

sql>desc dbms_fga;

 

a.取消审计:noaudit
sql>noaudit select on kong.authors;

 

b.查看审计选项:
ALL_DEF_AUDIT_OPTS  所有缺省的审计选项
DBA_STMT_AUDIT_OPTS 所有语句的审计选项
DBA_PRIV_AUDIT_OPTS 所有权限的审计选项
DBA_OBJ_AUDIT_OPTS  所有数据对象的审计选项
 
sql>select * from all_def_audit_opts;
sql>select * from dba_stmt_audit_opts;
sql>select * from dba_obj_audit_opts;

 

c.如何获取审计记录:
DBA_AUDIT_TRAIL、DBA_AUDIT_EXISTS、DBA_AUDIT_OBJECT、DBA_AUDIT_SESSION、DBA_AUDIT_STATEMENT

sql>audit select on kong.authors /; 
sql>conn kong/kxf_001
sql>select * from authors;

sql>conn sys/admin1 as sysdba
sql>select * from dba_audit_trail; //对authors的审计操作都记录在该dba_audit_trail中。

sql>select * from dba_audit_object;
sql>select * from dba_audit_session;