데이터베이스 기록 보안 솔 루 션

5249 단어 mysqlnetkiller
데이터베이스 기록 보안 솔 루 션
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. 삭제 방지, 변경 방지 제한
  • 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 와 유사 한 도 구 를 개 발 했 습 니 다. 한 줄 한 줄 비교 할 수 있 고 색채 변 화 를 통 해 현실 데이터 의 차이 도 볼 수 있 습 니 다.

    좋은 웹페이지 즐겨찾기