示例:使用 SQL 在 DB2 中创建数据库视图
您可以使用 SQL 在企业级地理数据库中创建表和要素类的视图。
本主题中的示例介绍如何在 IBM DB2 中创建简单视图来限制用户对特定列的访问。该示例基于具有以下定义的表:
CREATE TABLE employees(emp_id integer not null, name varchar(32),
department smallint not null, hire_date date not null);
授予表权限
如果创建视图的用户不是该视图所依据的表的所有者,则表所有者必须至少授予视图创建者从表中进行选择的权限。如果视图所有者需要将视图权限授予其他用户,则表所有者还必须授予视图所有者向其他用户授权的权限。
在本例中,视图所依据的表 (employees) 归用户 gdb 所有。创建视图的用户是 rocket。此外,rocket 用户还必须将视图权限授予其他用户。因此,gdb 用户必须向 rocket 用户授予从 employees 表中进行选择的权限并且还包括 WITH GRANT OPTION,以使 rocket 用户能够将视图的 SELECT 权限授予其他用户。
db2 => connect to testdb user gdb using gdb.dbg
Database Connection Information
Database server = DB2 9.5.5
SQL authorization ID = GDB
Local database alias = TESTDB
db2 => GRANT SELECT
ON employees
TO USER rocket WITH GRANT OPTION;
DB20000I The SQL command completed successfully.
创建视图
在本例中,用户 rocket 根据 employees 表创建视图,以将访问限制为部门编号为 201 的记录:
db2 => connect to testdb user rocket using nopeeking
Database Connection Information
Database server = DB2 9.5.5
SQL authorization ID = ROCKET
Local database alias = TESTDB
db2 => CREATE VIEW view_dept_201
AS SELECT emp_id, name, department, hire_date
FROM gdb.employees
WHERE department = 201;
DB20000I The SQL command completed successfully.
授予视图权限
您可将视图权限授予特定用户,而无需授予这些用户对基表 (employees) 的访问权限。在本例中,将视图 view_dept_201 的 SELECT 权限授予用户 mgr200:
db2 => connect to testdb user rocket using nopeeking
Database Connection Information
Database server = DB2 9.7.4
SQL authorization ID = ROCKET
Local database alias = TESTDB
db2 => GRANT SELECT ON view_dept_201 TO USER mgr200;
DB20000I The SQL command completed successfully.
测试权限
以 mgr200 身份登录并从 view_dept_201 中选择记录:
db2 => connect to testdb user mgr200 using mgr200
Database Connection Information
Database server = DB2 9.7.4
SQL authorization ID = MGR200
Local database alias = TESTDB
db2 => 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