在信息时代,数据库中的数据的安全性至关重要,数据库系统必须能够防止未获权限的访问,防止恶意破坏或修改数据。在数据库中实现安全性除了存储结构等物理方面的措施外,主要通过权限授予并要求用户进入系统时必须通过用户名和口令的检测。进入系统后,系统根据用户名及事先对该用户授权记载提供记录。数据库中的数据由多个用户共享,为保证数据库的安全,SQL提供数据控制语言对数据库进行统一的控制管理。
数据控制机制
数据库管理系统通过以下三步来实现数据控制:
授权定义
具有授权资格的用户,如
数据库管理员(Database Administrators,DBA)或建表户(Database Owner,DBO),通过
数据控制语言(Data Control Language,DCL),将授权决定告知数据库管理系统。
存权处理
数据库管理系统把授权的结果编译后存入数据字典中。数据字典是由系统自动生成、维护的一组表,记录着用户标识、基本表、视图和各表的列描述以及系统的授权情况。
查权操作
当用户提出操作请求时,系统首先要在数据字典中查找用户的数据操作权限,当用户拥有该操作权时才能执行其操作,否则系统将拒绝其操作。
权限与角色
权限
在SQL系统中,安全机制一共有两种。一种是视图机制,当用户通过试图访问数据库时,此视图外的数据不能再访问,试图机制提供了一定的安全性。另外一种是权限机制,是实际中主要使用的安全机制。给用户授予不同类型的权限是权限机制的思想所在,在必要时,授权需要被收回,使用户能够进行的数据库操作以及所操作的数据限定在指定范围内,禁止用户超越权限对
数据库进行非法的操作,使得数据库的安全性得到保证。
在数据库中,权限可分为系统权限与对象权限。系统权限是指数据库用户能够对数据库系统进行某种特定操作的权力,它可由
数据库管理员授予其他用户,如一个基本表的创建。对象权限是指数据库用户在指定的数据库对象上进行某种特定能力的权力,对象权限由创建基本表、视图等数据库对象的用户授予其他用户,如查询、添加、修改、删除等操作。
角色
角色是多种权限的集合,可以把角色授予用户或其它角色。当要为某一用户同时授予或收回多项权限时,则可以把这些权限定义为一个角色,对此角色进行相关操作。这样许多重复性的工作得以有效避免,数据库用户的权限管理工作在一定程度上得以简化。
数据控制语言
数据操作权限的设置语句包括授权语句、收权语句和拒绝访问3种。
授权语句
授权分对系统特权和对对象特权的两种方式。系统特权又称为语句特权,是允许用户在数据库内部实施管理行为的特权,主要包括创建或删除用户、删除或修改数据库对象等。对象特权类似于数据库操作语言DML的权限,指用户对数据库中的
表、
视图、存储过程等对象的操作权限。
(1)系统权限与角色的授予
使用SQL的GRANT语句为用户授予系统权限,其语法格式为:
GRANT<系统权限>|<角色>[,<系统权限>|<角色>]...
TO|<角色>|PUBLIC[,<用户名>|<角色>]...
[WITH ADMIN OPTION]
其语义是:将指定的系统权限授予指定的用户或角色。其中,数据库中的全部用户是由PUBLIC代表的;WITH ADMIN OPTION为可选项,指定后则允许被授权的用户将指定的系统特权或角色再授予其他用户或角色。
(2)对象权限与角色的授予
数据库管理员拥有系统权限,而作为数据库的普通用户,只对自己创建的基本表、视图等数据库对象拥有对象权限。如果要共享其他的数据库对象,则必须授予普通用户一定的对象权限。类似于系统权限的授予方法,SQL使用GRANT语句为用户授予对象权限,其语法格式为:
GRANT ALL|<对象权限>[(列名[,列名]…)][,对象权限]…
ON<对象名>
TO<用户名>|<角色>|PUBLIC[,<用户名>|<角色>]...
[WITH GRANT OPTION]
其语义是:将指定的操作对象的对象权限授予指定的用户或角色。其中,所有的对象权限是由ALL代表的;列名用于指定要授权的
数据库对象的一列或多列。如果列名未指定的话,被授权的用户将在数据库对象的所有列上均拥有指定的特权。实际上,只有当授权INSERT和UPDATE权限时才需要指定列名。ON子句用于指定要授权的数据库对象名,可以是基本表名、视图名等。WITH GRANT OPTION为可选项,指定后则允许被授权的用户将权限再授予其他用户或角色。
收权语句
数据库管理员是DBA、数据库拥有者(建库者)DBO或数据库对象拥有者DBOO(数据库对象主要是基本表)可以通过REVOKE语句将其他用户的数据操作权收回。
(1)系统权限与角色的收回
数据库管理员可以使用SQL的REVOKE语句回收系统权限,其语法格式为:
REVOKE<系统权限>|<角色>[,<系统权限>|<角色>]...
FROM<用户名>|<角色>|PUBLIC[,<用户名>|<角色>]...
(2)对象权限与角色的收回
所有授予出去的权限在一定的情况下都可以由数据库管理员和授权者收回,收回对象权限仍然使用REVOKE语句,其语法格式为:
REVOKE<对象权限>|<角色>[,<对象权限>|<角色>]...
FROM<用户名>|<角色>|PUBLIC[,<用户名>|<角色>]...
拒绝访问
拒绝访问的一般格式为:
DENY ALL[PRIVILIGES]|<权限组>[ON<对象名>]TO<用户组>|PUBLIC;
其中,ON子句用于说明对象特权的对象名,对象名指的是表名、视图名、视图和表的列名或者过程名。