1

共有ホストが一般的にこのテーブルへのアクセスをユーザーに許可するかどうか疑問に思いました。

スクリプト内から現在のデータベース構造をすばやく取得するために、これに依存しても大丈夫でしょうか?

私のアイデアは、この情報を使用して入力をサニタイズすることでした。例えば:UPDATE table SET field = ?

?fieldパラメータにすることができます(私はPDOを使用しています)が、変数を作成したい場合はどうなりますか?PDOはこれをサポートしていないため、情報スキーマのデータを使用して、その列が存在するかどうかを確認できます...

4

1 に答える 1

1

アクセスが許可されているデータベースから読み取るには、ユーザーが読み取ることができる必要があるため、すべてのMySQLユーザーがSELECTonにアクセスできます。information_schemainformation_schema

これをテストするSELECTには、単一のデータベース内の単一のテーブルに対する特権のみを持つ新しいユーザーを作成します。ユーザーは、そのデータベースで許可されたテーブルに関連するすべてのものを読み取ることができますがinformation_schema、許可されていないものは読み取ることができません。

/* Create a new user with only SELECT on one db: */
GRANT SELECT ON newdb.* TO newuser@localhost IDENTIFIED BY 'passwd';

/* Login with that user and list databases */
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| newdb              |
+--------------------+

関連ドキュメントから:

各MySQLユーザーにはこれらのテーブルにアクセスする権利がありますが、ユーザーが適切なアクセス権限を持っているオブジェクトに対応するテーブル内の行のみを表示できます。場合によっては(たとえば、INFORMATION_SCHEMA.ROUTINESテーブルのROUTINE_DEFINITION列)、権限が不十分なユーザーにはNULLが表示されます。

于 2012-04-11T01:04:23.807 に答える