十、MySQL用户授权
用户授权
-
什么是用户授权
在数据库服务器上添加新的连接用户,在添加用户时可以设置访问权限以及连接密码 默认数据库管理员root用户本机登录有授权权限 -
授权命令格式
grant 权限列表 on 库名 to 用户名@"客户端地址" identified by "密码" # 授权用户密码 [with grant option]; # 收授权权限,可选项 (新添加用户访问数据库时,也可以给其他用户授权) # 权限列表 all # 所有权限 usage # 无权限 select,update,insert # 个别权限 select,update(字段1,..,字段N) # 指定权限 # 库名 - "*.*" # 所有库和所有表 - "库名.*" # 一个库 - "库名.表名" # 一张表 # 用户名 - 授权时自定义 要有标识性 - 存储在mysql库的user表里 # 客户端地址 - '%' # 所有主机 - '192.168.4.%' # 网段内所有主机 - '192.168.4.8' # 1台主机 - 'localhost' # 数据库服务器本机 -
授权例子
grant all on db2.* to yaya@"%" identified by "123456"; 应用示例: - 添加用户mydba,对所有库、表有完全权限 - 允许从任何客户端连接,密码123qqq..A - 且有授权权限 grant all on *.* to mydba@"%" identified by "123qqq..A" with grant option; # 完成后使用其他客户机使用mydba登录验证权限(建库建表,删库删表,增删改查,授权用户) # information_schema 这是一个虚拟库,内存的映射,所有用户都没有操作权限 应用示例: - 添加admin用户,允许从192.168.4.0/24网段连接,对db2库的user表有查询权限,密码123456 grant select on db2.user to admin@"192.168.4.%" identified by "123456"; 应用示例: - 添加admin2用户,允许从本机连接,允许对db2库的所有表有查询/更新/插入/删除记录权限,密码123456 grant select,update,insert,delete on db2.* to admin2@"localhost" identified by "123456"; mysql> grant select,update on db2.user to nayue@"%" identified by "123456"; mysql> grant select,update(password,shell),insert on db2.user to catdexin@"%" identified by "123456";
相关命令
-
登录用户使用
命令 作用 select user()显示登录用户名以及客户端地址 show grants用户显示自身访问权限 show grants for 用户名@"客户端地址"管理员查看已有授权用户权限 set password=password("密码")授权用户连接后修改密码 set password for 用户名@"客户端地址=password("密码")管理员重置授权用户连接密码 drop user 用户名@"客户端地址"删除授权用户(必须有管理员权限) mysql> show grants; # 管理员账号操作 mysql> show grants for admin2@"192.168.4.%"; mysql> show grants for admin2@"localhost"; mysql> set password for yaya@"%"=password("123456"); # 修改yaya的登录密码 mysql> drop user admin2@"localhost"; # 扩展: 关于password password("密码") # 本身是个加密函数 可以使用select password("密码") 查看加密结果
授权库mysql(记录授权信息MySQL库的管理)
-
mysql库记录授权信息,主要表如下user # 记录已有的授权用户及权限 db # 记录已有授权用户对数据库的访问权限 tables_priv # 记录已有授权用户对表的访问权限 columns_priv # 记录已有授权用户对字段的访问权限 可以通过表记录,查看到授权用户的权限信息,也可以通过修改记录,来改用户的权限mysql> desc mysql.user; mysql> select * from mysql.user where user="yaya" \G; # 查看授权库表的结构 mysql> desc mysql.db; # 查看用户对库的权限 mysql> select User,Host,Db from mysql.db; mysql> select * from mysql.db where Host="%" and db="db2" \G; # 修改用户对库的权限 mysql> update mysql.db set Insert_priv="N",Delete_priv="N" where User="yaya"; # 刷新权限 mysql> flush privileges; # 查看权限信息 mysql> show grants for yaya@"%";mysql> desc tables_priv; mysql> select * from mysql.tables_priv; mysql> select * from mysql.tables_priv where Db="db2" and Table_name="user"; mysql> update mysql.tables_priv set Table_priv="Select,Insert,Update,Delete" where User="admin"; mysql> flush privileges; mysql> show grants for admin@"192.168.4.%";mysql> desc columns_priv; mysql> select * from columns_priv; mysql> show grants for catdexin@"%";
撤销授权
-
删除已有授权用户的权限
revoke 权限列表 on 库名.表 from 用户名@"客户端地址";mysql> grant all on *.* to lui@"%" identified by "123456" with grant option; mysql> show grants for lui@"%"; mysql> revoke grant option on *.* from lui@"%"; # 撤销授权权限 mysql> revoke delete on *.* from lui@"%"; # 撤销删除权限 mysql> revoke all on *.* from lui@"%"; # 撤销所有权限
删除授权用户
-
删除用户
drop user 用户名@"客户端地址"; # 撤销权限但是还能登陆,删掉用户彻底禁止mysql> drop user lui@"%";
管理root密码
-
回复root密码
root密码忘记怎么办? - 使用操作系统管理员账号登陆系统 - 停止MySQL服务程序 - 跳过授权表启动MySQL服务程序 - 修改root密码 - 以正常方式重启MySQL服务程序
-
恢复密码
[root@admin ~]# systemctl stop mysqld [root@admin ~]# vim /etc/my.cnf [mysqld] skip-grant-tables # 跳过授权表 # validate_password_policy=0 # 注释掉密码策略(如果有) # validate_password_length=6 [root@admin ~]# systemctl start mysqld [root@admin ~]# mysql # 这个时候,没有密码验证,可以直接访问 -
修改密码(重置密码)
mysql> update mysql.user set authentication_string=password("Yue3314526!") where host="localhost" and user="root"; mysql> flush privileges; -
将配置文件修改回正常,并重启MySQL
[root@admin ~]# vim /etc/my.cnf [root@admin ~]# systemctl restart mysqld [root@admin ~]# mysql -uroot -p'Yue3314526!' -
使用命令行修改MySQL密码
[root@admin ~]# mysqladmin -hlocalhost -p password "123456"; [root@admin ~]# mysql -uroot -p'123456'

浙公网安备 33010602011771号