1

在下面的代码中,我得到的输出告诉我当前用户是myuser@%,然后第二个查询会给我一个错误,说myuser@localhost被拒绝 INSERT 权限。

$query = "SELECT CURRENT_USER();"
$result = mysql_query($query);
if(mysql_num_rows($result))
{
    $data = mysql_fetch_assoc($result);
    echo(" current user - ". $data['CURRENT_USER()'] . "\n"); //current user - myuser@%
}


$query = "INSERT INTO DIFF_DATABASE.HISTORY (DATA) VALUES (\"" . $data. "\")";
if(mysql_query($query) == false)
{
    echo(mysql_error()); // INSERT command denied to user 'myuser'@'localhost' for table 'HISTORY'
}

看起来 MySQL 用户从 切换myuser@%到 是myuser@localhost怎么发生的?我猜这是因为我在第二个查询中从不同的数据库中进行选择。

4

1 回答 1

0

CURRENT_USER() 的值可以不同于 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'

该示例说明,尽管客户端指定了用户名 davida(如 USER() 函数的值所示),但服务器使用匿名用户帐户对客户端进行了身份验证(如 CURRENT_USER( ) 价值)。可能发生这种情况的一种方式是在 davida 的授权表中没有列出帐户。

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_current-user

于 2012-12-28T16:23:01.030 回答