一、数据库的存取控制
存取控制是数据库安全技术之一,其它的安全技术还有用户身份鉴别、审计、视图和数据加密。在web应用系统开发过程中,我们也是常用到这些技术。比如进入系统之前需要进行登录,这就是用户身份鉴别;在对数据表的操作时,我们可以为每一个子系统、子用户定义一个视图,这样相关权限的用户只能看到和操作和自己有关的数据,从而确保的数据库中数据的安全,视图还有一个比较大的作用就是可以实现数据库的数据独立性;数据加密在开发中更是常用了,比如在数据库中保存用户密码时,我们都会加密,比如md5/base64等,一般不会原文暴露在数据库中,这样很不安全。
接下来说说数据库的存储控制,存储控制确保了只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接近数据库。
存取控制机制主要包括定义用户权限和合法权限检查两部分
(1)定义用户权限
为每个类型、不同权限的系统用户创建数据库用户,并将相应的数据库操作权限授予该用户,比如可以对那个表进行增删查改等怎样的操作。
(2)合法权限检查
不同权限的用户登录应用系统时,应该采用该用户相应的数据库用户连接数据库,这样可以确保该用户只能操作有权限的数据,从而确保了数据库的安全。
二、小demo
需求:
后台管理系统有超级管理员和普通管理员,这两个角色的权限不一样
实现:
1、创建普通管理员数据库账号(超级管理员可用数据库超级用户也可再创建一个)
--创建普通管理员数据库账号
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin';
2、对数据库角色进行授权
--对普通管理员数据库账号授权,除了对管理员表,其他表拥有全部权限
GRANT all privileges ON db_shop.address TO 'admin'@'localhost';
......
3、根据登录用户不同,选择不同的数据库账号连接数据库
if(isset($_SESSION['isSuper']) && $_SESSION['isSuper']){
$link=mysqli_connect(DB_HOST,DB_USERNAME,DB_PASSWORD,DB_NAME)
or die("连接数据库失败");
}else{
$link=mysqli_connect("localhost","admin","admin","db_shop")
or die("连接数据库失败");
}
这样就可以通过数据库的存取控制实现系统角色控制,这种方法实现的安全性较高。