你的理解并没有什么错误,但是有一个问题,1:
程序和数据库在同一个机子上,访问时用的是root加密码(也就是上面的第三个用户),成功!2:
把它们删除了,可是在连接时就说没有权限了
以上两种情况在登录时使用的是同一个登录设置??
你是怎么写的??
我怀疑你的登录设置实现上匹配的不是第三个而是第二个
将你的登录语句写出来看看你也可以在你正常登录到 mysql 服务器后,
执行下面这条语句
SELECT CURRENT_USER();查看你实现上匹配的是哪一个用户权限
如果返回是
-> '@localhost'那就说明匹配的是第二个

解决方案 »

  1.   

    我用的是javaBean连接的,连接数据库的那块是这样的(我在改动前以及改动后根本没有改javaBean文件):try
    {
       Class.forName("org.gjt.mm.mysql.Driver").newInstance();
       Properties pr = new Properties();
       pr.put("characterEncoding","GBK");  
       pr.put("useUnicode", "TRUE");       
    pr.put("user","root");      // MySQL Login User Name, Special define in MySQL, not for linux login ID
              pr.put("password", "");   // MySQL Login Password
              conn =  DriverManager.getConnection("jdbc:mysql://localhost:3306/ota3", pr);            //conn = DriverManager.getConnection("jdbc:odbc:FreeBSD","root","11");
    }
    catch(SQLException e)
    {
    WriteLog("Mysql():" +e.getMessage());
    System.err.println("Mysql():"+e.getMessage());
    }
    catch(java.lang.ClassNotFoundException e)
    {
    WriteLog("Mysql():" +e.getMessage());
    System.err.println("Mysql():"+e.getMessage());
    }
    catch(Exception e)
    {
    WriteLog("Mysql():" +e.getMessage());
    }
    }
      

  2.   

    pr.put("user","root");      // MySQL Login User Name, 
    pr.put("password", "");     // MySQL Login Password
    conn =  DriverManager.getConnection("jdbc:mysql://localhost:3306/ota3", pr);Host     = localhost
    Use      = root
    Password = 留空也等同于   mysql -h localhost -u root呵呵,
    由于第三个用户授权信息是有密码的,
    而你登录时却没有密码,
    所以你登录所匹配的用户是第二条你可以使用一个图形化客户端程序 再试一试
    :)
    MySQL-Front 一个很好的东东
      

  3.   

    上面个错了,是测试机器上的,实际的是这个:
    我用的是javaBean连接的,连接数据库的那块是这样的(我在改动前以及改动后根本没有改javaBean文件):  
     
    try  
    {  
         Class.forName(  "org.gjt.mm.mysql.Driver  ").newInstance();  
         Properties  pr  =  new  Properties();  
         pr.put(  "characterEncoding  ",  "GBK  ");      
         pr.put(  "useUnicode  ",    "TRUE  ");                
         pr.put(  "user  ",  "root  "); 
         pr.put("password", "密码");             
       conn=DriverManager.getConnection  "jdbc:mysql://localhost:3306/ota3",  pr);   
    } catch(SQLException  e)  
    {  
           WriteLog(  "Mysql():  "  +e.getMessage());  
           System.err.println(  "Mysql():  "+e.getMessage());  
    }  
           catch(java.lang.ClassNotFoundException  e)  
    {  
           WriteLog(  "Mysql():  "  +e.getMessage());  
           System.err.println(  "Mysql():  "+e.getMessage());  
    }  
           catch(Exception  e)
    {  
           WriteLog(  "Mysql():  "  +e.getMessage());  
    }  
    另外用 select current_user();出错,改用select user();得到“root@localhost”;
      

  4.   

    只有 CURRENT_USER() 返回的才能说明问题CURRENT_USER() 
    返回当前会话被验证匹配的用户名: 
    mysql> SELECT USER();
            -> 'davida@localhost'
    mysql> SELECT * FROM mysql.user;
            -> ERROR 1044: Access denied for user: '@localhost' to database 'mysql'
    mysql> SELECT CURRENT_USER();
            -> '@localhost'