[oceanbase] ob
[oceanbase] ob
导读
换换口味, 来瞧瞧国产数据库oceanbase的密码相关知识. 由于我们可以使用mysql
命令连接ob, 所以基本上可以确定ob的密码加密和mysql的mysql_native_password
一样了.(认证过程和加密方式都一样, 所以这口味换了个寂寞...).
国产数据库很多安装都费劲, 而且不少要求的资源根本不是笔记本能满足的, 想要学习的dba/开发很难入手. 但最近白嫖了1年的ob,就体验体验
以前二手的t450都能安装12C RAC, 但在国产数据库面前就甭想了, 我20C 64GB的笔记本都只能勉强安装丐版.
原理
我们还是先使用mysql登录数据库查看下库信息, 比mysql少了sys和performance_schema, 有的mysql和information_schema估计也是虚拟的, 真实的数据应该是在oceanbase下面.
代码语言:sql复制mysql> show databases;
+--------------------+
| Database |
+--------------------+
| db1 |
| information_schema |
| mysql |
| oceanbase |
+--------------------+
4 rows in set (0.04 sec)
我们本次主要看mysql.user表
mysql> select * from mysql.user where user='ddcw'\G
*************************** 1. row ***************************
host: %
user: ddcw
password: *6bb487eb7429105ee4568dda7dc67ed2ca2ad9
select_priv:
insert_priv:
update_priv:
delete_priv:
create_priv:
drop_priv:
reload_priv:
shutdown_priv:
process_priv:
file_priv:
grant_priv:
references_priv:
index_priv:
alter_priv:
show_db_priv:
super_priv:
create_tmp_table_priv:
lock_tables_priv:
execute_priv:
repl_slave_priv:
repl_client_priv:
create_view_priv:
show_view_priv:
create_routine_priv:
alter_routine_priv:
create_user_priv:
event_priv:
trigger_priv:
create_tablespace_priv:
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questi: 0
max_updates: 0
max_connecti: 0
max_user_connecti: 0
plugin: ob_native_password
authentication_string:
password_expired:
account_locked:
drop_database_link_priv:
create_database_link_priv:
create_role_priv:
drop_role_priv:
1 row in set (0.09 sec)
密码插件叫ob_native_password
, 很容易让人联想到mysql_native_password. 加密之后的密码是*6bb487eb7429105ee4568dda7dc67ed2ca2ad9
, 居然是小写字母..... 而且不是mysql的名字authentication_string, 感觉兼容性比较怪. (兼容了,但不完全兼容)
加密原理应该和mysql一样, 也是对密码做2次hash1. 我们查看源码(oceanbase-develop/deps/oblib/src/lib/encrypt/ob_encrypted_)发现了如下注释信息:
代码语言:c++复制/*
* MySQL validation logic:
* Server stores the 'stage2' hash, which is cleartext password calc-ed sha1 twice.
* When login, server sends random scramble str.
* Client gets the scramble, use this logic to generate login rsp:
* stage1 = sha1(passwd)
* stage2 = sha1(stage1)
* scrambled_stage2 = sha1(scramble_got_from_server, stage2)
* login_rsp = xor(stage1, scrambled_stage2)
*
**/
int ObEncryptedHelper::encrypt_password(ct ObString &raw_pwd, ct ObString &scramble_str,
char *pwd_buf, ct int64_t buf_len, int64_t ©_len)
{
.....
}
确实是做的2次hash1, (连接的时候会加salt). OBO也可以使用mysql连接, 所以obo里面的密码应该也是这样的.但没得相关环境,无法验证(白嫖的1年只能选一种模式....)
我们可以自己使用sql来验证下.
代码语言:sql复制mysql> select password from mysql.user where user='ddcw';
+-------------------------------------------+
| password |
+-------------------------------------------+
| *6bb487eb7429105ee4568dda7dc67ed2ca2ad9 |
+-------------------------------------------+
1 row in set (0.06 sec)
mysql> select COCAT('*', SHA1(UHEX(SHA1('12456'))));
+-------------------------------------------+
| COCAT('*', SHA1(UHEX(SHA1('12456')))) |
+-------------------------------------------+
| *6bb487eb7429105ee4568dda7dc67ed2ca2ad9 |
+-------------------------------------------+
1 row in set (0.1 sec)
这密码字段叫password, 于是mysql客户端就不会记录到历史命令中, 就无法往上翻了...
密码确实是做的两次sha1.
我们再来看看我们之前写的连接Mysql的脚本, 这个脚本是兼容某些兼容mysql的国产数据库的. 测试还是非常方便.
代码语言:python代码运行次数:0运行复制import pymysql
conn = (
host='',
port=06,
user='ddcw',
password='12456',
)
cursor = ()
('select @@version')
print(cursor.fetchall())
很遗憾, 我们的脚本并不行....
来看看正版的pymysql 是没得问题的. 这兼容性就比较怪了....(有空了再去调试调试吧.)
总结
ob_native_password和Mysql的mysql_native_password基本上是一样的(从原理来说). 比较要兼容性嘛.具体实现不同. 而且登录时密码验证过程有点区别(我那个丐版pymysql就是例子.)
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 19 条评论) |
本站网友 梦到未婚生子 | 9分钟前 发表 |
password='12456' | |
本站网友 北京整鼻子多少钱 | 16分钟前 发表 |
居然是小写字母..... 而且不是mysql的名字authentication_string | |
本站网友 水蛭的功效与作用 | 23分钟前 发表 |
create_view_priv | |
本站网友 微信财富宝 | 30分钟前 发表 |
代码语言:c++复制/* * MySQL validation logic | |
本站网友 大众点评外卖 | 28分钟前 发表 |
super_priv | |
本站网友 梅州二手房 | 16分钟前 发表 |
所以基本上可以确定ob的密码加密和mysql的mysql_native_password一样了.(认证过程和加密方式都一样 | |
本站网友 渝北房屋出租 | 29分钟前 发表 |
create_priv | |
本站网友 枪支 | 25分钟前 发表 |
password='12456' | |
本站网友 两会图片 | 13分钟前 发表 |
create_priv | |
本站网友 睡魔3d | 0秒前 发表 |
无法验证(白嫖的1年只能选一种模式....)验证我们可以自己使用sql来验证下.代码语言:sql复制mysql> select password from mysql.user where user='ddcw'; +-------------------------------------------+ | password | +-------------------------------------------+ | *6bb487eb7429105ee4568dda7dc67ed2ca2ad9 | +-------------------------------------------+ 1 row in set (0.06 sec) mysql> select COCAT('*' | |
本站网友 第一财经广播 | 15分钟前 发表 |
server sends random scramble str. * Client gets the scramble | |
本站网友 北京购物 | 22分钟前 发表 |
0 plugin | |
本站网友 天堂的路 | 2分钟前 发表 |
execute_priv | |
本站网友 爱看色 | 10分钟前 发表 |
来瞧瞧国产数据库oceanbase的密码相关知识. 由于我们可以使用mysql命令连接ob | |
本站网友 聂振邦 | 1分钟前 发表 |
reload_priv | |
本站网友 圆通事件 | 11分钟前 发表 |
alter_priv | |
本站网友 大邑房屋出租 | 12分钟前 发表 |
感觉兼容性比较怪. (兼容了 | |
本站网友 罗信记 | 14分钟前 发表 |
ct ObString &scramble_str |