0

我有一个主要用java编写的系统。这个系统有一个简单的 MySQL 用户权限管理员。但现在我们开始与更多用户合作,用户名的长度现在超过 16 个字符。我修改了所有 mysql 系统表中的所有用户名长度属性。在 Webmin 和 PhPMyAdmin 中,修改密码和表 <=> 用户关系可以正常工作。但是在这个 java 程序中,所有与长用户名相关的操作都将停止并抛出 SQLException 并显示消息:String '...long username...' is too long for user name(应该不超过 16)。

所以看起来问题出在jdbc中。如何强制在 SQL 操作中应用长用户名?(com.mysql.jdbc (5.1.24))

请求参数:

st.execute("CREATE USER '"+user+"'@'localhost' IDENTIFIED BY 'nothing';");
st.execute("SET PASSWORD FOR '"+user+"'@'localhost' = PASSWORD('"+passwd+"');");

堆栈跟踪:

java.sql.SQLException: String '...long username...' is too long for user name (should be no longer than 16)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.ja$
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2809)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2758)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:894)
at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:732)
4

2 回答 2

2

如果不重新编译 MySQL 源,您将无法更改 MySQL 用户名长度。请参阅5.1 文档中的此说明。MySQL 5.7 也是如此。

警告

MySQL 用户名长度的限制在 MySQL 服务器和客户端中是硬编码的,试图通过修改 mysql 数据库中表的定义来规避它是行不通的。

于 2013-09-25T14:52:59.447 回答
0

我找到了一个更好的解决方案:使用

"INSERT mysql.user (Host,user,Password) VALUES 'localhost','"+user+"',PASSWORD('"+passwd+"');"); 

介入

SET PASSWORD FOR '"+user+"'@'localhost' = PASSWORD('"+passwd+"');

MySQL 不会知道,您修改密码或创建用户,只需运行该语句。

于 2013-09-30T11:51:00.400 回答