데이터베이스 기록 보안 솔 루 션
http://netkiller.github.io/journal/mysql.security.html
Mr. Neo Chen (netkiller), 진경 봉 (BG7NYT)
용화 신 구, 선전, 중국 광 둥 성 13113668890 +86 755 29812080
판권© 2014 http://netkiller.github.io
저작권 성명
전재 할 때 작가 와 연락 하 십시오. 전재 할 때 반드시 문장의 원시 출처 와 작가 의 정보 와 본 성명 을 표시 해 주 십시오.
문서 출처:
http://netkiller.github.io
http://netkiller.sourceforge.net
2014-08-19
요약
삭제 방지, 수정, 유연성 해결 방안
내 시리즈 문서
Netkiller 건축 가 의 친필 편지
Netkiller 개발 자 서찰
Netkiller PHP 서찰
Netkiller 파 이 썬 서찰
Netkiller 테스트 서찰
Netkiller Cryptography 서찰
Netkiller Linux 서찰
Netkiller 데 비 안 서찰
Netkiller CentOS 서찰
Netkiller FreeBSD 서찰
Netkiller Shell 서찰
Netkiller 보안 서찰
Netkiller 웹 서찰
Netkiller 모니터링 서찰
Netkiller 스토리 지 서찰
Netkiller 메 일 편지
Netkiller Docbook 친필 편지
Netkiller 버 전 서찰
Netkiller 데이터베이스 서찰
Netkiller PostgreSQL 서찰
Netkiller MySQL 서찰
Netkiller NoSQL 서찰
Netkiller LDAP 서찰
Netkiller 네트워크 서찰
Netkiller Cisco IOS 서찰
Netkiller H3C 서찰
Netkiller 멀티미디어 서찰
Netkiller 펄 서찰
Netkiller 아마추어 라디오 수 찰
Netkiller DevOps 서찰
목차
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 와 유사 한 도 구 를 개 발 했 습 니 다. 한 줄 한 줄 비교 할 수 있 고 색채 변 화 를 통 해 현실 데이터 의 차이 도 볼 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.