MySQL数据库安全之防止撰改的方法
MySQL数据库可以通过触发器,使之无法修改某些字段的数据,同时又不会影响修改其他字段。 DROP TRIGGER IF EXISTS members
;SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='';DELIMITER //CREATE TRIGGER members
BEFOR
MySQL数据库可以通过触发器,使之无法修改某些字段的数据,同时又不会影响修改其他字段。
DROP TRIGGER IF EXISTS members
;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='';
DELIMITER //
CREATE TRIGGER members
BEFORE UPDATE ON members
FOR EACH ROW BEGIN
set new.name = old.name;
set new.cellphone = old.cellphone;
set new.email = old.email;
set new.password = old.password;
END//
DELIMITER ;
SET SQL_MODE=@OLD_SQL_MODE;
再举一个例子:
CREATE TABLE account
(
id
INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
user
VARCHAR(50) NOT NULL DEFAULT '0',
cash
FLOAT NOT NULL DEFAULT '0',
PRIMARY KEY (id
)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
每一次数据变化新增一条数据
INSERT INTO test
.account
(user
, cash
) VALUES ('neo', -10);
INSERT INTO test
.account
(user
, cash
) VALUES ('neo', -5);
INSERT INTO test
.account
(user
, cash
) VALUES ('neo', 30);
INSERT INTO test
.account
(user
, cash
) VALUES ('neo', -20);
保护用户的余额不被修改
DROP TRIGGER IF EXISTS account
;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='';
DELIMITER //
CREATE TRIGGER account
BEFORE UPDATE ON account
FOR EACH ROW BEGIN
set new.cash = old.cash;
END//
DELIMITER ;
SET SQL_MODE=@OLD_SQL_MODE;