如果创建带有 DBA 关键字的 UDR ,则其称为 DBA 特权 UDR 。您需要 DBA 特权来创建或者执行 DBA 特权的 UDR 。
在不具有 DBA 特权的用户中,只有 DBA 授予 Execute 权限的用户才能调用 DBA 特权 UDR.。然而,如果 DBA 将 Execute 特权授予 PUBLIC ,则所有的用户都可以使用 DBA 特权 UDR 。有关 DBA 特权 UDR 的其它信息,请参阅 创建数据库对象的所有权 。
如果您省略 DBA 关键字,则此 UDR 称为所有者特权 UDR 。
当您在兼容 ANSI 的数据库中创建了所有者特权 UDR 时,只有您自己能执行此 UDR。在其它用户可以执行所有者特权 UDR 之前,它的所有者必须将 Execute 特权授权给个别用户或角色或者 PUBLIC 。
如果您在不兼容 ANSI 的数据库中创建了所有者特权 UDR ,则任何人都可以执行此 UDR ,因为缺省情况下 PUBLIC 被授予 Execute 特权。要限制指定用户对所有者特权 UDR 的存取,则所有者必须从 PUBLIC 撤销其在 UDR 上的 Execute 特权,然后将它授权给指定的用户或角色。将 NODEFDAC 环境变量设置成 yes 可以阻止该 UDR 上的权限被缺省授予给 PUBLIC 。如果该环境变量设置成 yes ,则除了此 UDR 的所有者,其它任何人都不能调用此 UDR ,除非所有者将此 UDR的 Execute 特权授权给其他用户。