一、需要的权限
SQL> grant CAPTURE_ADMIN to hr;
Grant succeeded.
二、管理权限分析的步骤
- 创建/定义权限分析策略。
- 启用策略。这将开始记录特权使用情况。
- 禁用策略。停止捕获特权使用。
- 生成权限分析结果。将结果写入数据字典视图。
- 分析结果以确定要撤销的候选权限。撤销之前审核候选人特权的使用一段时间
,以确保该帐户不会不经常合法地使用该特权。
三、特权分析的类型
- 基于角色的权限使用捕获。捕获启用角色的会话的权限。
- 基于上下文的权限使用捕获。捕获具有特定指定条件的会话的权限。
- 基于角色和上下文的权限使用捕获。这具有基于角色和基于上下文的权限使用捕获的功能。
- 数据库范围的权限使用捕获。捕获整个数据库中使用的所有权限,SYS 的权限除外。
四、DBMS_PRIVILEGE_CAPTURE过程
1、分析类型
G_DATABASE 1 NUMBER 分析所有权限使用,但SYS用户使用的权限除外。
G_ROLE 2 NUMBER 分析指定角色的权限使用
G_CONTEXT 3 NUMBER condition为true时,权限使用.
G_ROLE_AND_CONTEXT 4 NUMBER condition为true时,分析指定角色权限使用
2、子程序
CREATE_CAPTURE 创建策略
DELETE_RUN 删除记录过程
DISABLE_CAPTURE 停止策略
DROP_CAPTURE 删除策略
ENABLE_CAPTURE 启用记录过程
GENERATE_RESULT 填充数据字典
四、语法
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE (
name IN VARCHAR2, --策略名
description IN VARCHAR2 DEFAULT NULL, --描述
type IN NUMBER DEFAULT G_DATABASE, --类型
roles IN ROLE_NAME_LIST DEFAULT ROLE_NAME_LIST(), --分析什么
condition IN VARCHAR2 DEFAULT NULL);--当type为G_CONTEXT或G_ROLE_AND_CONTEXT时填,必须是SYS_CONTEXT函数
DBMS_PRIVILEGE_CAPTURE.DELETE_RUN (
name IN VARCHAR2, --策略名
run_name IN VARCHAR2);--运行的run_name
DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE (
name IN VARCHAR2);
DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE (
name IN VARCHAR2);
DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE (
name IN VARCHAR2,
run_name IN VARCHAR2 DEFAULT NULL);
DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT (
name IN VARCHAR2,
run_name IN VARCHAR2 DEFAULT NULL,
DEPENDENCY IN BOOLEAN DEFAULT NULL);
五、案例
SQL> BEGIN
2 DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
3 name => 'all_priv_analysis_pol',
4 description => 'database-wide policy to analyze all privileges',
5 type => DBMS_PRIVILEGE_CAPTURE.G_DATABASE);
6 END;
7 /
PL/SQL procedure successfully completed.
SQL> BEGIN
2 DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE (
3 name => 'all_priv_analysis_pol',
4 run_name => 'all_priv_analysis_pol_run');
5 END;
6 /
PL/SQL procedure successfully completed.
SQL> BEGIN
2 DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE (
3 name =>'all_priv_analysis_pol');
4 END;
5 /
PL/SQL procedure successfully completed.
SQL> BEGIN
2 DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT (
3 name => 'all_priv_analysis_pol',
4 run_name => 'all_priv_analysis_pol_run');
5 END;
6 /
PL/SQL procedure successfully completed.
SQL> SELECT SYS_PRIV, OBJECT_OWNER, OBJECT_NAME, RUN_NAME FROM DBA_USED_PRIVS where username='HR';
SYS_PRIV OBJECT_OWN OBJECT_NAME RUN_NAME
------------------------------ ---------- -------------------------------------------------- ------------------------------
SYS DBA_OBJECTS ALL_PRIV_ANALYSIS_POL_RUN
UNLIMITED TABLESPACE ALL_PRIV_ANALYSIS_POL_RUN
CREATE TABLE ALL_PRIV_ANALYSIS_POL_RUN
SQL> BEGIN
2 DBMS_PRIVILEGE_CAPTURE.drop_capture (
3 name => 'all_priv_analysis_pol');
4 END;
5 /
PL/SQL procedure successfully completed.
--删除策略前先查询,否则会连数据一起删除
SQL> SELECT SYS_PRIV, OBJECT_OWNER, OBJECT_NAME, RUN_NAME FROM DBA_USED_PRIVS where username='HR';
no rows selected
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。