当您尝试使用视图时,数据库服务器只测试已授予您的对该视图的特权。它不测试您是否具有访问基础表的权限。
如果视图由您创建,那么您具有前一节记载的特权。如果您不是创建者,那么您具有创建者(或某个具有 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