Column-level privileges
You can qualify the Select, Update, and References privileges with the names of specific columns. Naming specific columns allows you to grant specific access to a table. You can permit a user to see only certain columns, to update only certain columns, or to impose referential constraints on certain columns.
You can use the GRANT and REVOKE statements to grant or restrict
access to table data. This feature solves the problem that only certain
users should know the salary, performance review, or other sensitive
attributes of an employee. Suppose a table of employee data is defined
as the following example shows:
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
)
Because this table contains sensitive data, you execute the following
statement immediately after you create it:
REVOKE ALL ON hr_data FROM PUBLIC
For selected persons in the Human Resources department, and for
all managers, execute the following statement:
GRANT SELECT ON hr_data TO harold_r
In this way, you permit certain users to view all columns. (The
final section of this chapter contains information about a way to
limit the view of managers to their employees only.) For the first-line
managers who carry out performance reviews, you can execute a statement
such as the following one:
GRANT UPDATE (performance_level, performance_notes)
ON hr_data TO wallace_s, margot_t
This statement permits the managers to enter their evaluations
of their employees. You would execute a statement such as the following
one only for the manager of the Human Resources department or whomever
is trusted to alter salary levels:
GRANT UPDATE (salary) ON hr_data to willard_b
For the clerks in the Human Resources department, you can execute
a statement such as the following one:
GRANT UPDATE (emp_key, emp_name, hire_date, dept_num)
ON hr_data TO marvin_t
This statement gives certain users the ability to maintain the
nonsensitive columns but denies them authorization to change performance
ratings or salaries. The person in the MIS department who assigns
computer user IDs is the beneficiary of a statement such as the following
one:
GRANT UPDATE (user_id) ON hr_data TO eudora_b
On behalf of all users who are allowed to connect to the database,
but who are not authorized to see salaries or performance reviews,
execute statements such as the following one to permit them to see
the nonsensitive data:
GRANT SELECT (emp_key, emp_name, hire_date, dept_num, user-id)
ON hr_data TO george_b, john_s
These users can perform queries such as the following one:
SELECT COUNT(*) FROM hr_data WHERE dept_num IN (32,33,34)
However, any attempt to execute a query such as the following one
produces an error message and no data:
SELECT performance_level FROM hr_data
WHERE emp_name LIKE '*Smythe'