SQL数据库安全之对象级权限划分方案



      关系数据库支持许多不同类型的对象。然而,表格是数据存储的基本单位。每个表通常是根

据某些类型的实体设计的,例如雇员、客户或订单。这些表存储每个项的详细信息(如名称(

firstname)或客户号(customernumber))。执行一个或多个最常用的sql命令需要授权。这些

命令包括:选择从数据库检索信息。select语句可以从许多不同的表获取和合并数据,或者可以

用于执行复杂的聚合计算。
 
 
插入将新行添加到表中。,更新现有行或列中的更改值。删除表中的行。grant指定特定用户或

角色可以执行特定操作。撤销指定用户或角色的当前权限设置。否认阻止用户或角色执行特定

的操作。
 
 
控制数据访问最常用的方法是查看。视图是指向一个或多个基本数据库表的逻辑关系数据库对

象。视图通常被简单地定义为选择查询的结果。反过来,这个查询可以从许多不同的表中提取

信息,并对数据执行常见的计算。一旦定义了视图,就可以为视图指定对象级权限。数据库数

据库用户可以使用此视图访问他们需要的任何信息。当您需要安全性更改(例如添加最喜欢的

颜色栏)时,您可以简单地更改视图本身的定义以及所有可以在结果集中看到值的授权用户。

此外,视图可以查询其他视图以创建基于业务规则的对象链。当一些逻辑变化时,只有一些视

图可能会受到影响。此外,如果业务或技术需求变更,您可以在视图中进行相应的变更。
 
 
 
 
视图通常用于向用户返回数据集。数据库开发人员可以让用户使用视图修改数据,但这种方

法有许多重要的局限性。这是另一种有用的数据库对象。数据库使开发人员能够通过使用存

储过程对象创建和重用sql代码。存储过程可以使用标准sql命令执行任何函数。此外,它们

还可以使用参数(如其他编程语言中的函数和子例程)来使它们非常灵活。例如,可以使用

存储过程自动化一组与用户相关的数据库表的通用操作。当客户记录更改时,您可以通过调

用存储过程轻松完成相应的更改。对于安全性,例如视图,您可以访问存储过程,而不是直

接访问来修改存储在库表中的数据(在某些情况下,它可能过于松散,或者用户可能不完全

理解如何修改数据)。这在可能受影响的数据库表和可管理的代码模块之间提供了一个抽象

层,允许许多用户封装最常见的操作。
 
 
 
当在数据库中生成特定行为时,触发器被设计为自动启动。例如,您可以在salesorder表上

创建一个触发器,该触发器会自动在发票表中创建一行。或者,您可以创建一个触发器来执

行复杂的数据验证(一个常见的例子是检查关于begindate和enddate值的规则。从安全角度

看,触发器可以用不同的方式使用。首先,您可以使用触发器进行详细审计。例如,每当关

于雇员表的某些信息发生变化时,可能会通知高级管理人员,或者您可以编写一行日志来将

操作记录在另一个表中。触发器的另一个用途是执行复杂的数据库相关规则。如果您只允许

营销人员以特定格式向表中添加信息,或者如果您希望确保在数据更改时始终执行一系列操

作,您可以编写相应的触发器来实现它。
 
 
 
现在,您可能认为在所有这些级别管理数据库安全性可以为数据库管理员带来大量工作。很

不幸,你是对的。最初基于业务和技术需求实现数据库安全可能需要花费大量的时间和精力

,甚至还需要更多的时间和精力来确保数据库权限根据用户需求变更。幸运的是,有一些方

法可以使管理数据库权限更加容易。在本章后面,您将讨论如何使用应用程序级安全性。
分享: