示例:使用 SQL 在 Oracle 中创建数据库视图

复杂程度:初级 数据要求:使用自己的数据

您可以使用 SQL 在企业级地理数据库中创建表和要素类的视图。

本主题中的示例说明如何在 Oracle 中创建简单视图以限制用户访问特定列。该示例基于具有以下定义的表:

CREATE TABLE employees (
  emp_id      number(38) unique not null,
  name        varchar2(32),
  department  number not null,
  hire_date   date not null);

授予表权限

如果创建视图的用户不是该视图所依据的表的所有者,则表所有者必须至少授予视图创建者从表中进行选择的权限。如果视图所有者需要将视图权限授予其他用户,则表所有者还必须授予视图所有者向其他用户授权的权限。

在本例中,视图所依据的表 (employees) 归用户 gdb 所有。创建视图的用户是 rocket。此外,rocket 用户还必须将视图权限授予其他用户。因此,gdb 用户必须向 rocket 用户授予从 employees 表中进行选择的权限并且还包括 WITH GRANT OPTION,以使 rocket 用户能够将视图的 SELECT 权限授予其他用户。

conn gdb/gdb.bdg

GRANT SELECT 
ON gdb.employees 
TO rocket WITH GRANT OPTION;

创建视图

在本例中,用户 rocket 根据 employees 表创建视图,以将访问限制为部门编号为 201 的记录:

CREATE VIEW view_dept_201 
AS SELECT (emp_id,name,department,hire_date)
FROM gdb.employees 
WHERE department = 201;

授予视图权限

您可将视图权限授予特定用户,而无需授予这些用户对基表 (employees) 的访问权限。在本例中,将视图 view_dept_201 的 SELECT 权限授予用户 mgr200:

conn rocket/nopeeking

GRANT SELECT ON rocket.view_dept_201 TO mgr200;

测试权限

以 mgr200 身份登录并从 view_dept_201 中选择记录:

conn mgr200/topsecret

SELECT * FROM rocket.view_dept_201; 

EMP_ID     NAME       DEPT     HIRE_DATE 
112        LOLLI POP  201      06/30/2007 
134        VAN CHIN   201      10/15/2007 
150        DON GUN    201      03/01/2009

像预期一样,只返回了 department 201 中的雇员记录。

9/15/2013