如果您不是此触发器的所有者,但是触发器所有者的访问特权包含 WITH GRANT OPTION ,则除了您子句对每个 SQL 语句的特权外还继承所有者(具有授权选项)的特权。如果触发器操作是 UDR ,则您需要 UDR 上的 Execute 特权,或者触发器所有者必须具有授权选项的 Execute 特权。
当使用 DBA 关键字注册 UDR ,且您被授予了 UDR 上的 Execute 特权时,数据库服务器自动为您授予临时 DBA 特权,这些特权仅当您执行 UDR 时才可用。
如果创建没有 DBA 关键字的 UDR,但是 UDR 的所有者对于基础数据库对象上的必要特权具有 WITH GRANT OPTION 关键字,当您被授予 UDR 的 Execute 特权时,您会继承这些特权。
对于没有 DBA 特权的 UDR ,UDR 引用的所有非限定数据库对象都被 UDR 所有者的名称隐式限定。
如果 UDR 所有者没有 WITH GRANT OPTION 特权,则当 UDR 执行您在基础数据库对象上具有原始特权。有关 SPL 例程上的更多信息,请参阅 GBase 8s SQL 教程指南 。
不具有 INSTEAD OF 触发器的视图只有过Select (具有授权选项)特权。但是,如果在它上面创建 INSTEAD OF 触发器,则在触发器创建期间该视图具有 Insert (具有授权选项)特权。视图所有者现在只能为其它人授予 Select 和 Insert 特权。这对触发操作是独立的。不必获取过程或函数上的 Execute(具有授权选项)特权。缺省情况限,在操作列表中的每个 UDR 上授予 Execute(具有授权选项)特权。
您可以使用具有触发器的角色。与角色相关的语句(CREATE ROLE 、DROP ROLE 、GRANT 、REVOKE 和 SET ROLE)和 SET SESSION AUTHORIZATION 语句在触发操作调用的 UDR 中有效。当执行触发器时,用户通过启用角色或通过 SET SESSION AUTHORIZATION 语句已经获取的特权不会被放弃。
在复杂的视图(具有来自多个表的列的视图)上,只有所有者或 DBA 可以创建 INSTEAD OF 触发器。当创建触发器时,所有者接收 Select 特权。只有获取必需的 Execute 特权后,视图所有者才能为其它用户授予特权。当删除复杂视图上的触发器时,所有这些特权都被撤销。