DB2 10.5 for Linux, UNIX, and Windows

模式

模式是已命名对象的集合;它提供一种方法来按逻辑分组这些对象。模式也是名称限定词;它提供一种方法来对几个对象使用相同自然名称,并防止对这些对象进行二义性引用。

例如,使用模式名“INTERNAL”和“EXTERNAL”很容易区分两个不同的 SALES 表(INTERNAL.SALES 和 EXTERNAL.SALES)。

模式还允许多个应用程序将数据存储在单个数据库中,而不会遇到名称空间冲突。

模式与 XML 模式不同,不应将它们混淆。XML 模式是一种描述 XML 文档的结构并验证其内容的标准。

模式可以包含表、视图、昵称、触发器、函数、程序包和其他对象。模式本身是一个数据库对象。可使用 CREATE SCHEMA 语句显式创建模式,并且将当前用户或指定的授权标识记录为模式所有者。如果用户具有 IMPLICIT_SCHEMA 权限,那么也可以在创建另一个对象时隐式创建模式。

模式名用作两部分对象名的前半部分。如果在创建对象时使用模式名专门限定了该对象,那么该对象被指定给该模式。如果在创建对象时未指定模式名,那么将使用缺省模式名(在 CURRENT SCHEMA 专用寄存器中指定)。

例如,具有 DBADM 权限的用户为用户 A 创建模式 C:
   CREATE SCHEMA C AUTHORIZATION A
然后,用户 A 可以发出以下语句在模式 C 中创建表 X(前提是该用户 A 具有 CREATETAB 数据库权限):
   CREATE TABLE C.X (COL1 INT)

某些模式名是保留名。例如,内置函数属于 SYSIBM 模式,而预先安装的用户定义的函数属于 SYSFUN 模式。

如果在创建数据库时未使用 RESTRICTIVE 选项,那么所有用户将具有 IMPLICIT_SCHEMA 权限。只要具有此权限,无论用户何时使用不存在的模式名创建对象,都会隐式创建一个模式。隐式创建模式时,将授予 CREATEIN 特权,该特权允许任何用户在此模式中创建其他对象。现在不仅能创建别名、单值类型、函数和触发器之类的对象,还可隐式创建模式。对隐式创建的模式的缺省特权提供了与先前版本的向后兼容性。

隐式创建的模式的所有者为 SYSIBM。如果数据库是限制性的,那么 PUBLIC 没有对此模式的 CREATEIN 特权。隐式创建此模式的用户具有对此模式的 CREATEIN 特权。如果数据库不是限制性的,那么 PUBLIC 具有对此模式的 CREATEIN 特权。

如果撤销 PUBLIC 的 IMPLICIT_SCHEMA 权限,那么可以使用 CREATE SCHEMA 语句显式创建模式,或者由授予了 IMPLICIT_SCHEMA 权限的用户(例如,具有 DBADM 权限的用户)隐式创建。虽然撤销 PUBLIC 的 IMPLICIT_SCHEMA 权限会加大对模式名使用的控制,但在现有应用程序尝试创建对象时它会导致权限错误。

模式也具有特权,它们允许模式所有者控制哪些用户具有创建、改变和删除模式中的对象的特权。此能力提供了一种方法来控制对数据库中的对象子集的处理。模式所有者最初被授予对该模式的所有这些特权,并且他们能够将特权授予其他人。隐式创建的模式由系统拥有,并且所有用户最初被授予在这类模式中创建对象的特权,在限制性数据库环境中时除外。具有 ACCESSCTRL 或 SECADM 权限的用户可以更改用户对任何模式拥有的特权。因此,可以控制在任何模式(即使是隐式创建的模式)中创建、改变和删除对象的特权。