触发器和权限管理课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Ø GRANT CREATE USER,ALTER USER,DROP USER TO chenjie WITH ADMIN OPTION;
触发器和权限管理
19
授予权限或角色- 授予对象权限
l Oracle对象权限指用户在指定的表上进行特殊操作的权利。 l 在GRANT关键字之后指定对象权限的名称,然后在ON关键
Ø GRANT SELECT,INSERT(CUSTOMER_ID,CUSTOMER_name), UPDATE(desc) ON CUSTOMER TO chenqian WITH GRANT
OPTION;
l 在授予对象权限时,可以使用一次关键字ALL或ALL PRIVILEGES将某个对象的所有对象权限全部授予指定的用 户。
ELSE DBMS_OUTPUT.PUT_LINE(‘已插入记录');
END IF; END; /
触发器和权限管理
6
l 触发器的类型有:
触发器类型
触发器类型-1
模式(DDL) 触发器
数据库级 触发器
DML 触发器
行级触发器 语句级触发器 INSTEAD OF触发器
触发器和权限管理
7
DDL 触发器
更新
Oracle
表
激保活存更新 触发器
数据库
激活 保存更新
触发器
Oracle 数据库
触发器和权限管理
5
创建触发器
CREATE OR REPLACE TRIGGER aiu_itemfile AFTER INSERT ON itemfile FOR EACH ROW BEGIN
IF (:NEW.qty_hand = 0) THEN DBMS_OUTPUT.PUT_LINE('警告:已插入记录,但数量为零');
Ø 权限的选择可用性,授权给用户的角色可选择地使其 可用或不可用。
Ø 应用可知性,当用户经用户名执行应用时,该数据库 应用可查询字典,将自动地选择使角色可用或不可用。
Ø 应用安全性,角色使用可由口令保护,应用可提供正 确的口令使用角色,
触发器和权限管理
17
创建角色-1
l 使用CREATE ROLE语句可以创建一个新的角色, 执行该语句的用户必须具有CREATE ROLE系统权 限。
Ø 一个角色可授予系统权限或对象权限。
Ø 一个角色可授权给其它角色,但不能循环授权。
Ø 任何角色可授权给任何数据库用户。
Ø 授权给用户的每一角色可以是可用的或者不可用的。
Ø 一个间接授权角色对用户可显式地使其可用或不可用。
l 在一个数据库中,每一个角色名必须唯一。角色名与用户 不同,角色不包含在任何模式中,所以建立角色的用户被 删除时不影响该角色。
SQL> SELECT TRIGGER_TYPE, TRIGGERING_EVENT, WHEN_CLAUSE FROM USER_TRIGGERS WHERE TRIGGER_NAME = 'BIU_EMP_DEPTNO';
触发器和权限管理
14
权限
l 权限是执行一种特殊类型的SQL语句或存 取另一用户的对象的权力。有两类权限: 系统权限和对象权限。
触发器和权限管理
11
触发器类型-6
l 模式触发器
SQL> CREATE TABLE dropped_obj ( obj_name VARCHAR2(30), obj_type VARCHAR2(20), drop_date DATE);
SQL> CREATE OR REPLACE TRIGGER log_drop_obj AFTER DROP ON SCHEMA BEGIN
l 在角色刚刚创建时,它并不具有任何权限,这时的 角色是没有用处的。因此,在创建角色之后,通常 会立即为它授予权限。例如:利用下面的语句创建 了一个名为OPT_ROLE的角色,并且为它授予了一 些对象权限和系统权限:
Ø CREATE ROLE OPT_ROLE; Ø GRANT SELECT ON sal_history TO OPT_ROLE; Ø GRANT INSERT,UPDATE ON mount_entry TO
触发器
l 触发器是当特定事件出现时自动执行的存储 过程
l 特定事件可以是执行更新的DML语句和DDL 语句
l 触发器不能被显式调用 l 触发器的功能:
Ø 自动生成数据 Ø 自定义复杂的安全权限 Ø 提供审计和日志记录 Ø 启用复杂的业务逻辑
触发器和权限管理
1
创建触发器的语法
CREATE [OR REPLACE] TRIGGER trigger_name AFTER | BEFORE | INSTEAD OF [INSERT] [[OR] UPDATE [OF column_list]] [[OR] DELETE] ON table_or_view_name [REFERENCING {OLD [AS] old / NEW [AS] new}] [FOR EACH ROW] [WHEN (condition)] pl/sql_block;
只有在WHEN子句中的条 在如 足更果,新将W为件eH执smE得a行pNltat到r_rB子irigsgyE满a__-句Gslr足ae列中INlc时之触o的块r,d后发条中s才激器件表的激活得创代活触到建码发满器
触发器和权限管理
4
触发器的组成部分-3
ABEFTFEORRE触触发发器器的的工工作作原原理理
触发器和权限管理
2
触发器的组成部分-1
触发器由三部分组成:
l 触发器语句(事件)
Ø 定义激活触发器的 DML 事件和 DDL 事件
l 触发器限制
Ø 执行触发器的条件,该条件必须为真才能激活 触发器
l 触发器操作(主体)
Ø 包含一些 SQL 语句和代码,它们在发出了触 发器语句且触发限制的值为真时运行
字后指定对象名称,最后在TO关键字之后指定接受权限的用 户名,即可将指定对象的对象权限授予指定的用户。
l 使用一条GRANT语句可以同时授予用户多个对象权限,各个 权限名称之间用逗号分隔。
l 有三类对象权限可以授予表或视图中的字段,它们是分别是 INSERT,UPDATE和REFERENCES对象
l 例如:利用下面的语句可以将CUSTOMER表的SELECT和 INSERT,UPDATE对象权限授予用户chenqian:
删除触发器 l SQL> DROP TRIGGER aiu_itemfile;
触发器和权限管理
13
查看有关触发器的信息
l USER_TRIGGERS 数据字典视图包含有关 触发器的信息
SQL> SELECT TRIGGER_NAME FROM USER_TRIGGERS WHERE TABLE_NAME='EMP';
触发器类型-2
在模式中执行 DDL 语句时执行
数据库级触发器
在发生打开、关闭、登录和退出数据库等 系统事件时执行
DML 触发器
在对表或视图执行DML语句时执行
语句级触发器
无论受影响的行数是多少,都只执行一次
行级触发器
INSTEAD OF 触发器
对DML语句修改的每个行执行一次
用于用户不能直接使用 DML 语句修改的
16
利用角色对权限管理的优点
l ORACEL利用角色更容易地进行权限管理。有下 列优点:
Ø 减少权限管理,不要显式地将同一权限组授权给几个 用户,只需将这权限组授给角色,然后将角色授权给 每一用户。
Ø 动态权限管理,如果一组权限需要改变,只需修改角 色的权限,所有授给该角色的全部用户的安全域将自 动地反映对角色所作的修改。
END; /
触发器和权限管理
10
触发器类型-5
l INSTEAD OF 触发器
SQL> CREATE OR REPLACE TRIGGER upd_ord_view INSTEAD OF PDATE order_master SET vencode=:NEW.vencode WHERE orderno = :NEW.orderno; DBMS_OUTPUT.PUT_LINE(‘已激活触发器'); END; /
INSERT INTO dropped_obj VALUES( ORA_DICT_OBJ_NAME,
ORA_DICT_OBJ_TYPE, SYSDATE); END; /
触发器和权限管理
12
启用、禁用和删除触发器 l 启用和禁用触发器
SQL> ALTER TRIGGER aiu_item; SQL> ALTER TRIGGER aiu_item;
l 系统权限:是执行一处特殊动作或者在对 象类型上执行一种特殊动作的权利。
Ø 系统权限可授权给用户或角色,一般,系统权 限只授予管理人员和应用开发人员,终端用户 不需要这些相关功能。
l 对象权限:在指定的表、视图、序列、过 程、函数或包上执行特殊动作的权利。
触发器和权限管理
15
角色
l 为相关权限的命名组,可授权给用户和角色。数据库角色 包含下列功能:
触发器和权限管理
3
触发器的组成部分-2
触发器语限操句制作
SSQQLL>> SQL>
C…A……FWDS…BEsDROFaENEHalBTEGCDR_lE_EMAdL;INdENiTRAfSifAfER(f_UNN:C=OEOPUEH:UNRDMWRTEABR.POeWTEEUmEW.RPeTpO;mL.sPAFapUCls>eTaEOm_l-LTLp:ODIsRNaL.IeEGlDmO(G.‘e工pNEms资Rsapals)差tlraaiglr额;y__s:rae’lcosradls_diff);
l 建立角色的目的
Ø 为数据库应用管理权限和为用户组管理权限。相对应的 角色称为应用角色和用户角色。
ü 应用角色是授予的运行数据库应用所需的全部权限。
ü 用户角色是为具有公开权限需求的一组数据库用户而建立的。用户权
限授管权理给是相受应应的用 用角户色。或权限授权给用触户发角器和色权所限管控理制,然后将用户角色
视图
触发器和权限管理
8
触发器类型-3
l 行级触发器
SQL> CREATE TABLE TEST_TRG
(ID NUMBER, NAME VARCHAR2(20));
SQL> CREATE SEQUENCE SEQ_TEST;
SQL> CREATE OR REPLACE TRIGGER BI_TEST_TRG
BEFORE INSERT OR UPDATE OF ID
ON TEST_TRG
FOR EACH ROW
BEGIN
IF INSERTING THEN
SELECT SEQ_TEST.NEXTVAL INTO :NEW.ID FROM DUAL;
ELSE
RAISE_APPLICATION_ERROR(-20020, '不允许更新ID值!');
触发器和权限管理
20
授予权限或角色- 授予角色
l 在GRANT关键字之后指定角色的名称,然后在 TO关键字之后指定用户名,即可将角色授予指定 的用户。Oracle数据库系统预先定义了 CONNECT、RESOURCE、DBA、 EXP_FULL_DATABASE、 IMP_FULL_DATABASE五个角色。CONNECT具 有创建表、视图、序列等权限;RESOURCE具 有创建过程、触发器、表、序列等权限、DBA具 有全部系统权限;EXP_FULL_DATABASE、 IMP_FULL_DATABASE具有卸出与装入数据库的 权限。
OPT_ROLE; Ø GRANT CREATE VIEW TO OPT_ROLE;
触发器和权限管理
18
授予权限或角色- 授予系统权限
l 在GRANT关键字之后指定系统权限的名称, 然后在TO关键字之后指定接受权限的用户 名,即可将系统权限授予指定的用户。
l 例如:利用下面的语句可以相关权限授予 用户chenjie:
END IF;
END;
/
触发器和权限管理
9
触发器类型-4
l 语句级触发器
SQL> CREATE OR REPLACE TRIGGER trgdemo AFTER INSERT OR UPDATE OR DELETE ON order_master
BEGIN IF UPDATING THEN DBMS_OUTPUT.PUT_LINE(‘已更新 ORDER_MASTER 中的数据'); ELSIF DELETING THEN DBMS_OUTPUT.PUT_LINE(‘已删除 ORDER_MASTER 中的数据'); ELSIF INSERTING THEN DBMS_OUTPUT.PUT_LINE(‘已在 ORDER_MASTER 中插入数据'); END IF;
触发器和权限管理
19
授予权限或角色- 授予对象权限
l Oracle对象权限指用户在指定的表上进行特殊操作的权利。 l 在GRANT关键字之后指定对象权限的名称,然后在ON关键
Ø GRANT SELECT,INSERT(CUSTOMER_ID,CUSTOMER_name), UPDATE(desc) ON CUSTOMER TO chenqian WITH GRANT
OPTION;
l 在授予对象权限时,可以使用一次关键字ALL或ALL PRIVILEGES将某个对象的所有对象权限全部授予指定的用 户。
ELSE DBMS_OUTPUT.PUT_LINE(‘已插入记录');
END IF; END; /
触发器和权限管理
6
l 触发器的类型有:
触发器类型
触发器类型-1
模式(DDL) 触发器
数据库级 触发器
DML 触发器
行级触发器 语句级触发器 INSTEAD OF触发器
触发器和权限管理
7
DDL 触发器
更新
Oracle
表
激保活存更新 触发器
数据库
激活 保存更新
触发器
Oracle 数据库
触发器和权限管理
5
创建触发器
CREATE OR REPLACE TRIGGER aiu_itemfile AFTER INSERT ON itemfile FOR EACH ROW BEGIN
IF (:NEW.qty_hand = 0) THEN DBMS_OUTPUT.PUT_LINE('警告:已插入记录,但数量为零');
Ø 权限的选择可用性,授权给用户的角色可选择地使其 可用或不可用。
Ø 应用可知性,当用户经用户名执行应用时,该数据库 应用可查询字典,将自动地选择使角色可用或不可用。
Ø 应用安全性,角色使用可由口令保护,应用可提供正 确的口令使用角色,
触发器和权限管理
17
创建角色-1
l 使用CREATE ROLE语句可以创建一个新的角色, 执行该语句的用户必须具有CREATE ROLE系统权 限。
Ø 一个角色可授予系统权限或对象权限。
Ø 一个角色可授权给其它角色,但不能循环授权。
Ø 任何角色可授权给任何数据库用户。
Ø 授权给用户的每一角色可以是可用的或者不可用的。
Ø 一个间接授权角色对用户可显式地使其可用或不可用。
l 在一个数据库中,每一个角色名必须唯一。角色名与用户 不同,角色不包含在任何模式中,所以建立角色的用户被 删除时不影响该角色。
SQL> SELECT TRIGGER_TYPE, TRIGGERING_EVENT, WHEN_CLAUSE FROM USER_TRIGGERS WHERE TRIGGER_NAME = 'BIU_EMP_DEPTNO';
触发器和权限管理
14
权限
l 权限是执行一种特殊类型的SQL语句或存 取另一用户的对象的权力。有两类权限: 系统权限和对象权限。
触发器和权限管理
11
触发器类型-6
l 模式触发器
SQL> CREATE TABLE dropped_obj ( obj_name VARCHAR2(30), obj_type VARCHAR2(20), drop_date DATE);
SQL> CREATE OR REPLACE TRIGGER log_drop_obj AFTER DROP ON SCHEMA BEGIN
l 在角色刚刚创建时,它并不具有任何权限,这时的 角色是没有用处的。因此,在创建角色之后,通常 会立即为它授予权限。例如:利用下面的语句创建 了一个名为OPT_ROLE的角色,并且为它授予了一 些对象权限和系统权限:
Ø CREATE ROLE OPT_ROLE; Ø GRANT SELECT ON sal_history TO OPT_ROLE; Ø GRANT INSERT,UPDATE ON mount_entry TO
触发器
l 触发器是当特定事件出现时自动执行的存储 过程
l 特定事件可以是执行更新的DML语句和DDL 语句
l 触发器不能被显式调用 l 触发器的功能:
Ø 自动生成数据 Ø 自定义复杂的安全权限 Ø 提供审计和日志记录 Ø 启用复杂的业务逻辑
触发器和权限管理
1
创建触发器的语法
CREATE [OR REPLACE] TRIGGER trigger_name AFTER | BEFORE | INSTEAD OF [INSERT] [[OR] UPDATE [OF column_list]] [[OR] DELETE] ON table_or_view_name [REFERENCING {OLD [AS] old / NEW [AS] new}] [FOR EACH ROW] [WHEN (condition)] pl/sql_block;
只有在WHEN子句中的条 在如 足更果,新将W为件eH执smE得a行pNltat到r_rB子irigsgyE满a__-句Gslr足ae列中INlc时之触o的块r,d后发条中s才激器件表的激活得创代活触到建码发满器
触发器和权限管理
4
触发器的组成部分-3
ABEFTFEORRE触触发发器器的的工工作作原原理理
触发器和权限管理
2
触发器的组成部分-1
触发器由三部分组成:
l 触发器语句(事件)
Ø 定义激活触发器的 DML 事件和 DDL 事件
l 触发器限制
Ø 执行触发器的条件,该条件必须为真才能激活 触发器
l 触发器操作(主体)
Ø 包含一些 SQL 语句和代码,它们在发出了触 发器语句且触发限制的值为真时运行
字后指定对象名称,最后在TO关键字之后指定接受权限的用 户名,即可将指定对象的对象权限授予指定的用户。
l 使用一条GRANT语句可以同时授予用户多个对象权限,各个 权限名称之间用逗号分隔。
l 有三类对象权限可以授予表或视图中的字段,它们是分别是 INSERT,UPDATE和REFERENCES对象
l 例如:利用下面的语句可以将CUSTOMER表的SELECT和 INSERT,UPDATE对象权限授予用户chenqian:
删除触发器 l SQL> DROP TRIGGER aiu_itemfile;
触发器和权限管理
13
查看有关触发器的信息
l USER_TRIGGERS 数据字典视图包含有关 触发器的信息
SQL> SELECT TRIGGER_NAME FROM USER_TRIGGERS WHERE TABLE_NAME='EMP';
触发器类型-2
在模式中执行 DDL 语句时执行
数据库级触发器
在发生打开、关闭、登录和退出数据库等 系统事件时执行
DML 触发器
在对表或视图执行DML语句时执行
语句级触发器
无论受影响的行数是多少,都只执行一次
行级触发器
INSTEAD OF 触发器
对DML语句修改的每个行执行一次
用于用户不能直接使用 DML 语句修改的
16
利用角色对权限管理的优点
l ORACEL利用角色更容易地进行权限管理。有下 列优点:
Ø 减少权限管理,不要显式地将同一权限组授权给几个 用户,只需将这权限组授给角色,然后将角色授权给 每一用户。
Ø 动态权限管理,如果一组权限需要改变,只需修改角 色的权限,所有授给该角色的全部用户的安全域将自 动地反映对角色所作的修改。
END; /
触发器和权限管理
10
触发器类型-5
l INSTEAD OF 触发器
SQL> CREATE OR REPLACE TRIGGER upd_ord_view INSTEAD OF PDATE order_master SET vencode=:NEW.vencode WHERE orderno = :NEW.orderno; DBMS_OUTPUT.PUT_LINE(‘已激活触发器'); END; /
INSERT INTO dropped_obj VALUES( ORA_DICT_OBJ_NAME,
ORA_DICT_OBJ_TYPE, SYSDATE); END; /
触发器和权限管理
12
启用、禁用和删除触发器 l 启用和禁用触发器
SQL> ALTER TRIGGER aiu_item; SQL> ALTER TRIGGER aiu_item;
l 系统权限:是执行一处特殊动作或者在对 象类型上执行一种特殊动作的权利。
Ø 系统权限可授权给用户或角色,一般,系统权 限只授予管理人员和应用开发人员,终端用户 不需要这些相关功能。
l 对象权限:在指定的表、视图、序列、过 程、函数或包上执行特殊动作的权利。
触发器和权限管理
15
角色
l 为相关权限的命名组,可授权给用户和角色。数据库角色 包含下列功能:
触发器和权限管理
3
触发器的组成部分-2
触发器语限操句制作
SSQQLL>> SQL>
C…A……FWDS…BEsDROFaENEHalBTEGCDR_lE_EMAdL;INdENiTRAfSifAfER(f_UNN:C=OEOPUEH:UNRDMWRTEABR.POeWTEEUmEW.RPeTpO;mL.sPAFapUCls>eTaEOm_l-LTLp:ODIsRNaL.IeEGlDmO(G.‘e工pNEms资Rsapals)差tlraaiglr额;y__s:rae’lcosradls_diff);
l 建立角色的目的
Ø 为数据库应用管理权限和为用户组管理权限。相对应的 角色称为应用角色和用户角色。
ü 应用角色是授予的运行数据库应用所需的全部权限。
ü 用户角色是为具有公开权限需求的一组数据库用户而建立的。用户权
限授管权理给是相受应应的用 用角户色。或权限授权给用触户发角器和色权所限管控理制,然后将用户角色
视图
触发器和权限管理
8
触发器类型-3
l 行级触发器
SQL> CREATE TABLE TEST_TRG
(ID NUMBER, NAME VARCHAR2(20));
SQL> CREATE SEQUENCE SEQ_TEST;
SQL> CREATE OR REPLACE TRIGGER BI_TEST_TRG
BEFORE INSERT OR UPDATE OF ID
ON TEST_TRG
FOR EACH ROW
BEGIN
IF INSERTING THEN
SELECT SEQ_TEST.NEXTVAL INTO :NEW.ID FROM DUAL;
ELSE
RAISE_APPLICATION_ERROR(-20020, '不允许更新ID值!');
触发器和权限管理
20
授予权限或角色- 授予角色
l 在GRANT关键字之后指定角色的名称,然后在 TO关键字之后指定用户名,即可将角色授予指定 的用户。Oracle数据库系统预先定义了 CONNECT、RESOURCE、DBA、 EXP_FULL_DATABASE、 IMP_FULL_DATABASE五个角色。CONNECT具 有创建表、视图、序列等权限;RESOURCE具 有创建过程、触发器、表、序列等权限、DBA具 有全部系统权限;EXP_FULL_DATABASE、 IMP_FULL_DATABASE具有卸出与装入数据库的 权限。
OPT_ROLE; Ø GRANT CREATE VIEW TO OPT_ROLE;
触发器和权限管理
18
授予权限或角色- 授予系统权限
l 在GRANT关键字之后指定系统权限的名称, 然后在TO关键字之后指定接受权限的用户 名,即可将系统权限授予指定的用户。
l 例如:利用下面的语句可以相关权限授予 用户chenjie:
END IF;
END;
/
触发器和权限管理
9
触发器类型-4
l 语句级触发器
SQL> CREATE OR REPLACE TRIGGER trgdemo AFTER INSERT OR UPDATE OR DELETE ON order_master
BEGIN IF UPDATING THEN DBMS_OUTPUT.PUT_LINE(‘已更新 ORDER_MASTER 中的数据'); ELSIF DELETING THEN DBMS_OUTPUT.PUT_LINE(‘已删除 ORDER_MASTER 中的数据'); ELSIF INSERTING THEN DBMS_OUTPUT.PUT_LINE(‘已在 ORDER_MASTER 中插入数据'); END IF;