网络安全

位置:IT落伍者 >> 网络安全 >> 浏览文章

SQL实战新手入门:通过特权管理安全性(2)


发布日期:2018年12月22日
 
SQL实战新手入门:通过特权管理安全性(2)

通过特权管理安全性(

安全账户指的是SQL Server用户SQL Server角色Windows用户或者Windows组SQLServer为安全账户定义了一些不同的粒度授予一个用户(既可以是SQL Server用户也可以是Windows用户)的特权仅仅影响到该用户授予一个角色或Windows NT组的特权将影响到该角色或组中的所有成员

在LIBRARY数据库的上下文中将CREATE DATABASE语句的权限授予一个用户或角色将产生如下所示的错误

USE library

GRANT CREATE DATABASE

TO PUBLIC;

CREATE DATABASE permission can only be granted in the master database

将当前上下文切换到master数据库就可以解决这一问题可以采用类似的办法将访问数据库中对象的特权授予一个角色或者一个用户

USE library

GRANT CREATE TABLE

TO PUBLIC;

无论是系统级特权还是对象级特权都可以使用REVOKE语句从一个数据库用户角色或组上进行撤消角色指的是授予了权限集的一个命名实体可以采用类似的方法移除角色所具有的特权

REVOKE CREATE TABLE

FROM USER PUBLIC;

SQL标准还定义了两个子句RESTRICT和CASCADE对于RESTRICT选项仅当数据库中没有废弃的特权时该语句才能成功执行例如可能发生这样的情况即用户已经将该特权授予了某个其他用户如果决定无论如何都要撤消特权并将特权的撤消传播到已经从该用户获得了特权的所有用户则必须声明CASCADE子句在支持这两个子句的各种RDBMS实现中这些子句都是可选的但在SQL标准中要求至少必须有一个子句通常情况下每一种RDBMS在实现该语句时都有一些自己的打算

REVOKE语句的影响是直接的如果从PUBLIC撤消了指定的特权则对于每一个用户通过PUBLIC获得的特权也将丢失在这种情况下直接授予用户或通过角色授予用户的特权将不受影响撤消系统特权的规则是复杂的例如如果从一个角色撤消了某种特权(或角色)则仅撤消该角色的特权如果该角色将特权(或角色)授予了另外一个用户(或角色)则该用户将继续运用这个特权(或角色)

记住从一个用户上撤消特权对于该用户已经创建的任何对象都没有影响当特权被撤消时所有在该特权下创建的对象将依然保留在数据库中

使用角色管理安全性

角色是RDBMS为简化用户的管理任务而引入的一个抽象的概念它根据某些标准对用户的特权进行分组通常是根据工作的职责进行划分例如如果名会计人员都需要对日常访问的数十个对象具有相应的特权(另外还需要某些系统级的特权)那么你可以有两种选择一是遍历每一个用户并分别授予他们所需要的全部特权二是创建一个组(角色)例如ACCOUNTANTS然后将所有权限授予该角色并将角色授予组中的所有用户撤消特权也面临相同的选择显而易见采用角色进行管理更加方便

在某些RDBMS中除了具有大量预定义的可授予用户的系统角色之外还提供了创建角色的能力Oracle g/g和Microsoft SQL Server 都支持创建角色而DB只能使用固定的预定义的角色(职权)

Oracle中的角色是一组特权的集合可以将这些特权授予一个用户或者另外一个角色也可以从用户或角色中撤消这些特权因此Oracle提供了一种特权层次结构在角色可以传递授予它的所有权限之前必须启用该角色(通过一个SET ROLE语句或者由数据库管理员启用)

Oracle g/g具有很多预定义的角色通过这些角色可以将特权授予用户对于预定义的角色无法添加新的特权也无法撤消任何特权

在Oracle RDBMS中包(package)是一个由已经预编译的例程(通常是用PL/SQL编写的)组成的集合它包含在RDBMS中用户可以通过包中定义的过程和函数来访问数据库的功能通过将这些功能块分组到包中就可以建立安全策略在组的级别上对包的使用进行管理而无须逐一为这些块分配特权

下面就是一个在任何一种RDBMS中使用默认选项为LIBRARY数据库创建角色的例子

CREATE ROLE libUsers;

现在可以将特权授予该角色(更多信息请参考本章前面曾讨论过的GRANT语句)然后还可以将特权授予任何需要它的用户方法是将这些用户分配给libUsers角色

可以使用SET ROLE语句在当前数据库会话期间启用或禁用ROLE对于数据库管理员可以设置的并发角色的数量可能会存在一定的限制

使用ALTER ROLE语句可以修改角色使用DROP ROLE语句则可以删除角色

DROP ROLE libUsers;

直到版本IBM DB都不支持用户定义的角色它依赖于系统预定义的职权(固定的角色)可以将用户设置为这些角色的成员另外IBM DB还依赖于GROUP它的行为与其他RDBMS中的角色几乎相同版本中依然支持GROUP但对角色增加了新的支持总体而言与Oracle中的角色实现基本一致

针对数据库对象的某些特权并非与所讨论的各种RDBMS都有关例如在DB或Oracle数据库中都具有PACKAGE对象但在MS SQL ServerPostgreSQL和MySQL中并没有这个对象另外更加混乱的是对于Oracle和IBM来说包这个概念具有不同的含义

返回目录SQL实战新手入门

编辑推荐

Oracle索引技术

高性能MySQL

数据仓库与数据挖掘培训视频教程

上一篇:SQL实战新手入门:通过特权管理安全性(1)

下一篇:SQL实战新手入门:操作系统集成安全性(1)