列级别特权

可使用特定列的名称来对 Select、Update 和 References 特权进行限定。通过命名特定的列,就可以授予对表的特定访问权。可以允许用户只查看特定的列、只更新特定的列或只对特定的列施加引用约束。

可使用 GRANT 和 REVOKE 语句来授予或限制对表数据的访问权。此功能解决了只有特定用户才应该了解某个雇员的薪水、工作表现评价或其他敏感属性这一问题。假定雇员数据表是按以下示例所示的方式定义的:
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
对于“人力资源”部门中的所选人员以及对于所有经理,执行以下语句:
GRANT SELECT ON hr_data TO harold_r
这样,您就允许特定用户查看所有的列。(本章的最后一节包含的信息说明了如何将经理限制为仅供其员工查看。)对于执行业绩考核的一线经理,可执行如下所示的语句:
GRANT UPDATE (performance_level, performance_notes)
      ON hr_data TO wallace_s, margot_t
此语句允许经理输入他们对他们的雇员的评价。您将只对“人力资源”部门的经理或被委托改变薪水等级的人员执行如下语句:
GRANT UPDATE (salary) ON hr_data to willard_b
对于“人力资源”部门中的职员,可执行如下所示的语句:
GRANT UPDATE (emp_key, emp_name, hire_date, dept_num)
      ON hr_data TO marvin_t
此语句使特定用户有能力维护不敏感的列,但拒绝他们更改工作表现等级或薪水的权限。MIS 部门中指定计算机用户标识的人员是如下语句的受益者:
GRANT UPDATE (user_id) ON hr_data TO eudora_b
对于允许连接至数据库但未授权查看薪水或工作表现评价的用户,执行如下的语句以允许他们查看不敏感的数据:
GRANT SELECT (emp_key, emp_name, hire_date, dept_num, user-id)
   ON hr_data TO george_b, john_s
这些用户可以执行如下的查询:
SELECT COUNT(*) FROM hr_data WHERE dept_num IN (32,33,34)
然而,任何执行如下查询的尝试都将生成错误消息并且不返回数据:
SELECT performance_level FROM hr_data
      WHERE emp_name LIKE '*Smythe'