数据库记录安全解决方案

news/2024/7/12 2:29:18 标签: 数据库, 移动开发, devops

数据库记录安全解决方案

http://netkiller.github.io/journal/mysql.security.html

MrNeo Chen (netkiller)陈景峰(BG7NYT)


中国广东省深圳市龙华新区民治街道溪山美地
518131
+86 13113668890
+86 755 29812080

版权 © 2014 http://netkiller.github.io

版权声明

转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。

文档出处:
http://netkiller.github.io
http://netkiller.sourceforge.net

 

2014-08-19

摘要

防删除,放撰改,灵活性解决方案

我的系列文档
Netkiller Architect 手札Netkiller Developer 手札Netkiller PHP 手札Netkiller Python 手札Netkiller Testing 手札Netkiller Cryptography 手札
Netkiller Linux 手札Netkiller Debian 手札Netkiller CentOS 手札Netkiller FreeBSD 手札Netkiller Shell 手札Netkiller Security 手札
Netkiller Web 手札Netkiller Monitoring 手札Netkiller Storage 手札Netkiller Mail 手札Netkiller Docbook 手札Netkiller Version 手札
Netkiller Database 手札Netkiller PostgreSQL 手札Netkiller MySQL 手札Netkiller NoSQL 手札Netkiller LDAP 手札Netkiller Network 手札
Netkiller Cisco IOS 手札Netkiller H3C 手札Netkiller Multimedia 手札Netkiller Perl 手札Netkiller Amateur Radio 手札Netkiller DevOps 手札

目录
  • 1. 什么是防删除,防撰改
  • 2. 为什么要做防删除,防撰改限制
  • 3. 何时做防删除,防撰改限制
  • 4. 在哪里做防删除,防撰改限制
  • 5. 谁去做防删除,防撰改限制
  • 6. 怎么做防删除,防撰改限制
    • 6.1. 限制删除
    • 6.2. 限制修改
    • 6.3. 版本控制

1. 什么是防删除,防撰改

禁止数据删除,数据一旦增加不允许数据被任何人删除

禁止数据修改,数据一旦建立不允许对数据做修改操作

2. 为什么要做防删除,防撰改限制

很多时候我们的数据是只增加,不会删除数据。有些敏感子段一旦数据家里是不允许再修改的,例如银行账户表中的资金子段。

另一个原因是我们防止误操作

3. 何时做防删除,防撰改限制

我认为在数据库设计时就应该考虑倒这些问题,如果发现数据被删除或者被撰改,亡羊补牢也不晚,我们不能允许再次发生。

你可以取消用户的 DELETE 权限,使之只能做查询操作,但修改(UPDATE)呢?你就无能为力!如果取消UPDATE程序将不能正常运行。

4. 在哪里做防删除,防撰改限制

程序设计之初你就应该想到这些问题,如果没有考虑倒,你只能修改现有逻辑。通常的做法是所有表增加一个删除状态子段,删除操作即是更新状态。这种方式也有弊端就是垃圾数据会不停地膨胀。

5. 谁去做防删除,防撰改限制

我认为可以分为两种人,一种是DBA,一种是开发者。这里主要将数据库部分。

6. 怎么做防删除,防撰改限制

6.1. 限制删除

CREATE DEFINER=`dba`@`192.168.%` TRIGGER `account_before_delete` BEFORE DELETE ON `account` FOR EACH ROW BEGIN
	SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Permission denied', MYSQL_ERRNO = 1001;
END
			

对account表中的记录做删除操作,数据库抛出异常 Permission denied

6.2. 限制修改

CREATE DEFINER=`dba`@`192.168.%` TRIGGER `members_before_update` BEFORE UPDATE ON `members` FOR EACH ROW BEGIN
	SET NEW.`id` = OLD.id;
	SET NEW.`name` = OLD.name;
	SET NEW.`chinese_name` = OLD.chinese_name;
	SET NEW.`english_name` = OLD.english_name;
	SET NEW.`sex` = OLD.sex;
	SET NEW.`address` = OLD.address;
	SET NEW.`zipcode` = OLD.zipcode;
	SET NEW.`country_code` = OLD.country_code;
	SET NEW.`mobile` = OLD.mobile;
	SET NEW.`email` = OLD.email;
	SET NEW.`qq` = OLD.qq;
	SET NEW.`question` = OLD.question;
	SET NEW.`answer` = OLD.answer;
	SET NEW.`ctime` = OLD.ctime;
END
			

数据库修改前我们覆盖掉修改的数据,使之更新后数据保持不变。

