数据库服务器检查是否存在任何被引用的对象,并验证调用该例程的用户是否拥有访问被引用的对象的必要权限。
由例程引用的对象可包括:
• 表和列
• 序列对象
• 用户定义的数据类型
• 由该例程执行的其他例程
当例程运行时,定义有效的权限为下列的联合:
• 运行该例程的用户的权限,
• 带有 GRANT 选项的所有者的权限。
在缺省情况下,数据库管理员拥有数据库中带有 GRANT 选项的所有权限。因此,执行由 数据库管理员拥有的例程的用户可从给定的数据库中所有表进行选择。
GRANT EXECUTE ON 语句提供给被授予者任何表级别权限,授予者从包含 WITH GRANT 关键字的 GRANT 语句收到这些权限。
该例程的所有者,不是运行该例程的用户,拥有在执行该例程过程中创建的未限定的对象。 例如,假设用户 howie 注册创建两个表的 SPL 例程,使用下列 SPL 例程:
用户 julia 运行该例程,创建表 newcatalog。由于没有所有者名称来限定表名称 newcatalog, 因此,例程所有者(howie)拥有newcatalog。相比之下,限定的名称 dawn.maillist 标识 dawn 作 为 maillist 的所有者。