一定間隔のダミーテーブルを出力する SELECT文の出力件数が実行ユーザーによって異なります。
SELECT * FROM ( SELECT @dt := '2023-03-09 00:00:00' AS start, @dt +interval (60 - 1) second AS end UNION SELECT @dt := @dt + interval 60 second, @dt +interval (60 - 1) second AS start FROM information_schema.COLUMNS WHERE @dt <= '2023-03-10 00:00:00' ) AS T mysql> show grants for user001@localhost; +-----------------------------------------------------------------------------------------+ | Grants for user001@localhost | +-----------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `user001`@`localhost` | | GRANT SELECT ON `table001`.* TO `user001`@`localhost` | | GRANT SELECT, INSERT, UPDATE, DELETE ON `table001`.`user_list` TO `user001`@`localhost` | +-----------------------------------------------------------------------------------------+
・ルートユーザーの場合:1442件(正解)
・user001の場合:801件(足らない)
■追加
その後、確認のためルートユーザーでも日時を広げると正しく出力されませんでした。
WHERE @dt <= '2023-03-20 00:00:00'
件数:3601件(15,842件くらいになるはず)
この時の「SHOW WARNINGS」は以下でした。
mysql> SHOW WARNINGS; +---------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Warning | 1287 | Setting user variables within expressions is deprecated and will be removed in a future release. Consider alternatives: 'SET variable=expression, ...', or 'SELECT expression(s) INTO variables(s)'. | | Warning | 1287 | Setting user variables within expressions is deprecated and will be removed in a future release. Consider alternatives: 'SET variable=expression, ...', or 'SELECT expression(s) INTO variables(s)'. | +---------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
問題になるような警告は出て無いようです。
このSELECT文のダミーテーブルでは多くの件数を作成できないのでしょうか??
まずは「SHOW WARNINGS」で確認してみてください
「ほとんどの INFORMATION_SCHEMA テーブルでは、各 MySQL ユーザーはそれらにアクセスする権限を持ちますが、ユーザーが適切なアクセス権限を持つオブジェクトに対応するテーブルの行のみを表示できます。」
https://dev.mysql.com/doc/refman/8.0/ja/information-schema-introduction.html#information-schema-privileges
hoshi-takanori さんの記述は完璧な回答だと思うので回答欄に書いたほうが良いと思います。
返答が遅くなりました。
質問に追加で示したように、rootで実行しても一定数以上のカラムは出力されません。
変数だけで出力するダミーテーブルですが、
これも何らかのアクセス権が影響している、ということでしょうか。
手許の mysql で select count(*) from information_schema.COLUMNS; したら 3575 だったので、そんなものでは。
追記。MySQL 8 ならこんな方法もあるらしい。https://stackoverflow.com/a/70231968/1019868

回答1件
あなたの回答
tips
プレビュー