登录※
-u用户
-p密码
-S socket
-h 主机ip
-e 非交互式
# mysql登录示例:
mysql -uroot -p -S /tmp/mysql.sock -P3306 -hlocalhost -e "show
databases;
可以自动补全mysql的客户端:mycli※
安装※
在 Debian/Ubuntu 上安装
sudo apt update
sudo apt install python3-pip
pip3 install mycli --break-system-packages
在 RedHat/Fedora 上安装
sudo yum install python3-pip
pip3 install mycli
使用 MyCLI
mycli -u root -p -h 127.0.0.1
自带的补全表,库方案※
vim ~/.inputrc
# Enable auto-completion in MySQL client
"\e[B": history-search-forward
"\e[A": history-search-backward
TAB: menu-complete
用户管理※
查看当前登录用户
select user();
查看用户表的表结构
mysql> desc mysql.user;
===========或=============
mysql> use mysql
mysql> desc user;
查询用户
mysql> select user,host from mysql.user;
查询更多列(用户列,主机列,密码列,插件列)
mysql> select user,host,authentication_string,plugin from mysql.user;
创建或更新用户※
-- 为 'msl' 创建或更新从 'localhost' 登录的权限
CREATE USER 'msl'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON *.* TO 'msl'@'localhost' WITH GRANT OPTION;
-- 为 'msl' 创建或更新从任何主机登录的权限
CREATE USER 'msl'@'%' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON *.* TO 'msl'@'%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;
mysql新旧版差异※
mysql8.0之前可以授权的时候同事添加用户,8.0以后需要创建完用户之后再授权
密码插件:
- MySQL 8.0 之前默认使用
mysql_native_password
插件。 - MySQL 8.0 之后默认使用
caching_sha2_password
插件,提供更好的安全性。
CREATE USER 'msl'@'10.0.0.%' IDENTIFIED WITH mysql_native_password BY '123';
alter user msl@'10.0.0.%' identified with mysql_native_password by
'123';
锁定用户※
锁定和解锁用户(不确定是否有用的账户,可以先锁定)
mysql> alter user oldgirl@'10.0.0.%' ACCOUNT LOCK; # 锁定
mysql> select user,host,account_locked from mysql.user; # 查询
+------------------+-----------+----------------+
| user | host | account_locked |
+------------------+-----------+----------------+
| oldgirl | 10.0.0.% | Y | #account_locked列为Y表示锁
定。
| mysql.infoschema | localhost | Y |
| mysql.session | localhost | Y |
| mysql.sys | localhost | Y |
| root | localhost | N |
+------------------+-----------+----------------+
mysql> alter user oldgirl@'10.0.0.%' ACCOUNT UNLOCK; # 解锁
删除用户※
mysql> drop user msl@'10.0.0.%';
管理MySQL用户密码※
Linux命令行设置管理员root密码※
首次登录设置密码
mysqladmin password 'admin'
# 修改密码
mysqladmin -uroot -proot password 'admin'
# .SQL语句修改法(适合8.0)
mysql> alter user root@'localhost' identified by 'admin';
mysql> flush privileges;
# 通过直接修改mysql.user表用户记录修改密码方法(适合5.7)
mysql> update mysql.user set authentication_string=PASSWORD('admin') \
where user='root' and host='localhost';
mysql> flush privileges;
# set password语句修改密码法(适合5.7)
mysql> set password for 'oldboy'@'localhost'=PASSWORD('admin');
mysql> flush privileges;
忘记密码
#方法1:
# 1.首先停止MySQL服务。
systemctl stop mysqld
netstat -lntup|grep 330
# 2.带参数启动mysql服务。
mysqld_safe --skip-grant-tables --skip-networking &
###--skip-grant-tables(忽略授权登录验证)和--skip-networking(忽略网络)
# 3.无需密码登录MySQL。
mysql
# 4.修改root密码为新密码。
mysql> flush privileges; #<==此命令必须先执行。
mysql> alter user root@'localhost' identified by 'newpass';
mysql> quit
# 5.重启mysql
killall mysqld
systemctl start mysqld
netstat -lntup|grep 330
# 6.登录验证
mysql -uroot -poldboy123
#方法2:
# 1.编辑/etc/my.cnf,加如下参数,直接重启数据库。
[mysqld]
--skip-networking
--skip-grant-tables
# 2.直接正常重启数据库。
systemctl restart mysqld
# 3.无需密码登录MySQL。
mysql
# 4.修改root密码为新密码。
mysql> flush privileges; #<==此命令必须先执行。
mysql> alter user root@'localhost' identified by 'oldboy123';
mysql> quit
# 5.重启mysql
systemctl restart mysqld
mysql用户权限※
权限类型 | 权限名称 | 说明 |
数据权限 | SELECT | 允许读取数据 |
INSERT | 允许插入新数据 | |
UPDATE | 允许更新已有数据 | |
DELETE | 允许删除数据 | |
FILE | 允许读取和写入文件 | |
结构权限 | CREATE | 允许创建数据库和表 |
ALTER | 允许修改表结构 | |
INDEX | 允许创建和删除索引 | |
DROP | 允许删除数据库和表 | |
CREATE TEMPORARY TABLES | 允许创建临时表 | |
SHOW VIEW | 允许查看视图的定义 | |
CREATE ROUTINE | 允许创建存储过程和函数 | |
ALTER ROUTINE | 允许修改和删除存储过程和函数 | |
EXECUTE | 允许执行存储过程和函数 | |
CREATE VIEW | 允许创建视图 | |
EVENT | 允许创建、修改和删除事件 | |
TRIGGER | 允许创建和删除触发器 | |
管理权限 | GRANT | 允许授予和撤销用户的权限 |
SUPER | 允许执行高级管理操作,如终止进程、重置主从复制等 | |
PROCESS | 允许查看正在执行的查询 | |
RELOAD | 允许执行刷新操作,重新加载授权表、日志等 | |
SHUTDOWN | 允许关闭数据库服务器 | |
SHOW DATABASES | 允许查看数据库列表 | |
LOCK TABLES | 允许锁定表 | |
REFERENCES | 允许在外键约束中使用 | |
REPLICATION CLIENT | 允许查询主从复制相关状态 | |
REPLICATION SLAVE | 允许配置从服务器复制 | |
CREATE USER | 允许创建、修改和删除用户 |
授权
grant insert,select on mysql.user to zhangsan@'10.0.0.0/24';
撤销授权
REVOKE INSERmT ON *.* FROM 'jeffrey'@'localhost';
用户资源管理※
密码过期时间※
select @@default_password_lifetime;#查看默认密码过期时间
SET PERSIST default_password_lifetime = 180;#设置密码过期时间(天)
SET PERSIST default_password_lifetime = 0;
CREATE USER 'root'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;#创建用户的同事·
ALTER USER 'root'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;#修改现有用户的密码过期时间
CREATE USER 'root'@'localhost' PASSWORD EXPIRE NEVER;#创建用户并设置密码永不过期
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;#修改现有用户的密码为永不过期
密码重用
password_history=6#用户在更改密码时,不能使用最近 6 次使用过的密码
password_reuse_interval=365#用户在更改密码时,不能使用在过去 365 天内使用过的密码
连接资源限制※
with
MAX_QUERIES_PER_HOUR count # 限制用户每小时执行查询的次数,以防止过度使用查询资源。
MAX_UPDATES_PER_HOUR count # 限制用户每小时执行更新操作的次数,以防止过度使用写操作资源。
MAX_CONNECTIONS_PER_HOUR 2000; # 限制用户每小时创建新连接的次数,以防止连接资源滥用。
MAX_USER_CONNECTIONS count # 限制用户同时打开的连接数,以防止单个用户占用过多的连接资源。