下列关于AUTHID的说法哪些是正确的?()
A、AUTHID子句是用于指定哪些用户被授权执行一个程序单元
B、从Oracle 11gR1开始,所有的程序单元都必须指明AUTHID属性
C、一个PL/SQL程序的AUTHID属性会影响该程序在运行的时候发出的SQL语句所涉及的名字解析和权限检查
D、AUTHID属性可以在包头(Package Specification)和对象类型的头部(Object Type Specification)指定,但不能够在包体(Package Body)和类型体(Object Type Body)指定
A 答案:C、D。
本题中,对于选项A,AUTHID子句是用于指定一个程序单元是运行于“调用者权限”(AUTHID CURRENT_USER)还是“定义者权限”(AUTHID DEFINER)。所以,选项A错误。
对于选项B,AUTHID子句是可选的,缺省设置为AUTHID DEFINER。所以,选项B错误。
对于选项C,实际上这就是Oracle文档中关于AUTHID的定义。所以,选项C正确。
对于选项D,AUTHID可以在CREATE FUNCTION、CREATE PACKAGE、CREATE PROCEDURE、CREATE TYPE和ALTER TYPE中包含。但不能在CREATE PACKAGE BODY或者CREATE TYPE BODY中包含AUTHID。所以,选项C正确。
所以,本题的答案为C、D。