mysql安裝完成之后,在/var/log/mysqld.log文件中給root生成了一個默認密碼。通過下面的方式找到root默認密碼,然后登錄mysql進行修改:
grep 'temporary password' /var/log/mysqld.log #查看默認密碼
set password for 'root'@'localhost'=password('Password'); #修改用戶密碼
查看當前登錄用戶:
select user();
查看用戶:
select host,user from mysql.user; #8.0版本
用戶添加和授權
#8.0以前版本 GRANT ALL PRIVILEGES ON *.* TO `mike`@`%` IDENTIFIED BY '000000' WITH GRANT OPTION; #8.0以后版本 CREATE USER 'zabbix'@'%' IDENTIFIED BY '123456'; #創建一個用戶 GRANT ALL ON zabbix.* TO 'zabbix'@'%' WITH GRANT OPTION; #授予zabbix的遠程登錄權和zabbix遠程訪問的權限。
刪除用戶
Delete FROM user Where User='zabbix' and Host='localhost'; #5.7版本
delete from mysql.user where user='zabbix' and host='localhost'; 8.0版本
修改用戶密碼:
ALTER USER "root"@"localhost" IDENTIFIED BY "new-password";
修改用戶host:
update user set host = 'localhost' where user = 'zabbix'; #早期版本
update mysql.user set host = 'localhost' where user = 'zabbix'; #8.0版本
查看某個用戶權限:
show grants for zabbix;
select * from mysql.user where user='zabbix'\G;
在 MySQL 8.0 中,caching_sha2_password
是默認的身份驗證插件而不是之前版本的 mysql_native_password
,默認的密碼加密方式是 SHA2
查看MySQL的認證方式
show variables like 'default_authentication_plugin';
如果需要保持之前的驗證方式並保持之前版本的密碼加密方式需要在配置文件 /etc/my.cnf 中修改以下配置項並重啟服務后生效。
[mysqld] character_set_server=utf8 init_connect='SET NAMES utf8' default_authentication_plugin = mysql_native_password #更改默認密碼認證方式。
systemctl restart mysqld #重啟服務
將某個特定用戶的加密方式更改:
ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'password'; # 更新用戶的密碼加密方式為之前版本的方式 FLUSH PRIVILEGES; # 刷新用戶權限
密碼過期時間管理
MySQL 從 5.6.6 開始引入密碼自動過期的新功能,並在 MySQL 5.7.4 版本中改進了用戶密碼過期時間這個特性。現在可以通過一個全局變量 default_password_lifetime
來設置一個全局的自動密碼過期策略。
default_password_lifetime
其默認值為 0,表示禁用自動密碼過期。default_password_lifetime
的值如是是正整數 N ,則表示允許的設置密碼生存周期 為 N,單位為天 。
show variables like 'default_password_lifetime';
如果你要建立一個全局策略,讓所有用戶的密碼的使用期限為六個月,可在服務端配置文件 /etc/my.cnf 中修改 default_password_lifetime
配置項的值為 180。
default_password_lifetime=0
或直接在MySQL中進行設置。
# 設置默認密碼過期策略為 180 天后過期 mysql> SET PERSIST default_password_lifetime = 180; # 設置默認密碼過期策略為永不過期 mysql> SET PERSIST default_password_lifetime = 0;
創建或修改一個用戶的密碼過期時間為 90 天。
CREATE USER 'mike'@'%' IDENTIFIED BY '000000' PASSWORD EXPIRE INTERVAL 90 DAY; ALTER USER `mike`@`%` PASSWORD EXPIRE INTERVAL 90 DAY;
創建或修改一個用戶的密碼過期時間為永不過期。
CREATE USER 'mike'@'%' PASSWORD EXPIRE NEVER; ALTER USER 'mike'@'%' PASSWORD EXPIRE NEVER;
創建或修改一個遵循全局到期策略的用戶。
CREATE USER 'mike'@'%' PASSWORD EXPIRE DEFAULT; ALTER USER 'mike'@'%' PASSWORD EXPIRE DEFAULT;
查看用戶的密碼過期時間。
mysql> select user,host,password_last_changed,password_lifetime,password_expired from mysql.user; +------------------+-----------+-----------------------+-------------------+------------------+ | user | host | password_last_changed | password_lifetime | password_expired | +------------------+-----------+-----------------------+-------------------+------------------+ | mike | % | 2018-05-07 11:13:39 | 90 | N | | root | % | 2018-05-04 16:46:05 | NULL | N | | mysql.infoschema | localhost | 2018-05-04 16:45:55 | NULL | N | | mysql.session | localhost | 2018-05-04 16:45:55 | NULL | N | | mysql.sys | localhost | 2018-05-04 16:45:55 | NULL | N | | root | localhost | 2018-05-04 16:46:05 | NULL | N | +------------------+-----------+-----------------------+-------------------+------------------+ 6 rows in set (0.00 sec)
鎖定/解鎖用戶帳戶
從 MySQL 5.7.8 開始,用戶管理方面添加了鎖定/解鎖用戶帳戶的新特性。
創建一個帶帳戶鎖的用戶
mysql> CREATE USER 'mike-temp1'@'%' IDENTIFIED BY '000000' ACCOUNT LOCK;
接下來嘗試用新創建的用戶登陸,此時會得到一個 ERROR 3118 錯誤消息提示。
$ mysql -umike-temp1 -p000000 mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 3118 (HY000): Access denied for user 'mike-temp1'@'172.22.0.1'. Account is locked.
如果你需要解鎖此用戶,此時就需要使用以下語句對其進行解鎖了。
ALTER USER 'mike-temp1'@'%' ACCOUNT UNLOCK;
修改一個用戶為鎖定狀態
ALTER USER 'mike'@'%' ACCOUNT LOCK;