您可对不是内建数据类型的数据类型指定两种权限:
• 对用户定义的数据类型的 Usage 权限
• 对命名的 ROW 类型的 Under 权限
要看到在用户定义的数据类型上存在什么权限,请在 sysxtdtypes 系统目录表检查每一 UDT 的
owner,并在 sysxtdtypeauth 系统目录表检查在 UDT 上持有权限的任何其他用户或角色。要获取
关于系统目录表的信息,然而,对于所有内建数据类型,PUBLIC 自动地获得这些访问权限且不可取消。
USAGE 权限
您拥有您创建的任何用户定义的数据类型(UDT)。作为所有者,您自动地获得那种数据类型的
Usage 权限,并可将 Usage 权限授予其他人,以便他们可在 SQL 语句中引用该类型名称或数
据。DBA 还可授予 UDT 的 Usage 权限。
下列示例授予用户 mark 访问权限来使用 widget 用户定义的类型:
GRANT USAGE ON TYPE widget TO mark;
如果您将 Usage 权限授予有 Alter 权限的用户(或角色),则被授予者可向包含您的 UDT 的值
的表添加列。
没有来自 GRANT 语句的权限,任何用户都可发出引用内建数据类型的 SQL 语句。相反,用户必
须从 GRANT 语句获得显示的 Usage 权限,才能使用 distinct 数据类型,即使该 distinct 类型基
于内建类型。
要获得更多关于用户定义的类型的信息,请参阅 CREATE OPAQUE TYPE 语句、CREATE
DISTINCT TYPE 语句。
UNDER 权限
您拥有您创建的任何命名的 ROW 类型。如果您想要其他用户能够创建此命名的 ROW 类型之下
的子类型,则必须授予这些用户对您的命名的 ROW 类型的 Under 权限。
例如,假设您创建名为 rtype1 的 ROW 类型:
CREATE ROW TYPE rtype1 (cola INT, colb INT);
如果您想要名为 kathy 的另一用户能够创建此命名的 ROW 类型之下的子类型,则必须授予用户
kathy 对此命名的 ROW 类型的 Under 权限:
GRANT UNDER ON ROW TYPE rtype1 TO kathy;
现在,用户 kathy 可创建 rtype1 ROW 类型之下的另一 ROW 类型,即使 kathy 不是 rtype1
ROW 类型的所有者:
CREATE ROW TYPE rtype2 (colc INT, cold INT) UNDER rtype1;
要获取更多关于命名的 ROW 类型的信息。