示例2:
允许用户 nancy 在所有终端远程连接mysql,并拥有所有权限。使用密码“123456”进行登录。
GRANT ALL PRIVILEGES ON *.* TO 'nancy'@'%' IDENTIFIED BY '123456'; 复制代码
网络异常,图片无法展示
|
使用nancy用户远程连接mysql:
mysql -unancy -p123456 -h 192.168.72.50 -P3306 #-p123456,小写p指定登录密码 #-P3306,大写P指定端口号 #-h 192.168.72.50,指定目标IP/主机名 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
2.2 查看用户的权限
SHOW GRANTS; #查看当前用户(自己)的权限 SHOW GRANTS FOR 用户名@来源地址; #查看其他用户的权限 示例: show grants for 'zhangsan'@'localhost'; 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
USAGE特权说明符:
USAGE特权说明符,表示“无特权”。它与GRANT一起在全局级别上使用,以在不影响现有帐户特权的情况下修改帐户属性(例如资源限制或SSL特征)。
USAGE
是一种在没有授予任何真实特权的情况下告诉MySQL帐户存在的方法。因此,他们仅具有使用 MySQL服务器的权限USAGE
。它对应于mysql.user
表中未设置特权的行。
对于GRANT USAGE ON
,查看⼿册有如下介绍和实例:
mysql> GRANT USAGE ON . TO 'zhangkh'@'localhost’;
⼀个账户有⽤户名zhangkh,没有密码。该账户只⽤于从本机连接(即登录MySQL)。未授予权限。通过GRANT语句中的USAGE权限,你可以创建账户⽽不授予任何权限。它可以将所有全局权限设为'N'。假定你将在以后将具体权限授予该账户。
2.3 撤销用户的权限
revoke 权限列表/ALL on 库名.表名 from '用户名'@'来源地址'; 复制代码
示例1:
针对用户 nancy@%,撤销其除了登录权限外的其他权限。
revoke all on *.* from 'nancy'@%; 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
示例2:
如果用户的权限是针对具体的库和表,那么在撤销权限时,也需要指定库和表,不能写成 *.*
的形式,否则命令不生效。
#这条命令不生效,需要指定库和表。 revoke all on *.* from 'zhangsan'@'localhost'; #撤销用户对school库内所有表的权限 revoke all on school.* from 'zhangsan'@'localhost'; 复制代码
使用*.*
撤销权限,命令不生效:
网络异常,图片无法展示
|
指定具体的库和表,命令生效:
网络异常,图片无法展示
|
总结
MySQL的相关使用可查看官方手册:
MySQL :: MySQL 8.0 Reference Manual :: 6.2.2 Privileges Provided by MySQL
1、用户管理
create user 'username'@'address' identified by 'password'; #创建用户 select user,host,authentication_string from mysql.user; #查看用户信息 rename user old_user to new_user; #修改用户名 drop user '用户名'@'来源地址'; #删除用户 set password = password('XXXX'); #修改当前登录用户的密码 set password for '用户名'@'来源地址' = password('XXXX'); #修改其他用户的密码 select user (); #查看当前登录用户和来源地址 ###忘记root用户密码的解决方法: 修改mysql配置文件/etc/my.cnf,在 [mysqld] 配置项下加入 skip-grant-tables service mysqld restart #重启服务 mysql #免密登陆 update mysql.user set authentication_string=password('XXX') where user='root'; #修改密码 flush privileges; #刷新数据库 复制代码
2、用户授权
#授予用户权限 grant 权限列表/ALL ON 库名.表名 to 'username'@'address' [identified by 'XXXXX']; show grants; #查看当前用户(自己)的权限 show grants for 'username'@'address'; #查看其他用户的权限 revoke 权限列表/ALL on 库名.表名 from 'username'@'address'; #撤销用户的权限 mysql -u 用户名 -p[密码] -h 目标IP/主机名 -P 端口号 #远程连接mysql