博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5.8. Token 认证
阅读量:6694 次
发布时间:2019-06-25

本文共 1322 字,大约阅读时间需要 4 分钟。

我们在staff表的基础上增加 token 字段

CREATE TABLE `staff` (	`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '员工ID',	`name` VARCHAR(50) NOT NULL COMMENT '员工名字',	`token` VARCHAR(32) NOT NULL COMMENT 'Token 校验',	PRIMARY KEY (`id`))COMMENT='员工表'COLLATE='utf8_general_ci'ENGINE=InnoDB;

插入数据的时候增加一些干扰字符串,这里使用concat(NEW.id,'+',NEW.name,'-')

CREATE DEFINER=`root`@`%` TRIGGER `staff_before_insert` BEFORE INSERT ON `staff` FOR EACH ROW BEGINif md5(concat(NEW.id,'+',NEW.name,'-')) != NEW.token then		SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Permission denied', MYSQL_ERRNO = 1001;	end if;END

注意表权限可以授权给用户,触发器权限不让普通用户查看。否则用户看到 concat(NEW.id,'+',NEW.name,'-') 就没有意义了。

下面开始测试:

INSERT INTO `test`.`staff` (`name`, `token`) VALUES ('John', '678797066');/* SQL错误(1001):Permission denied */

下面再测试,首先生成一个正确的tokon, 然后使用该token插入数据:

-- 通过下面语句生成一个 Tokenselect md5(concat('5','+','Jam','-')) as token;-- 使用上面的 Token 插入数据INSERT INTO `test`.`staff` (`id`, `name`, `token`) VALUES (5, 'Jam', '1b033ce21cbadacabc9f0c38fb58dbb2');SELECT * FROM `test`.`staff` WHERE `id` = 5;

开发注意事项, Token 生成算法要保密,不要使用下面SQL提交数据

INSERT INTO `test`.`staff` (`id`, `name`, `token`) VALUES (5, 'Jam', md5(concat('5','+','Jam','-')));

应该分两步,一是计算Token,二是插入数据。可以将Token计算交给程序而不是SQL,并且封装在。jar(Java)中或者。so(PHP 扩展中).

原文出处:Netkiller 系列 手札

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

你可能感兴趣的文章
爱奇艺短视频软色情识别技术解析
查看>>
腾讯云宣布核心产品全线降价,最高降幅达50%
查看>>
理解JavaScript中的this
查看>>
云帮一周问答集锦(10.31-11.06)
查看>>
mysql全文索引的原理
查看>>
Node.js + Redis Sorted Set 任务队列
查看>>
验证码破解技术四部曲之使用Tesseract(二)
查看>>
Retrofit2.0 公共参数(固定参数)
查看>>
webpack使用之基础篇
查看>>
如何避免if else
查看>>
android团队对新技术的态度
查看>>
『.NET Core CLI工具文档』(十)dotnet-build
查看>>
AngularJS中$q的promise使用及链式调用传值问题
查看>>
Scala Essentials: 类型约束
查看>>
JS异步那些事 二 (分布式事件)
查看>>
[分享]iOS开发-50行代码实现图文混排
查看>>
Ruby on Rails Ping ++ 支付
查看>>
[图像处理]ubuntu下Qt+Opencv配置过程
查看>>
Java 8:如何使用流方式查询数据库?
查看>>
如何修改 git 记录?
查看>>