学习完SQL后,开始学习数据库安全性知识,如何对数据进行保护
1、数据库安全性控制
1.1 用户身份鉴别
每个用户在数据库中都有一个用户标识,需要在用户使用数据前鉴别用户是否为持有该标识的真实用户
- 静态口令鉴别(密码)
- 动态口令鉴别(验证码)
- 生物特征鉴别(扫脸,眨眨眼,张张嘴)
- 智能卡鉴别(通行证,磁卡存储信息)
1.2 存取控制
数据库需要保证未授权相关权限的用户无法使用数据库相关功能,这主要靠存取控制实现
包括定义用户权限、合法权限检查
1.3 自主存取控制方法
用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的权限转授给其他用户
1.4 强制存取控制方法
每一个数据库对象被标记不同的密级,不同的用户被授予不同的通行证,决定了他们的权限
2、授权:授权与收回
2.1 权限的授予
权限包括select、update、insert、delete、references、all privileges
grant select
on Student
to wbc; --赋予wbc用户查询Student表的权限
--on后面不需显示指定数据类型,wbc用户必须存在
-- T-SQL不支持同时授予用户多个对象的权限,且不需要privileges
grant all
on Student
to wbc;
grant all
on Course
to wbc;
grant select
on SC
to public; --查询权限授予所有用户
可见T-SQL有自己的想法
也可仅仅把使用基本表具体某一列的权限授予用户
grant update(Sno),select
on Student
to root_wbc; --授予该用户修改学号属性和查询的权限
授予权限语句后添加 with grant option ,该用户可将权限转授
grant insert
on Student
to wbc
with grant option; --该用户可将插入权限授予给别的用户
2.2 权限的收回
revoke select
on Student
from wbc; --可执行
/*revoke insert
on Student
from wbc; --无法成功执行,因为该权限可转授,需显式指定cascade,将转授的一并收回*/
revoke insert
on Student
from wbc cascade; --可执行
T-SQL在这居然能支持cascade了
3、数据库角色
角色是一组权限的集合,可以将角色的权限授予用户,类似继承,用户是子类,角色是基类
3.1 创建角色
create role a_student; --创建一个角色
3.2 给角色授权
与直接授予用户权限一样
grant select,insert
on SC
to a_student; --授予盖角色权限
角色的权限是用来给用户的
/*grant a_student
to wbc; --T-SQL不支持*/
看了看帮助文档,似乎是出于安全性考虑,默认的角色不具备把自身权限授予用户的权限,因为不确保用户是否是安全的,需要手动设置该用户安全
exec sp_addrolemember 'a_student','wbc' --a_student获取授予wbc自身权限的权限,wbc是安全的用户
alter role a_student
add member wbc;
3.3 角色权限的收回
revoke insert
on SC
from a_student; --回收角色的某个权限
revoke all
on SC
from a_student; --回收角色的所有权限
--如果授予角色权限时使用了with grant option,则需cascade
感觉T-SQL和标准SQL有好多不同的地方,需要多注意区分