SQL授权与触发器

2022/5/2 2:12:35

本文主要是介绍SQL授权与触发器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

授权(GRANT)

语句格式: GRANT 权限 ON TABLE/DATABASE 表名/数据库名

 TO 用户1,用户2… /PUBLIC

 [WITH GRANT OPTION];

 PUBLIC:表示将权限授予所有人

 WITH GRANT OPTION:表示获得了这个权限的用户还可以将权限赋给其他用户。

 

对象

对象类型

操作权限

属性

TABLE

SELECT,INSERT,UPDATE,DELETE, ALL PRIVILEGES(4种权限的总和)

视图

TABLE

SELECT,INSERT,UPDATE,DELETE, ALL PRIVILEGES(4种权限的总和

基本表

TABLE

SELECT,INSERT,UPDATE,DELETE,ALTER,INDEX, ALL PRIVILEGES(6种权限的总

数据库

DATABASE

CREATETAB建立表的权限,可由DBA授予普通用户

 

收回权限(REVOKE)

语句格式: REVOKE 权限 ON TABLE/DATABASE 表名/数据库名

 FROM 用户1,用户2… /PUBLIC

 [RESTRICT | CASCADE];

 RESTRICT:表示只收回语句中指定的用户的权限

 CASCADE:表示除了收回指定用户的权限外,还收回该用户赋予的其他用户的权限。

 

例:将用户User1及User2对供应商S、零件P、项目J的所有操作权限收回:

 REVOKE ALL PRIVILEGES ON TABLE S,P,J FROM User1,User2;

 将所有用户对供应商S的所有查询权限收回:

 REVOKE SELECT ON TABLE S FROM PUBLIC;

 将User1用户对供应商S的供应商编号Sno的修改权限收回。

 REVOKE UPDATE(Sno) ON TABLE S FROM User1;

 

触发器概述

• 触发器主要有以下三方面的特点:

(1)当数据库程序员声明的事件发生时,触发器被激活。声明的事件可以是对某个特定关系的插入、删除或更

新。

(2)当触发器被事件激活时,不是立即执行,而是首先由触发器测试触发条件,如果事件不成立,响应该事件

的触发器什么都不做。

(3)如果触发器声明的条件满足,则与该触发器相连的动作由DBMS执行。动作可以阻止事件发生,可以撤销事

件。

• 创建触发器时需指定:

(1)触发器名称

(2)在其上定义触发器的表

(3)触发事件:触发器将何时激发

(3)触发条件:满足什么条件时执行触发动作

(4)触发动作:指明触发器执行时应做的动作 • 触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建触发器。 • 不能在临时表或系统表上创建触发器,但触发器可以引用临时表。

 

触发器

创建触发器

CREATE TRIGGER 触发器名称 [BEFORE | AFTER]

 [DELETE | INSERT | UPDATE OF 列名] //触发事件

 ON 表名

 [REFERENCING <临时视图名>]

 [FOR EACH ROW | FOR EACH STATEMENT]

 [WHEN <触发条件>] //WHEN后面跟触发条件,指明当什么条件满足时,执行下面的触发动作

 BEGIN

 <触发动作> //BEGIN...END 中定义触发动作,即当触发条件满足时,需要数据库做什么

 END [触发器名称]
  • BEFORE/AFTER:指明是在执行触发语句之前激发触发器还是执行触发语句之后激发触发器。
  • DELETE:当一个DELETE语句从表中删除行时激发触发器。
  • INSERT:当一个INSERT语句向表中插入行时激发触发器。
  • UPDATE/UPDATE OF(列名):当UPDATE修改表中的值时,激发触发器,也可加(OF 列名)指定是某一列的值被修改时激发触发器。
  • REFERENCING:触发器运行过程中,系统会生成两个临时视图,分别存放更新前和更新后的值,对于行级触发器,为OLD ROW
  • 和NEW ROW,对于语句级触发器,为OLD TABLE和NEW TABLE。
  •  REFERENCING new row AS nrow / REFERENCING old row AS orow 。
  • FOR EACH ROW:表示为行级触发器,对每一个被影响的元组(即每一行)执行一次触发过程。
  • FOR EACH STATEMENT:表示为语句级触发器,对整个事件只执行一次触发过程,为默认方式。

 

更改和删除触发器

1、更改触发器

 语句格式: ALTER TRIGGER <触发器名> [BEFORE|AFTER]

 DELETE|INSERT|UPDATE OF [列名]

 ON 表名|视图名

 AS

 BEGIN

 要执行的SQL语句

 END

2、删除触发器

语句格式: DROP TRIGGER <触发器名>



这篇关于SQL授权与触发器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程