暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

南大通用GBase8s 常用SQL语句(147)

刚刚 好 2022-05-20
319


 

表级权限

当您以 CREATE TABLE 语句创建表时,您是该表的所有者,且自动地收到所有的表级权限。您不可将所有权转给另一用户,但您可将表级权限授予另一用户或授予一角色。(然而, 请参阅 RENAME TABLE 语句,它可更改表的名称和所有权。)

有数据库级 DBA 权限的用户自动地收到那个数据库中每一表的所有表级权限。

表级权限


 

元素

描述

限制

语法

column

授予对列的 References、Select 或 Update 权限。缺省的范围是 tableview  synonym 的所有列。

必须为 tableview  synonym 的列

标识符

owner

拥有该 tableview  synonym 的用户名称

必须为有效的授权标识符

所有者名称

synonym, table, view

授予权限的同义词、表或视图。

在当前数据库中必须存在

标识符

GRANT 语句可罗列下列关键字中一个或多个,来指定您授予同样的用户或角色的表权限。

权限

作用

INSERT

让您插入行

DELETE

让您删除行

SELECT

让您访问 SELECT 语句中的任何列。您可通过罗列列来将 Select 权限限定到一列或多列。

UPDATE

让您访问 UPDATE 语句中的任何列。您可通过罗列列来将 Update 权限限定到到一列或多列。

REFERENCES

让您定义对列的引用约束。您必须有 Resource 权限来利用 References 权限。(然而,您可在 ALTER TABLE 语句期间添加参考约束,而无需持有数据库的 Resource 权限。)您仅需 References 权限来指出级联删除。您无需 Delete 权限来在表上放置级联删除。您可通过罗列列来将 References 权限限定到一列或多列。

INDEX

让您创建永久索引。您必须有 Resource 权限来使用 Index 权限。(有 Connect 权限的任何用户可在临时表上创建索引。)

ALTER

让您添加或删除列,修改列数据类型,添加或删除约束,将表的锁定模式由 PAGE 修改为 ROW,或为您的表添加或删除对应的 ROW 数据类型。 它还让您启用或禁用索引、约束和触发器,如 SET Database Object Mode 语句 中所描述。

您必须有 Resource 权限来使用 Alter 权限。此外,对于受 ALTER TABLE 语句影响的任何用户定义的数据类型,您还需要 Usage 权限。

UNDER

让您创建类型表之下的子表。

ALL

提供以上列出的所有权限。PRIVILEGES 关键字是可选的。

您可通过指定权限适用的列来缩小 SelectUpdate References 权限的范围。

指定关键字 PUBLIC user,如果您想要 GRANT 语句应用于所有用户。

以下一些简单的示例展示如何以 GRANT 语句来授予表级权限。

下列语句将删除和选择表 customer 中的任何列的值的权限授予用户 mary  john。它还授予 Update 权限,但仅限于列 customer_numfname  lname

GRANT DELETE, SELECT, UPDATE (customer_num, fname, lname)

   ON customer TO mary, john;

要将上述相同的权限授予给所有授权的用户,请使用关键字 PUBLIC,如下列示例所示:

GRANT DELETE, SELECT, UPDATE (customer_num, fname, lname)

   ON customer TO PUBLIC;

对于 GBase 8s 数据库,假设名为 mary 的用户已经创建了名为 tab1 的类型表。在缺省情况下,仅用户 mary 可创建 tab1 表之下的子表。如果 mary 想要将在 tab1 表之下创建子表的能力授予名为 john 的用户,则 mary 必须输入下列 GRANT 语句:

GRANT UNDER ON tab1 TO john;

收到 tab1 表上的 Under 权限之后,用户 john 可创建 tab1 之下的一个或多个子表。

ALL 关键字的作用

ALL 关键字将所有可能的表级权限授予指定的用户。如果对于 grantor 任何或所有表级权限都不存在,则带有 ALL 关键字的 GRANT 语句成功(如同 SQLCODE 设置为零,即使对于 grantor 在表上可能的权限设置为空)。然而,在这种情况下,返回下列 SQLSTATE 警告:

01007 - Privilege not granted.

例如,假设用户 ted  customer 上有 Select Insert 权限,将那些权限授予其他用户。

用户 ted 想要将所有表级权限授予用户 tania。因此,用户 ted 发出下列 GRANT 语句:

GRANT ALL ON customer TO tania;

此语句成功地执行,但由于下列原因返回 SQLSTATE 代码 01007

l 该语句成功地将 Select Insert 权限授予用户 tania,因为用户 ted 有那些权限和将那些权限授予其他用户的权利。

l ALL 关键字暗含的其他权限不可由 ted 授予,因此没有授予用户 tania

如果您以 ALL 关键字授予所有表级权限,则仅当该表为类型表时该权限才包括 Under 权限。ALL 权限的授予不包括 Under 权限,如果该表不是基于 ROW 类型的。

如果表所有者授予传统的关系表 ALL 权限,并在后来将那个表更改为类型表,则表所有者必须明确地授予 Under 权限来允许其他用户创建它之下的子表。

表引用

通过制定表的或视图的名称或现有的同义词,您直接授予表级权限,可以 owner 名称来限定。

表引用

元素

描述

限制

语法

owner

拥有 tableview  synonym 的用户的名称

必须为有效的授权标识符

所有者名称

synonym, table, view

对其授予权限的同义词、表或视图

tableview  synonym 必须在数据库中存在

标识符

对其授予权限的对象必须位于当前数据库中。

对于 CREATE EXTERNAL TABLE 语句已经在当前数据库中注册的表对象,支持 Select 权限和 Insert 权限,但不可授予或取消对其他表或列的访问权限。

在符合 ANSI 的数据库中,如果 owner 未加引号,则数据库以小写字母方式存储所有者名称。

 

 

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论