在下面的代码中,我得到的输出告诉我当前用户是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
这是怎么发生的?我猜这是因为我在第二个查询中从不同的数据库中进行选择。
答案 0 :(得分: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