指定分片
您可以括在紧跟在 ON table 规范之后的括号内的名称(或名称列表)指定一个分片或一逗号分隔的分片列表。您不可使用引号来定界分片名称。如果您未包括分片,或如果指定的表的分片与您罗列的分片不相匹配,则数据库服务器发出错误。
必须通过其名称引用每一 fragment。如果当您创建该分片时,未声明显式的标识符,则它的名称缺省为它所在其中的 dbspace 的名称。
通过 onspaces 实用程序成功地重命名 dbspace 之后,仅新的名称是有效的。 GBase 8s 自动地更新系统目录中现有的分片策略来替换新的 dbspace 名称,但您必须在 GRANT FRAGMENT 语句中指定新的名称来引用那个缺省名称为重命名的 dbspace 的名称的分片。
TO 子句
跟在 TO 关键字之后的一个或多个用户或角色的列表标识被授权者。您可指定 PUBLIC 关键字来将指定的分片级权限授予所有用户。
您不可使用 GRANT FRAGMENT 来给自己授予分片级权限,既不可直接授予也不可通过角色授予。
如果您用引号括起 user 或 role,则该名称区分大小写,且安全按输入形式存储。在符合 ANSI 的数据库中,如果您不使用引号括起 user 或 role,则该名称以大写字母存储。
下列语句将对 part1 中的 customer 表的分片的 Insert、Update 和 Delete 权限授予用户 larry:
GRANT FRAGMENT ALL ON customer (part1) TO larry;
下列语句将对 part1 和 part2 中 customer 表的分片的 Insert、Update 和 Delete 权限授予用户 millie:
GRANT FRAGMENT ALL ON customer (part1, part2) TO millie;
要将对表的所有分片的权限授予相同的一个或多个用户,您可使用 GRANT 语句,而不使用 GRANT FRAGMENT 语句。您还可使用 GRANT FRAGMENT 语句达到此目的。
假设 customer 表通过表达式分片为三个分片,且这些分片驻留在名为 part1、part2 和 part3 的 dbspace 中。您可使用下列语句之一来将对该表的所有分片的 Insert 权限授予用户 helen:
GRANT FRAGMENT INSERT ON customer (part1, part2, part3) TO helen;
GRANT INSERT ON customer TO helen;
向用户或用户列表授予权限
您可将分片级权限授予单个用户或多个用户的列表。
下列语句将对 part3 中的 customer 表的分片的 Insert、Update 和 Delete 权限授予用户 oswald:
GRANT FRAGMENT ALL ON customer (part3) TO oswald;
下列语句将对 part3 中的 customer 表的分片的 Insert、Update 和 Delete 权限授予用户 jerome 和 hilda:
GRANT FRAGMENT ALL ON customer (part3) TO jerome, hilda;
授予权限或权限列表
当您在 GRANT FRAGMENT 语句中指定分片级权限时,您可指定一种权限、多种权限的列表或所有权限。
下列语句将对 part1 中的 customer 表的 Update 权限授予用户 ed:
GRANT FRAGMENT UPDATE ON customer (part1) TO ed;
下列语句将对 part1 中的 customer 表的 Update 和 Insert 权限授予用户 susan:
GRANT FRAGMENT UPDATE, INSERT ON customer (part1) TO susan;
下列语句将对 part1 中的 customer 表的 Insert、Update 和 Delete 权限授予用户 harry:
GRANT FRAGMENT ALL ON customer (part1) TO harry;