37

john mysql ユーザーに LOAD DATA コマンドを許可したいと考えています。そこで、root として mysql ターミナルにログインし、次のステートメントを発行しました。

grant file on johndatabase.* to 'john'@'localhost';

しかし、次のエラーが発生しました。

ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

に置き換えjohndatabase.*た場合*.*、すべてが機能します。しかし、*.*すべてのデータベースを意味するわけではありませんか? john mysql ユーザーを johndatabase だけに制限したいと思います。

4

2 に答える 2

62

単一のデータベースだけに FILE 権限を付与することはできません。それは論理的に意味がありません。ドキュメントの内容を検討してください。

FILE 権限により、LOAD DATA INFILE ステートメントと SELECT ... INTO OUTFILE ステートメント、および LOAD_FILE() 関数を使用して、サーバー ホスト上のファイルを読み書きする権限が与えられます。FILE 権限を持つユーザーは、誰でも読み取り可能であるか、MySQL サーバーによって読み取り可能なサーバー ホスト上の任意のファイルを読み取ることができます。(これは、サーバーがそれらのファイルにアクセスできるため、ユーザーが任意のデータベース ディレクトリ内の任意のファイルを読み取ることができることを意味します。)

したがって、FILE 権限はグローバル権限です。これはサーバー上のすべてのファイルに影響し、グローバル コマンド (例: など) へのアクセスのみを許可しLOAD DATA INFILE、どのデータベースにも適用されません。FILE 権限を付与する唯一の方法は、次の構文を使用してすべてのデータベースに対して行うことです。

GRANT FILE ON *.* TO 'john'@'localhost';
于 2012-11-25T15:06:48.927 に答える
0

FILE 権限を使用すると、mysql サーバーがアクセスできるファイルシステムへのアクセスをユーザーに付与できます。このため、ユーザーはファイルシステム レベルですべてのデータベースにアクセスできるため、特定のデータベースに限定しても意味がありません。そのため、オンにしか設定できません*.*

于 2012-11-25T15:07:29.560 に答える