设为首页 加入收藏

TOP

分布式数据库中间件?(2)Cobar与客户端的握手认证(三)
2014-11-23 23:25:56 来源: 作者: 【 】 浏览:25
Tags:分布式 数据库 中间件 Cobar 客户端 握手 认证
02 // check quit packet
03 if (data.length == QuitPacket.QUIT.length && data[4] == MySQLPacket.COM_QUIT) {
04 source.close();
05 return;
06 }
07
08 //新建认证包对象
09 AuthPacket auth = new AuthPacket();
10 //读取认证包到对象
11 auth.read(data);
12 // check user
13 if (!checkUser(auth.user, source.getHost())) {
14 failure(ErrorCode.ER_ACCESS_DENIED_ERROR, "Access denied for user '" + auth.user + "'");
15 return;
16 }
17 // check password
18 if (!checkPassword(auth.password, auth.user)) {
19 failure(ErrorCode.ER_ACCESS_DENIED_ERROR, "Access denied for user '" + auth.user + "'");
20 return;
21 }
22 // check schema
23 switch (checkSchema(auth.database, auth.user)) {
24 case ErrorCode.ER_BAD_DB_ERROR:
25 failure(ErrorCode.ER_BAD_DB_ERROR, "Unknown database '" + auth.database + "'");
26 break;
27 case ErrorCode.ER_DBACCESS_DENIED_ERROR:
28 String s = "Access denied for user '" + auth.user + "' to database '" + auth.database + "'";
29 failure(ErrorCode.ER_DBACCESS_DENIED_ERROR, s);
30 break;
31 default:
32 //认证成功,向客户端发送认证结果消息
33 success(auth);
34 }
35 }

在上面的auth.read函数中会按9中的协议格式进行读取数据到auth对象。认证成功后会执行:

01 protected void success(AuthPacket auth) {
02 //认证通过,设置连接属性:已认证\用户\数据库\处理器
03 source.setAuthenticated(true);
04 source.setUser(auth.user);
05 source.setSchema(auth.database);
06 source.setCharsetIndex(auth.charsetIndex);
07 //设置该连接的连接处理器为前端命令处理器
08 source.setHandler(new FrontendCommandHandler(source));
09 .......
10 ByteBuffer buffer = source.allocate();
11 source.write(source.writeToBuffer(AUTH_OK, buffer));
12 }

可以看到,在上面的函数中,设置连接对象source中的成员(是否认证、用户、数据库、编码、处理该连接后续数据包的处理器【handle方法】)

然后回复认证成功的消息。后面客户端再发送消息,会交给前端命令处理器进行处理。

客户端进行链接的时候Cobar服务器的输出:

01 16:59:19,388 INFO ===============================================
02 16:59:19,389 INFO Cobar is ready to startup ...
03 16:59:19,389 INFO Startup processors ...
04 16:59:19,455 INFO Startup connector ...
05 16:59:19,460 INFO Initialize dataNodes ...
06 16:59:19,506 INFO dnTest1:0 init success
07 16:59:19,514 INFO dnTest3:0 init success
08 16:59:19,517 INFO dnTest2:0 init success
09 16:59:19,527 INFO CobarServer is started and listening on 8066
10 16:59:19,527 INFO ===============================================
11 16:59:23,459 DEBUG 1>>NIOReactor接受连接数:0
12 16:59:23,464 DEBUG 2>>NIOReactor接受连接数:1
13 16:59:23,465 DEBUG select读事件
14 16:59:23,465 INFO com.alibaba.cobar.net.handler.FrontendAuthenticator接收的请求长度:62
15 58 0 0 1 5 166 15 0 0 0 0 1 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 114 111 111 116 0 20 169 171 247 102 133 96 158 224 121 22 226 229 88 244 119 238 185 61 124 219
16 16:59:23,468 INFO [thread=Processor1-H0,class=ServerConnection,host=192.168.137.8,port=46101,schema=null]'root' login success

客户端得到的回复:

01 yan@yan-Z400:~$ mysql -uroot -p** -P8066 -h192.168.137.8
02 Welcome to the MySQL monitor. Commands end with ; or \g.
03 Your MySQL connection id is 1
首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇(一)什么是高可用性解决方案? 下一篇复合索引的列顺序判断

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: