只有当以下条件中的任何一条为真的时候,一个SPL应用程序(包括函数,过程,或者是包)才能够开始执行。

  • 当前调用SPL程序的用户为超级用户。
  • 当前调用SPL程序的用户已经授予了SPL程序的执行权限。
  • 当前调用SPL程序的用户通过成为拥有SPL程序执行权限的组的成员, 继承了相关的权限。
  • EXECUTE权限已经授予了PUBLIC组。

当SPL程序在PolarDB创建时,EXECUTE权限在缺省状态下自动被授予了PUBLIC组, 因此任何用户都可以马上执行该程序。

通过运行REVOKE EXECUTE命令, 可以收回这个缺省的权限。更详细的信息参见REVOKE命令。下面是一个关于这个命令的示例:
REVOKE EXECUTE ON PROCEDURE list_emp FROM PUBLIC;
您可以把SPL程序上的EXECUTE权限明确地授予指定的用户或者组。
GRANT EXECUTE ON PROCEDURE list_emp TO john;

现在,用户john能够执行list_emp程序,但是那些没有符合本节开头所列出来条件的用户不能执行这个程序。

当程序开始执行后试图在任何一种数据库对象上执行下列这些操作时,需要进行安全方面的权限检查。
  • 读或者修改表或者视图的数据。
  • 创建,修改或删除数据库对象,诸如表,视图,索引或者序列等等。
  • 从序列中获取当前或者下一个数值。
  • 调用另外一个程序 (函数,存储过程或包)。

通过对数据库对象上权限上限制,您可以很好的控制上面的这些操作。

需要注意的是一个数据库有可能拥有多个具有相同名称和类型的对象,在数据库中这些对象属于不同的模式。 在这种情况下,哪个对象将会被SPL应用程序引用? 这就是下一节要讨论的内容了。