GRANT,REVOKE和DENY数据库权限
数据控制语言(DCL)是结构化查询语言 (SQL)的一个子集,允许数据库管理员配置对关系数据库的安全访问。 它补充了用于添加和删除数据库对象的数据定义语言(DDL)以及用于检索,插入和修改数据库内容的数据操作语言(DML)。
DCL是最简单的SQL子集 ,因为它只包含三个命令:GRANT,REVOKE和DENY。 综合起来,这三个命令为管理员提供了以非常细致的方式设置和删除数据库权限的灵活性。
使用GRANT命令添加权限
GRANT命令由管理员用来向数据库用户添加新的权限。 它有一个非常简单的语法,定义如下:
授予[特权]开[对象] TO [用户] [授权选项]以下是您可以使用此命令提供的每个参数的简要说明:
- 特权可以是关键字ALL(以授予各种权限),也可以是特定的数据库权限或一组权限。 例子包括CREATE DATABASE,SELECT,INSERT,UPDATE,DELETE,EXECUTE和CREATE VIEW。
- 对象可以是任何数据库对象。 有效的权限选项根据您在本节中包含的数据库对象的类型而有所不同。 通常,对象将是数据库,函数, 存储过程 ,表或视图。
- 用户可以是任何数据库用户。 如果您希望使用基于角色的数据库安全性,那么您也可以在本节中使用用户角色。
- 如果在GRANT命令的末尾包含可选的WITH GRANT OPTION子句,则不仅可以授予指定用户在SQL语句中定义的权限,还可以授予用户将这些相同权限授予其他数据库用户的权限。 出于这个原因,请谨慎使用本条款。
例如,假设您希望授予用户Joe从名为HR的数据库中的employees表中检索信息的能力。 您可以使用以下SQL命令:
将HR.employees选择给乔Joe现在可以从雇员表中检索信息。 但是,他不会授予其他用户从该表中检索信息的权限,因为您没有在GRANT语句中包含WITH GRANT OPTION子句。
撤销数据库访问
REVOKE命令用于删除先前授予此类访问权的用户的数据库访问权限。 该命令的语法定义如下:
REVOKE [允许选项] [允许] ON [对象] FROM [用户] [级联]以下是关于REVOKE命令参数的简要介绍:
- 权限指定要从已识别的用户中删除的数据库权限。 该命令撤销之前为确定的权限所做的GRANT和DENY断言。
- 对象可以是任何数据库对象。 有效的权限选项根据您在本节中包含的数据库对象的类型而有所不同。 通常,对象将是数据库,函数,存储过程,表或视图。
- 用户可以是任何数据库用户。 如果您希望使用基于角色的数据库安全性,那么您也可以在本节中使用用户角色。
- GRANT OPTION FOR子句删除指定用户向其他用户授予指定权限的能力。 注意 : 如果在REVOKE语句中包含GRANT OPTION FOR子句,则不会撤消主要权限。 本条款仅撤销授予能力。
- CASCADE选项还撤消指定用户授予权限的任何用户的指定权限。
例如,以下命令将撤消在前面示例中授予Joe的权限:
REVOKE选择人力资源雇员从乔明确拒绝数据库访问
DENY命令用于明确阻止用户接收特定权限。 当用户是被授予权限的角色或组的成员时,这非常有用,并且您希望通过创建异常来防止该用户继承权限。 该命令的语法如下所示:
DENY [许可] ON [对象] TO [用户] DENY命令的参数与GRANT命令使用的参数相同。
例如,如果您希望确保Matthew永远不会从Employees表中删除信息,请发出以下命令: