VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

CREATE VIEW

功能描述

创建一个视图。视图与基本表不同,是一个虚拟的表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户感兴 趣的数据及变化。

Vastbase在MySQL兼容模式下,支持CREATE VIEW如下特性用法:

  • 支持SQL SECURITY语法,为视图添加安全属性。

本文档仅列出CREATE VIEW在MySQL兼容模式下的特性用法,更多语法及参数说明详见SQL语法参考中的CREATE VIEW

注意事项

  • 该功能仅在数据库兼容模式为MySQL时能够使用(即创建DB时DBCOMPATIBILITY='B'),在其他数据库兼容模式下不能使用该特性。
  • 视图定义的顶层不能包含WITH、DISTINCT、GROUP BY、HAVING、LIMIT、OFFSET子句的视图
  • 视图定义的顶层不能包含集合操作(UNION、INTERSET、EXCEPT)的视图。
  • 视图的目标列表中不能包含聚集函数、窗口函数或者返回集合的函数。

语法格式

CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ]  [DEFINER = user] 
[SQL SECURITY { DEFINER | INVOKER }] 
VIEW view_name [ ( column_name [, ...] ) ]
...

参数说明

SQL SECURITY { DEFINER | INVOKER }

定义视图的安全属性。

  • DEFINER:表示按照视图的定义者(即创建或修改该视图的数据库用户)的权限来限定视图中AS SELECT对象的权限(查询视图的用户,只要拥有SELECT ON VIEW的权限,即可使用该视图)。

  • INVOKER:表示按照视图的调用者(即查询该视图的数据库用户)的权限来限定视图中AS SELECT对象的权限(查询视图的用户,除了拥有SELECT ON VIEW的权限,还需要拥有视图中AS SELECT基表的查询权限才能使用该视图)。

默认值:DEFINER

示例

1、创建普通用户。

create user use_b_1144538 identified by 'A@123456';

2、创建测试表并插入数据。

create table sql_security_1144538(id int,cal int);
insert into sql_security_1144538 value(1,1);
insert into sql_security_1144538 value(2,2);
insert into sql_security_1144538 value(3,3);

3、创建视图并指定definer属性。

create sql security definer view v_1144538 as select * from sql_security_1144538;

4、查询视图内容。

select * from v_1144538 order by 1,2;

返回结果分别为:


 id | cal
----+-----
  1 |   1
  2 |   2
  3 |   3
(3 rows)

5、设置用户为普通用户use_b_1144538。

set role use_b_1144538 password 'A@123456';

6、查询视图内容。

select * from v_1144538 order by 1,2;

返回如下结果,普通用户没有权限,调用失败:

ERROR:  permission denied for relation v_1144538_1
DETAIL:  N/A

7、恢复超级用户。

reset role;

8、给用户use_b_1144538赋予视图的权限,并切换至用户use_b_1144538。

grant select on v_1144538 to use_b_1144538;
set role use_b_1144538 password 'A@123456';

9、再次查看视图。

select * from v_1144538 order by 1,2;

返回结果如下,查询成功:

 id | cal
----+-----
  1 |   1
  2 |   2
  3 |   3
(3 rows)