Quantcast
Channel: Planet MySQL
Viewing all articles
Browse latest Browse all 1081

MySQL 5.7.6でCREATE USERせずにGRANTステートメントを叩くとワーニング

$
0
0
ワーニングが出るようになってますね。


「sql_modeのデフォルトにNO_AUTO_CREATE_USERを設定しようと思う」っていうネタがMorgan Tockerのブログにあがってましたのでその布石でしょうか。


mysql> SELECT @@sql_mode;
+---------------------------------------------------------------+
| @@sql_mode |
+---------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+---------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO replicator IDENTIFIED BY 'replicator';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------------------------------------------------------------+
| Warning | 1287 | Using GRANT for creating new user is deprecated and will be removed in future release. Create new user with CREATE USER statement. |
+---------+------+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SHOW GRANTS FOR replicator;
+----------------------------------------------------+
| Grants for replicator@% |
+----------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%' |
+----------------------------------------------------+
1 row in set (0.00 sec)

出来てるには出来てるけど、SHOW GRANTSの結果にパスワードハッシュ出さなくなったのか。。


mysql> SELECT user, host, authentication_string FROM mysql.user WHERE user= 'replicator';
+------------+------+-------------------------------------------+
| user | host | authentication_string |
+------------+------+-------------------------------------------+
| replicator | % | *E6FA4B5E283079702D46597DFCD2766E7BF96B0E |
+------------+------+-------------------------------------------+
1 row in set (0.22 sec)

mysql.userテーブルにはちゃんと入ってる。

しかし 同じノリでproposalに上がってる NO_AUTO_VALUE_ON_ZEROの方は


mysql> CREATE TABLE t1 (num serial);
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO t1 VALUES (0);
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM t1;
+-----+
| num |
+-----+
| 1 |
+-----+
1 row in set (0.00 sec)

特に何のお咎めもなし。
どちらかというとこっちワーニング吐いてほしいんだけどな。。

NO_AUTO_VALUE_ON_ZEROが有効な状態だと


mysql> TRUNCATE t1;
Query OK, 0 rows affected (0.18 sec)

mysql> SET sql_mode= CONCAT_WS(',', @@sql_mode, 'NO_AUTO_VALUE_ON_ZERO');
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> INSERT INTO t1 VALUES (0);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM t1;
+-----+
| num |
+-----+
| 0 |
+-----+
1 row in set (0.00 sec)

とまあこんな風にauto_incのつもりでNULLじゃなく0を当てると本当に0が入ってしまうという(そんな風に書かれたコードが実在したとしたらこっちの方が余程影響でかい)
昔はauto_incrementなカラムに敢えてNULLじゃなくて0を渡すコードを 書いていた ことがあるんだけど、最近の人はどうなんだろう。

ちなみにNO_AUTO_CREATE_USERな状態でもIDENTIFIED BYがない場合にだけがエラーになるはずだから…と思ってたら。


mysql> SET sql_mode= CONCAT_WS(',', @@sql_mode, 'NO_AUTO_CREATE_USER');
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------------------------------+
| Warning | 3090 | Setting sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be made read-only in a future release. |
+---------+------+------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> GRANT ALL on *.* to yoku;
ERROR 1133 (42000): Can't find any matching row in the user table

mysql> GRANT ALL on *.* to yoku@localhost identified by '0825';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------------------------------------------------------------+
| Warning | 1287 | Using GRANT for creating new user is deprecated and will be removed in future release. Create new user with CREATE USER statement. |
+---------+------+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

今のところ動作は変わってないけど、NO_AUTO_CREATE_USER自体が廃止されて、GRANTステートメントでCREATE USERされちゃうのは完全に廃止になるぽい。
PlanetMySQL Voting: Vote UP / Vote DOWN

Viewing all articles
Browse latest Browse all 1081

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>