MySQL5.6新增root使用者報錯:Field 'ssl_cipher' doesn't have a default value

urgel_babay發表於2016-02-29
2012.14.15
MySQL: 5.6.19
 剛剛忙完了零售測試環境的部署,現在處理上週遺留的問題。
由於user 表中確實localhost和127.0.0.1條目資訊:

  1. mysql> select Host,User,Password from user where User=\'root\';
  2. +--------------+------+-------------------------------------------+
  3. | Host         | User | Password                                  |
  4. +--------------+------+-------------------------------------------+
  5. | bidevedw\\_db| root | *D013A4E3A5BB01E4239D18D7E93B59B7D2B767AD |
  6. | ::1          | root | *D013A4E3A5BB01E4239D18D7E93B59B7D2B767AD |
  7. | %            | root | *D013A4E3A5BB01E4239D18D7E93B59B7D2B767AD |
  8. +--------------+------+-------------------------------------------+-
這樣導致我在伺服器本地登入的時候,解析的是以 方式登入,然而這種方式登入的root是沒有grant 許可權,這使得不能給其他使用者授權。

  1. *************************** 4. row ***************************
  2.                   Host: %
  3.                   User: root
  4.               Password: *D013A4E3A5BB01E4239D18D7E93B59B7D2B767AD
  5.            Select_priv: Y
  6.            Insert_priv: Y
  7.            Update_priv: Y
  8.            Delete_priv: Y
  9.            Create_priv: Y
  10.              Drop_priv: Y
  11.            Reload_priv: Y
  12.          Shutdown_priv: Y
  13.           Process_priv: Y
  14.              File_priv: Y
  15.             Grant_priv: N
  16.        References_priv: Y
  17.             Index_priv: Y
  18.             Alter_priv: Y
  19.           Show_db_priv: Y
  20.             Super_priv: Y
  21.  Create_tmp_table_priv: Y
  22.       Lock_tables_priv: Y
  23.           Execute_priv: Y
  24.        Repl_slave_priv: Y
  25.       Repl_client_priv: Y
  26.       Create_view_priv: Y
  27.         Show_view_priv: Y
  28.    Create_routine_priv: Y
  29.     Alter_routine_priv: Y
  30.       Create_user_priv: Y
  31.             Event_priv: Y
  32.           Trigger_priv: Y
  33. Create_tablespace_priv: Y
  34.               ssl_type:
  35.             ssl_cipher:
  36.            x509_issuer:
  37.           x509_subject:
  38.          max_questions: 0
  39.            max_updates: 0
  40.        max_connections: 0
  41.   max_user_connections: 0
  42.                 plugin: mysql_native_password
  43.  authentication_string:
  44.       password_expired: N
解決思路分析
        把缺失的條目新增到user表中。
由於我也是這半年才真正的接觸MySQL。所以很多也是問度娘,我也以為像user表中新增記錄是使用INSERT into。但是這種方法會報錯:
ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
這是因為user表中有幾個列是非空,而它的預設值是null .
| ssl_cipher                 | blob                              | NO   |     | NULL    |       |
| x509_issuer              | blob                              | NO   |     | NULL    |       |
| x509_subject           | blob                              | NO   |     | NULL    |       |

所以一般的insert into 都是給出前三列。而忽視了其他列。這種方式好像是在5.1之前可以使用的。我的是5.6。這種方式就行不通

解決方法:
GRANT USAGE ON *.* TO IDENTIFIED BY '123456' WITH GRANT OPTION;
GRANT USAGE ON *.* TO IDENTIFIED BY '123456' WITH GRANT OPTION;

記得要重新整理一下:flush privileges;
重新登入mysql -uroot -p123456
檢視當前登入使用者和登入的方式:
mysql> select user();
+----------------+
 | user()           |
+----------------+
 | |
+----------------+
1 row in set (0.00 sec)
這樣就可以不走@'%'
還可以修改root @'%'方式的許可權:

mysql> GRANT ALL PRIVILEGES ON *.* TO " IDENTIFIED BY "123456" WITH GRANT OPTION;
Query OK, 0 rows affected (0.02 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)
你許可權的時候會顯示:Grant_priv: Y
這樣root使用者以@'%'方式就可以做grant操作

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30936525/viewspace-2016595/,如需轉載,請註明出處,否則將追究法律責任。

相關文章