【问题标题】:creating user in mysql using java使用java在mysql中创建用户
【发布时间】:2013-07-08 05:25:11
【问题描述】:

MySQL 命令行客户端以 root 身份登录后,我输入:

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 工作?

请帮忙。

【问题讨论】:

  • 我立即看到的一件事是您的 INSERT 查询是一个字符串,而您的 GRANT 查询不是。
  • @Xperiaz X 作为 root 你的意思是来自 linux 终端吗?
  • 不是所有的数据库都支持通过JDBC的DDL命令,所以你可能根本无法通过JDBC修改数据库结构。
  • no 在windows中进入sql命令行客户端需要输入root密码。 MySQL 根不是 linux 根。
  • MySQL 是否支持 DDL?还是需要新的驱动程序?

标签: java mysql mysql-connector grant


【解决方案1】:

你只是忘记了引号。

【讨论】:

  • 我的错,在代码中我已经引用了但在这里我忘记输入了
  • @XperiazX 在这种情况下你应该看看我的答案。检查 ExtendedAnsiSQL 标志
【解决方案2】:
put.execute(MySQL query) 

在这里你只能执行 MySQL 查询,但是

grant all privileges on mydb.* to 'admin'@'localhost' identified by 'pass';

不是 MySQL 查询,它只是 MySQL 的命令。

【讨论】:

  • 哦,我明白了。那么是否可以通过 java 向 MySQL 发送命令呢?
  • 您必须通过 MySQL 管理终端(命令行)设置用户权限
  • 不能用java吗?我的应用程序正在添加一名员工(因此添加了一个数据库用户)。然后员工可以访问数据库中的其他表
  • MySQL 用户不能通过 java 设置权限。
  • 是的,最后我实现了。对于我的程序,只要我们有 root id 和密码,我们就可以通过 java 设置除授予选项之外的所有权限。无论如何,这个答案对我帮助很大。谢谢你:)
【解决方案3】:

尝试关注

put.execute("grant all privileges on mydb.* to 'john'@'localhost' identified by 'pass'"); 

还要确保您的 ExtendedAnsiSQL 标志为 1。

【讨论】:

  • 对不起,在代码中我放了引号,但在这里我忘了在这里输入。扩展的 AnsiSQL 标志?请告诉它是什么?
【解决方案4】:

我尝试使用查询参数 - 我发现有些令人困惑的是,例如,您必须在参数和 @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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多