6.3. 版本控制

主表

CREATE TABLE `article` (
	`article_id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
	`cat_id` SMALLINT(5) NOT NULL DEFAULT '0',
	`title` VARCHAR(150) NOT NULL DEFAULT '',
	`content` LONGTEXT NOT NULL,
	`author` VARCHAR(30) NOT NULL DEFAULT '',
	`keywords` VARCHAR(255) NOT NULL DEFAULT '',
	PRIMARY KEY (`article_id`),
	INDEX `cat_id` (`cat_id`)
)
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=1			
			

本版控制表,用于记录每次变动

CREATE TABLE `article_history` (
	`id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
	`article_id` MEDIUMINT(8) UNSIGNED NOT NULL,
	`cat_id` SMALLINT(5) NOT NULL DEFAULT '0',
	`title` VARCHAR(150) NOT NULL DEFAULT '',
	`content` LONGTEXT NOT NULL,
	`author` VARCHAR(30) NOT NULL DEFAULT '',
	`keywords` VARCHAR(255) NOT NULL DEFAULT '',
	PRIMARY KEY (`id`),
	INDEX `article_id` (`article_id`)
)
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=1
			

版本控制触发器

DROP TRIGGER article_history;

DELIMITER //
CREATE TRIGGER article_history BEFORE update ON article FOR EACH ROW
BEGIN
	INSERT INTO article_history SELECT * FROM article WHERE article_id = OLD.article_id;
END; //
DELIMITER;					
			

任何数据的变化都会复制一份到历史表,我们可以随时比较两个版本数据的变化,我还为此开发了一个类似diff的工具,可以逐行比较,通过色彩变化现实数据的不同。


http://www.niftyadmin.cn/n/1448620.html

相关文章

vuex的依赖包试试啊_Vuex 安装

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。首先我们来了解一下Vuex的安装,后面我们再继续具体讲解什么是Vuex。下载安装Vuex 有三种安装方式,下面我们一起来看一下:直接下载我们可以直接下载vuex的文件,链接地址&#…

阿的江:遗憾裁掉张庆鹏 亚锦赛小组出线难度太大(转)

北京时间7月25日,即将出征亚锦赛的中国男篮二队在北京进行了一堂公开课,这也是国家二队集训以来首次公开训练课。主教练阿的江在训练结束接受了媒体的采访。他表示亚锦赛小组对手很强,对于任何结果都有心理准备。问:请您谈谈张庆鹏…

小的知识点

1、计算机中内存地址是用16进制数表示的,以0x开头; 2、Xcode4之前的编译器是GCC,Xcode4及以后版本是clang(基于LLVM) 3、c语言现在一般都采用C99标准 4、Apple一些划时代的产品: 1>iPhone4: 2010年发布,…

uva 1329 - Corporative Network(加权并查集)

题目链接:uva 1329 - Corporative Network 题目大意:有n个节点,初始时每个节点的父节点都不存在,每次执行一个I操作和E操作: I操作:吧节点u的父节点设为v,距离为|u-v| % 1000,输入保…

combobox异步加载 easyui_easyui combobox使用JSONP加载数据源

本示例使用JSONP加载easyui combobox的数据源实现跨域请求数据,easyui版本为jQuery EasyUI 1.3.4。高版本的jquery可以直接配置url增加jsonp特有参数如url?xxx?,这样请求的地址非同源域名会自动启用jsonp操作,如果是低版本的jquery&#xf…

linux系统修改SSH最大连接数,修改nofile,nproc参数方法

1、vi /etc/security/limits.conf* soft nofile 65535* hard nofile 65535* soft nproc 65535* hard nproc 65535参照示例,正常修改(Redhat6.4)2、vi /etc/security/limits.d/90-nproc.conf* hard nproc…

病毒及木马预警一周播报(06.04.17~04.23)(转)

波特病毒变种频出 小心电脑成“僵尸” 本周新出现了上百个波特类病毒的变种。用户的计算机感染此类病毒后,可被黑客远程控制,组成“僵尸网络”。同时,用户的帐号、密码及其它隐私信息都有可能被黑客窃取。本周关注病毒:波特后门变…

mysql 乘法触发器_Mysql中的触发器

阅读目录什么是触发器特点及作用例子:创建触发器,记录表的增、删、改操作记录弊端什么是触发器简单的说,就是一张表发生了某件事(插入、删除、更新操作),然后自动触发了预先编写好的若干条SQL语句的执行;特点及作用特点…