SQL中为了防止有意无意的损害,有很多的安全机制。其中主要的是Discretionary control(自主存取控制),Mandatory control(强制存取控制)与对用户的权限控制。

Discretionary control对不同的数据对象和不同的用户赋予了不同的权限,没有固定的关于哪些对象存取权限的权限限制。但是这样的每一个的去赋予权限也未免太多繁琐,而且也不便于管理,每次添加用户的时候都要对他从新赋予权限。

Mandatory control中的每一个数据对象都被标上了一定的密级,每一个用户也被授予一个许可证级别。当用户得到他的许可级别,即可去操作相应的数据对象。我觉得这个和角色的功能差不多。

在数据库中一般是两种存取控制相互作用。

其实在一开始,不能分清楚“登陆账户”、“数据库用户”、“角色”的区别。对于我来说它们都是用来操作数据的。今天看书终于弄清楚了。

LOGIN是登陆到数据库中的账户;而login可以映射很多的数据库中的USER,这些user才是操作数据对象的主体;而这些user对数据对象又有不同的权限,将有相同权限的user组成一组,这就是所谓的role。

数据库就好像是一个学校,login是进入学校的钥匙,user是学校的老师,能进入学校的老师有很多个,每门课可以有好几个老师来教导。我们按照课程的不同将老师分成语文老师,数学老师等,这就相当于role,这些role所教授的的课程是相同的。在数据库中role也是有相同权限的用户所组成。当老师从学校离职时,就不再教授课程,也就是revoke权限。

安全性是数据库非常重要的一部分,对于权限的分配要谨慎,with  grant option我自我觉得还是少用比较好,以免权限被非法用户接受,造成不必要的损失。