通过特权管理安全性()
RDBMS本质上是一个由对象(模式表视图过程等)和管理这些对象的程序组成的集合限制对这些对象的访问本质上是一种安全机制它是在SQL层面上通过特权系统来实现的
特权表示特定用户在访问创建操作和销毁数据库中的各种对象上所拥有的权力也包括执行管理任务可以将特权授予一个用户或者一个角色(角色的概念将在下一小节中讨论)
可以将特权分为两个大类系统特权和对象特权不同数据库厂商对此的定义存在着相当大的差异更多的细节问题将在本章后面有关特定于RDBMS的实现的小节中进行介绍
GRANT语句
SQL标准将特权定义为用户被授权执行的操作类型只有在授予访问权限的对象和系统上用户才能执行这些操作在本书讨论的各种RDBMS中所有这些特权都是一致的
可以将特权授予一个单独的用户也可以授予一个角色可以使用GRANT语句来授予系统特权也可以授予对象特权在各种RDBMS包中授予特权的基本语法都是相当一致的(尽管在高级选项上存在显着的差别)在单个GRANT语句中可以授予多种特权例如下面的例子
GRANT [ALL [PRIVILEGES]] | <privilege…>
[ON <object_name>]
TO <user> | <group> | <role>
[WITH GRANT OPTION]
授予系统级特权
系统特权允许用户在指定的RDBMS内执行一些管理任务(创建一个数据库创建和删除用户创建修改和销毁数据库对象等)要执行授予系统特权的操作必须在RDBMS中具有足够高的职权级别系统特权与对象特权相比它们的作用域和允许用户执行的操作的类型不同这是区分两者的一个特征
系统特权完全是特定于具体数据库的每一个数据库厂商都实现了一个自己的系统特权集对于不同的RDBMS某些系统特权可能具有不同的含义例如Microsoft SQL Server它甚至没有定义系统特权而是对所谓的安全对象(securable)使用特权(权限)这些安全对象在不同的级别上可以是服务器数据库和模式
这里有一些基于LIBRARY数据库的例子下面的代码创建了一个用户LibraryUser然后授予该用户在数据库中创建表的特权并且允许传递给其他用户
CREATE USER LibraryUser
IDENTIFIED BY letmein;
GRANT CREATE TABLE
TO LibraryUser
WITH ADMIN OPTION;
假如你具有足够的特权那么上面的代码将创建密码为LETMEIN的用户LibraryUser但是如果NEW_USER用户还没有被授予CREATESESSION系统特权那么使用该用户ID和密码将无法连接到Oracle要访问数据库必须具有CREATESESSION系统特权否则将产生ORA:user LibraryUser lacks CREATESESSION privilege;logon denied错误
为了解决这一问题需要将该特权授予新创建的用户
GRANT CREATE SESSION
TO LibraryUser
WITH ADMIN OPTION;
这样就可以使用LibraryUser/letmein凭据连接到数据库由于使用了WITH ADMIN OPTION子句因此也可以将该特权授予其他用户某些RDBMS特别是Oracle将把该选项视为更通用的WITH GRANT OPTION子句
在Oracle数据库中还有另外两种系统特权值得一提SYSDBA和SYSOPER这两种系统特权的行为类似于包含了多个系统特权的角色当连接到Oracle数据库时可以声明用AS SYSDBA或者AS SYSOPER连接但前提是这些特权已经授予了连接数据库的用户SYSDBA是可以授予的最高特权之一
IBM DB在这一方面类似于Oracle它具有系统特权其中一些特权与职权级别有关(更多信息请参考本章后面的内容)在特权的层次结构中SYSADM(系统管理员)职权位于最顶层下一层包括DBADM(数据库管理员)和SYSCTRL(系统资源管理员)然后是SYSMAINT(系统维护管理员)在特权层次结构的最底层是数据库用户要授予DBADM职权用户必须具有SYSADM职权SYSADM和DBADM两者都可以向用户或组授予其他特权
IBM DB 提供了其他办法来保护数据即使是对于具有SYSADM职权的用户也是如此这种机制称为基于标签的访问控制(labelbased accesscontrolLBAC)可以用LBAC来保护整行整列或者同时保护两者Oracle也提供了类似的特性称为Oracle Label Security
Microsoft SQL Server 并没有系统特权(至少没有类似于Oracle或IBM DB所具有的那种系统特权)对于特定的SQL语句可以将特权授予一个用户(或者一个角色)一旦授予了特权用户就可以运行SQL语句以执行所定义的操作SQL Server 已经定义了大量的安全对象例如数据库服务器资源登录名数据库角色用户模式等可以将这些安全对象授予主体(principal)例如用户组角色或应用程序角色主体可以在下面这几个级别上进行定义Windows操作系统级别(域登录名本地登录名)SQL Server级别(SQL Server登录名)和数据库级别(数据库用户/角色和应用程序角色)表列出了可以授予主体的一些权限
表 精选的Microsoft SQL Server 权限
系统权限被绑定到数据库(MS SQL Server也使用这一概念在Oracle中与之最接近的等价概念是模式)并且是层次化的例如要GRANT特权以执行一个CREATE DATABASE语句则用户必须在SQL Server的master数据库的上下文中因为该语句产生的结果将影响到整个SQLServer 实例
返回目录SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
数据仓库与数据挖掘培训视频教程