自动维护特权

这种设计似乎迫使您在最初设置数据库时执行大量的 GRANT 语句。此外,当人们改变工作时,需要不断地维护特权。例如:如果“人力资源”部门的某个雇员被解雇,那么您可能想尽快取消 Update 特权,否则这个满心不愉快的雇员可能会执行如下的语句:
UPDATE hr_data
      SET (emp_name, hire_date, dept_num) = (NULL, NULL, 0)

不具有那么戏剧性变化但具有同等必要性的情况是,在任何包含敏感数据的模型中,每天甚至每小时都需要更改特权。如果您预期有这种需要,可以准备一些自动化工具来帮助维护特权。

第一步应该是指定基于用户的工作(而不是基于表的结构)的特权级。例如,一线经理需要以下特权:
  • 对虚构的 hr_data 表的 Select 和有限 Update 特权
  • 对这个以及其他数据库的 Connect 特权
  • 对那些数据库中的数个表的一定程度的特权

当将某位经理提升到本部职位或派到现场办公室时,必须取消所有那些特权并授予新的一组特权。

定义所支持的特权级,并对每一级指定必须给定访问权的数据库、表和列。然后,为每一级设计两个自动化例程,一个用于将该特权级授予用户,另一个用于取消该特权级。