以 root 身份登录后,在 MySQL 命令行客户端中,我输入:
connect mydb;
grant all privileges on mydb.* to 'admin'@'localhost' identified by 'pass';
现在在 Java 中, 我使用驱动程序使用管理员用户 ID 成功连接到数据库。
Statement put=connect.createStatement();
//**WORKS succesfully**
put.execute("insert into mydb.emp values(100,joe)");
//**does NOT work**
put.execute("grant all privileges on mydb.* to 'john'@'localhost' identified by 'pass'");
为什么在 Java 中插入命令可以工作但 grant 命令却不能工作?
请帮忙。
put.execute(MySQL query)
在这里你只能执行MySQL查询,但是
grant all privileges on mydb.* to 'admin'@'localhost' identified by 'pass';
不是 MySQL 查询,它只是 MySQL 的命令。
你只是忘记了引号。
尝试以下
put.execute("grant all privileges on mydb.* to 'john'@'localhost' identified by 'pass'");
还要确保您将 ExtendedAnsiSQL 标志设置为 1。
我尝试使用查询参数 - 我发现有些令人困惑的是你必须在参数和@localhost之间添加一个空格,例如 - 这对我有用:(jpaEm在这里是一个JpaEntityManager)
// Create user
String sql = "CREATE USER ? @localhost";
Query query = jpaEm.createNativeQuery(sql);
query.setParameter(1, user.getUserName());
jpaEm.getTransaction().begin();
query.executeUpdate();
jpaEm.getTransaction().commit();
// Set password
sql = "SET PASSWORD FOR ? @localhost = PASSWORD(?)";
query = jpaEm.createNativeQuery(sql);
query.setParameter(1, user.getUserName());
query.setParameter(2, user.getPassword());
jpaEm.getTransaction().begin();
query.executeUpdate();
jpaEm.getTransaction().commit();
也许到目前为止这可以帮助某人。我用下面的代码解决了它。
String db = "data";
String us = "Luis";
String pas = "123456";
//-----Connection to the server------------
Class.forName("com.mysql.cj.jdbc.Driver");
cntConnec =
DriverManager.getConnection("jdbc:mysql:///","admin","admin");
Statement stmMysql = cntConnec.createStatement();
JOptionPane.showMessageDialog(null, "Successful Connection");
//-------Create a new DB------------
stmMysql.execute("CREATE DATABASE "+db);
stmMysql.execute("USE "+db);
stmMysql.execute("CREATE TABLE bobo_table (f00 char(31))");
//-------Create a user with all privileges--------------
stmMysql.executeUpdate("CREATE USER "+us+"@'localhost' IDENTIFIED BY
'"+pas+"'");
stmMysql.executeUpdate("GRANT ALL PRIVILEGES ON "+db+".* TO
"+us+"@'localhost' WITH GRANT OPTION");
stmMysql.executeUpdate("FLUSH PRIVILEGES");
stmMysql.close();