Pages

2014年4月3日木曜日

phpMyAdmin メニューにトリガが表示されない

phpMyAdmin を利用している時に権限があるはずなのに、メニューにトリガが表示されない現象が発生。

早速追跡~

Menu.class.php の _getTableTabs() を見てみるとどうやら、

PMA_Util::currentUserHasPrivilege(
    'TRIGGER',
    $this->_db,
    $this->_table
)

の部分でfalseが返っている。

次に Util.class.php の currentUserHasPrivilege を見ると

if ($db !== null) {
    // need to escape wildcards in db and table names, see bug #3566
    // (wildcard characters appear as being quoted with a backslash
    //  when querying TABLE_SCHEMA.SCHEMA_PRIVILEGES)
    $db = str_replace(array('%', '_'), array('\%', '\_'), $db);
    /*
     * This is to take into account a wildcard db privilege
     * so we replace % by .* and _ by . to be able to compare
     * with REGEXP.
     *
     * Also, we need to double the inner % to please sprintf().
     */
    $query .= " AND '%s' REGEXP"
        . " REPLACE(REPLACE(TABLE_SCHEMA, '_', '.'), '%%', '.*')";
    $schema_privileges = $GLOBALS['dbi']->fetchValue(
        sprintf(
            $query,
            'SCHEMA_PRIVILEGES',
            $username,
            $priv,
            self::sqlAddSlashes($db)
        )
    );
    if ($schema_privileges) {
        return true;
    }
} else {
    // There was no database name provided and the user
    // does not have the correct global privilege.
    return false;
}


ここでtrueが返ってくるはずが返ってこない。。

どうやら
$db = str_replace(array('%', '_'), array('\%', '\_'), $db);
でDB名に % _ が入っている場合にエスケープするみたい。

コメントアウトを見てみると英語は解らないけど、どうやら
LIKE検索などする時の問題に対応するために行っている(MYSQLの問題?)
何かあったなそんなのが。。

結局、DB名を変更して無事解決でした。

0 件のコメント:

コメントを投稿

Followers