数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。
1.数据库安全性控制
1.1 授权(Authorization)与回收
1.1.1 GRANT
GRANT语句的一般格式为
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名> [,<对象类型> <对象名> ]...
TO <用户> [,<用户>]...
[WITH GRANT OPTION];
其语义为:将对指定操作对象的指定操作权限授予指定的用户,发出该GRANT语句的可以是DBA,也可以是该数据库对象创建者(即属主Owner),也可以是已经拥有该权限的用户。接受权限的用户可以是一个或多个具体用户,也可以是PUBLIC,即全体用户。
如果指定了WITH GRANT OPTION子句,则获得某种权限的用户还可以把这种权限再授予其他的用户。如果没有指定WITH GRANT OPTION子句,则获得某种权限的用户只能使用该权限,不能传播该权限。
【例】
/*把对Student表和Course表的全部操作权限授予用户U2和U3。*/
GRANT ALL PRIVILEGES
ON TABLE Student,Course
TO U2,U3;/*也可以使用PUBLIC表示所有用户*/
/*把对表SC的INSERT权限授予U5用户,并允许将此权限再授予其他用户。*/
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
1.1.2 REVOKE
授予的权限可以由DBA或其他授权者用REVOKE语句回收,REVOKE语句的一般格式为
REVOKE <权限> [,<权限>]...
ON <对象类型> <对象名> [,<对象类型> <对象名>]...
FROM <用户> [,<用户>]...[CASCADE|RESTRICT];
【例】
/*把用户U4修改学生学号的权限收回*/
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
/*收回所有用户对表SC的查询权限*/
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;
1.1.3 创建数据库模式的权限(创建数据库用户)
GRANT和REVOKE语句向用户授予或收回对数据的操作权限。对数据库模式的授权则由DBA在创建用户时实现。
创建用户CREATE USER语句一般格式如下:
CREATE USER <username>
[WITH [DBA|RESOURCE|CONNECT]];
对CREATE USER语句说明如下
- 只有系统的超级用户才有权创建一个数据库用户。
- 新创建的数据库用户由三种权限:CONNECT,RESOURCE和DBA.
- CREATE USER命令中如果没有指定创建的新用户的权限,默认该用户拥有CONNECT权限。拥有CONNECT权限的用户不能创建新用户,不能创建模式,也不能创建基本表;只能登录数据库。然后由DBA或其他用户授予他应有的权限,根据获得的权限情况他可以对数据库对象进行权限范围内的操作。
- 拥有RESOURCE权限的用户能创建基本表和视图,称为所创建对象的属主。但是不能创建模式,不能创建新的用户。数据库对象的属主可以使用GRANT语句把该对象上的存取权限授予其他用户。
- 拥有DBA权限的用户是系统中的超级用户,可以创建新的用户、创建模式、创建基本表和视图等。DBA拥有所有数据库对象的存取权限,还可以把这些权限授予一般用户。
1.2 数据库角色
数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。
1.2.1 角色的创建
CREATE ROLE <角色名>
刚刚创建的角色是空的,没有任何内容。可以用GRANT为角色授权。
1.2.2 给角色授权
GRANT <权限> [,<权限>]...
ON <对象类型> <对象名>
TO <角色> [,<角色>]...
DBA和用户可以利用GRANT语句将权限授予某一个或几个角色。
1.2.3 将一个角色授予其他的角色或用户
GRANT <角色1> [,<角色2>]...
TO <角色3> [,<用户1>]...
[WITH ADMIN OPTION]
该语句把角色授予某用户,或授予另一个角色,这样,一个角色所拥有的权限就是授予它的全部角色所包含的权限的总和。
如果指定了WITH ADMIN OPTION子句,则获得某种权限的角色或用户还可以把这种权限再授予其他的角色。
1.2.4 角色权限的收回
REVOKE <权限> [,<权限>]...
ON <对象类型> <对象名>
FROM <角色> [,<角色>]...