160 likes | 235 Views
第四章:触发器与授权. 触发器和授权. 触发器 授权. 触发器. 触发器的概念 触发器是一条语句,当对数据库作修改时,它自动被系统执行。特殊类型的存储过程。触发器不同于存储过程。触发器主要是通过事件触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。 触发器是与表紧密联系在一起的,可以看作是基本表定义的一部分。触发器是在特定表上进行定义的,该表也称为触发器表。当有针对触发器表的操作时,例如,在表中插入( Insert )、删除( Delete )、修改( Update )数据时,那么触发器就自动触发执行。. 触发器.
E N D
触发器和授权 • 触发器 • 授权
触发器 • 触发器的概念 • 触发器是一条语句,当对数据库作修改时,它自动被系统执行。特殊类型的存储过程。触发器不同于存储过程。触发器主要是通过事件触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。 • 触发器是与表紧密联系在一起的,可以看作是基本表定义的一部分。触发器是在特定表上进行定义的,该表也称为触发器表。当有针对触发器表的操作时,例如,在表中插入(Insert)、删除(Delete)、修改(Update)数据时,那么触发器就自动触发执行。
触发器 • 触发器的类型 • 触发器的类型有三种: • (1)DML触发器。Oracle可以在DML(数据操纵语句)语句进行触发,可以在DML操作前或操作后进行触发,并且可以在每个行或该语句操作上进行触发。 • (2)替代触发器。由于在Oracle中不能直接对有两个以上的表建立的视图进行操作,所以给出了替代触发器。它是Oracle专门为进行视图操作的一种处理方法。 • (3)系统触发器。在Oracle8i时,提供了第三种类型的触发器叫系统触发器。可以在Oracle数据库系统的时间中进行触发,如Oracle数据库的关闭或打开等。
触发器 • 触发器不带参数,不被用户和程序调用,只能由用户对DB中的表进行操作时触发(即:由操作激发)。 • 一个表中最多有三个触发器,即:插入、修改和删除。 • 一旦某操作激活了某个触发器,系统就会将该操作与该操作激活的触发器作为一个事务提交或回退。 • 一个触发器同时含有两张表,即:inserted和deleted。当操作为插入时,则新数据也会写入inserted表中;当操作为删除时,删除数据会保存在deleted表中;而当操作为修改时,会同时用到这两张表,先删后写。
触发器 • 插入表的功能 • 对一个定义了插入类型触发器的表来讲,一旦对该表执行了插入操作,那么对向该表插入的所有行来说都有一个相应的副本存放到插入表中,即插入表就是用来存储向原表插入的内容。 • 删除表的功能 • 对一个定义了删除类型触发器的表来讲,一旦对该表执行了删除操作,则将所有的删除行存放至删除表中。
触发器 • 触发器的创建 • CREATE TRIGGER 触发器名 • ON 表名 • FOR {INSERT|UPDATE|DELETE}[, {INSERT|UPDATE|DELETE}] … • AS • SQL语句 • RETURN • 触发器的删除 • DROP TRIGGER 触发器名
触发器 • 例:假设有部门编制表departments和员工信息表employees,其中有一个列employee-count(部门员工数统计)数据是该部门下的职员人数,当在employees中增加职员记录时,由触发器完成对该列的更新。 • CREATE OR REPLACE TRIGGER updatemp-tgr • AFTER INSERT ON employees • FOR EACH ROW • BEGIN • update departments set employee-count= employee_count+1; • where departments .DEPARTMENT-ID = • employees.DEPARTMENT-ID; • END
触发器 • 触发器还有许多其他功能: • (1)强化约束(Enforce Restriction)。 • (2)跟踪变化(Auditing Changes)。 • (3)级联操作(Cascaded Operation)。 • (4)存储过程的调用(Stored Procedure Invocation)。 • 注意: • 不能对视图和临时表创建触发器; • 如果建立触发器的表被删除,那么其上的触发器将被自动删除。
授权 • 赋予用户在访问数据库上的授权 • Read授权 • Insert授权 • Update授权 • Delete授权 • 修改数据库模式的授权 • Index授权 • Resource授权 • Alternation授权 • Drop授权
授权 • 授权(Authorization)类型 • 角色权限 ── 由DBA授予; • DB对象权限 ── 由DBA或对象创建者授予。 • 角色授/撤权 • 授权:GRANT <角色类型> [{, <角色类型>}] TO <用户> [ IDENTIFIED BY <口令>] • <角色类型>::=Connect|Resource|DBA • 撤权: REVOKE <角色类型> [{, <角色类型>}] FROM <用户>
授权 • 数据库对象授/撤权 • 授权: GRANT <权限> ON <表名> TO <受权者> [{, <受 权者>}] [WITH GRANT OPTION] • <权限>::=ALL PRIVILEGES | <操作> [{, <操作>}] • <操作>::=SELECT | INSERT | DELETE | UPDATE [(<列名表>)] • <列名表>::= <列名> [{, <列名>}] • <受权者>::=PUBLIC | <用户> • 撤权: REVOKE <权限> ON <表名> • FROM <受权者> [{, <受权者>}]
SQL中授权 • 表/视图特权的授予 • 一个SQL特权允许一个被授权者在给定的数据库对象上进行特定的操作。授权操作的数据库对象包括:表/视图、列、域等。授权的操作包括:INSERT、UPDATE、DELETE、SELECT、REFERENCES、TRIGGER、UNDER、USAGE、EXECUTE等。其中INSERT、UPDATE、DELETE、SELECT、REFERENCES、TRIGGER有对表做相应操作的权限,故称为表特权。
SQL中授权 • GRANT {<权限1>,<权限2>,…|ALL} • ON <表名>|<视图名> • TO {<用户名>|PUBLIC} • [WITH GRANT OPTION] • <权限>可以是SELECT、INSERT、UPDATE、DELETE、ALTER、INDEX、ALL,对于视图特权只有SELECT、INSERT、UPDATE和DELETE。 • PUBLIC是一个公共用户。 • 任选项“WITH GRANT OPTION”使得在给用户授予表/视图特权时,同时授予一种特殊的权限,即被授权的用户可以把授予他的特权继续授予其他用户。
SQL中授权 • 授予用户u1account上的select权限 • grant select on account to u1 • 允许U1将该权限授予他人 • grant select on account to u1 • with grant option
SQL中授权 • 表/视图特权的回收 • REVOKE {<权限>|ALL} • ON <表名>|<视图名> • FROM {<用户1>,<用户2>,…|PUBLIC} • [CASCADE|RESTRICT] • 收回U1的权限 • Revoke select on branch from U1