当您尝试使用视图时,数据库服务器只测试已授予您的对该视图的特权。它不测试您是否具有访问基础表的权限。
如果视图由您创建,那么您具有前一节记载的特权。如果您不是创建者,那么您具有创建者(或某个具有 WITH GRANT OPTION 特权的人)授予您的特权。
CREATE TABLE hr_data
(
emp_key INTEGER,
emp_name CHAR(40),
hire_date DATE,
dept_num SMALLINT,
user-id CHAR(18),
salary DECIMAL(8,2),
performance_level CHAR(1),
performance_notes TEXT
)
REVOKE ALL ON hr_data FROM PUBLIC
CREATE VIEW hr_public AS
SELECT emp_key, emp_name, hire_date, dept_num, user_id
FROM hr_data
CREATE VIEW hr_enter AS
SELECT emp_key, emp_name, hire_date, dept_num
FROM hr_data
将对此视图的 Select 和 Insert 特权授予这些用户。由于您(您同时是表和视图的创建者)对表和视图具有 Insert 特权,所以您可以将对该视图的 Insert 特权授予其他对该表不具有特权的人。
CREATE VIEW hr_MIS AS
SELECT emp_key, emp_name, user_id
FROM hr_data
此视图与前一视图的不同点在于,它不显示部门号和聘用日期。
CREATE VIEW hr_mgr_data AS
SELECT * FROM hr_data
WHERE dept_num =
(SELECT dept_num FROM hr_data
WHERE user_id = USER)
AND NOT user_id = USER
GRANT SELECT, UPDATE (performance_level, performance_notes)
ON hr_mgr_data TO peter_m