本文介绍EXECUTE特权。

SPL 程序(函数、存储过程或包)仅在满足以下任何条件时才开始执行:

  • 已向当前用户授予对 SPL 程序的 EXECUTE 特权。
  • 由于是对 SPL 程序具有 EXECUTE 特权的组的成员,当前用户继承此类特权。
  • 已向 PUBLIC 组授予 EXECUTE 特权。

PolarDB PostgreSQL版(兼容Oracle)中创建 SPL 程序时,默认情况下会自动将 EXECUTE 特权授予 PUBLIC 组,因此,任何用户都可以立即执行该程序。

可以使用 REVOKEEXECUTE 命令删除此默认特权。下面是一个示例:

REVOKE EXECUTE ON PROCEDURE list_emp FROM PUBLIC;

然后可以将对程序的显式 EXECUTE 特权授予各个用户或组。

GRANT EXECUTE ON PROCEDURE list_emp TO john;

现在,用户 john 可以执行 list_emp 程序;不满足本节开头列出的任何条件的其他用户无法执行。

在程序开始执行后,安全性的下一个方面是如果程序尝试对任何数据库对象执行操作,会进行哪些特权检查,这些操作包括:

  • 读取或修改表或视图数据。
  • 创建、修改或删除数据库对象,如表、视图、索引或序列。
  • 从序列中获取当前值或下一个值。
  • 调用另一个程序(函数、存储过程或包)。

数据库对象上允许或不允许用户执行的特权可以保护每个此类操作。

说明 数据库可能具有多个同名的相同类型的对象,但每个此类对象属于数据库中的不同 schema。这种情况下SPL 程序引用哪个对象,请参见数据库对象名称解析