Ao alterar o modo de sessão no mysql 5.7, recebo o seguinte aviso.
"(Code 3090): Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release."
Não entendo exatamente o que significa. O mysql está removendo a capacidade de definir um modo de sessão?
terminal mysql
mysql> \W
Show warnings enabled.
mysql> SET SESSION sql_mode="NO_ENGINE_SUBSTITUTION";
Query OK, 0 rows affected, 1 warning (0.00 sec)
Warning (Code 3090): Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
mysql>
"Descontinuado" significa que o recurso funciona como pretendido, mas não é mais recomendado porque provavelmente será desativado em uma versão futura. A compatibilidade com versões anteriores do MySQL geralmente funciona por descontinuação, mostrando um aviso na versão X+1 (por exemplo, 5.7) e um erro na próxima (por exemplo, 5.8). Assim você tem tempo para adaptar seu banco de dados e scripts.
Em particular, seu erro é que você não está usando
NO_AUTO_CREATE_USER
o modo SQL. Ou seja,NO_AUTO_CREATE_USER
deve estar habilitado por padrão e você não deve alterá-lo (desabilitá-lo) porque a opção provavelmente desaparecerá no 5.8, ficando sempre habilitada.Como consequência, você não pode mais assumir que
GRANT
cria um usuário automaticamente e, em vez disso, deve executarCREATE USER
instruções explícitas. Isso é feito porque se você executar:Você não teria criado um usuário com uma senha e fornecido a ele acesso ao banco de dados wordpress - você criou um usuário com uma senha e, em seguida, criou outro usuário diferente sem senha com acesso a esse banco de dados. Isso é um problema de segurança, portanto,
NO_AUTO_CREATE_USER
é uma configuração muito recomendada.Eu não recomendaria que você configurasse o modo sql no nível da sessão, mas se o fizer, escreva:
ou um modo cada vez mais estrito.
A razão pela qual eu não recomendo isso é dupla:
Você está desabilitando os padrões mais rígidos (
stric_trans_tables
, etc.):mysql> SET SESSION sql_mode=DEFAULT; SELECT @@sql_mode\G
Query OK, 0 rows affected (0.00 sec)
*************************** 1. row ***************************
@@sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
1 row in set (0.00 sec)
Isso é desnecessário se você puder fazer isso globalmente (SET GLOBAL ou no arquivo de configuração). Adicioná-lo no nível da sessão significa que você tem uma ida e volta extra ao banco de dados, adicionando latência. A execução de um SET leva muito pouco tempo, mas se você fizer isso em cada consulta/sessão, o tempo aumenta. No entanto, se você não puder alterá-lo no nível do servidor, a alteração da sessão é a única maneira de fazê-lo.