如果您用 DBA 关键字创建 UDR ,则它将被称为 DBA 特权 UDR。您需要 DBA 特权创建 DBA 特权 UDR 。
在不拥有 DBA 特权的用户中,只有 DBA 授予 Execute 特权的用户才能调用 DBA 特权 UDR 。然而,如果 DBA 授予 PUBLIC Execute 特权,那么所有的用户都可以使用 DBA 特权 UDR 。有关 DBA 特权 UDR 的其它信息,请参阅创建数据库对象的所有权。
如果您省略 DBA 关键字,则 UDR 将被称为拥有者特权的 UDR 。
当您在兼容 ANSI 的数据库中创建拥有者特权 UDR 时,只有您自己能执行该 UDR 。它的拥有者必须将 Execute 权限授予个别用户或角色或 PUBLIC 后,其它用户才能执行拥有者特权 UDR。
如果您在不兼容 ANSI 的数据库中创建拥有者特权 UDR ,则任何人都可以执行该 UDR,因为缺省地将 Execute 权限授予 PUBLIC 。要让特定用户才能存取拥有者特权 UDR ,则所有者必须撤销 PUBLIC 的对此 UDR Execute 权限,然后将该权限授予指定的用户或角色。将 NODEFDAC 环境变量设置为 yes 可以防止当以 Onwer 方式创建 UDR 后缺省地将 URD 的权限授予 PUBLIC。如果该环境变量设置成 yes ,除非,所有者将该 UDR 的 Execute 权限授予其它用户,否则除了该 UDR 所有者其它用户都不能调用此 UDR。
如果外部 C 或 Java™ 语言函数有否定函数,则必须授予对该外部函数及其否定函数的 Execute 权限,然后用户才能执行外部函数。