1

次のコードでは、現在のユーザーがであるという出力が表示されmyuser@%、2番目のクエリ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ですこれはどのように発生しますか?これは、2番目のクエリで別のデータベースから選択しているためだと思います。

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( の空のユーザー名部分で示されています)。 ) 価値)。これが発生する原因の 1 つは、davida の許可テーブルにアカウントがリストされていないことです。

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_current-userを参照してください。

于 2012-12-28T16:23:01.030 に答える