grant授权
- 在数据库服务器上添加新用户并设置访问权限及密码
mysql> mysql -uroot -pxxxxxxxx #使用root连接数据库
mysql> grant 权限列表 on 库.表 to 用户名@'客户端地址' identified by 'xxx'; #密码需要符合密码策略
mysql> grant 权限列表 on 库.表 to 用户名@'客户端地址' identified by 'xxx' with grant option; #给新用户授权使用grant命令
mysql> grant 权限列表 on 库.表 to 用户名@'%' identified by 'xxx'; #任意地址
mysql> grant 权限列表 on 库.表 to 用户名@'192.168.4.%' identified by 'xxx'; #指定网段
mysql> grant 权限类型(字段1,字段2,...) on 库.表 to 用户名@'地址' identified by 'xxx'; #指定字段
权限列表
- all //所有权限
- usage //无权限
- select,insert,delete //个别权限
- select,update(字段1,字段2,…) //指定字段
相关命令
mysql> select user(); #查看登录用户名及地址
mysql> show grants; #查看当前用户的权限
mysql> show grants for 用户名@'地址'; # 管理员查看授权
mysql> set password=password("xxxxxxx"); #被授权的用户修改自己的密码
mysql> set password for 用户名@'地址'=password("xxxxxxx"); #管理员修改用户密码
mysql> drop user 用户名@'地址'; #管理员删除用户
授权库
mysql库,记录授权信息
- user表 记录已有的授权用户及权限
- db表 记录已有的授权用户对数据库的访问权限
- tables_priv表 记录已有的授权用户对表的访问权限
- columns_priv表 记录已有的授权用户对字段的访问权限
可以通过表记录查看用户权限,也可以通过更新记录修改用户权限
mysql> update mysql.user set Delete_priv="N" , Grant_priv="N" where user="mydba" and host="%";
revoke取消授权
mysql> show grants for 用户名@'地址'; #查看当前权限
mysql> revoke 权限列表 on 库.表 from 用户名@'地址'; #取消授权
恢复root密码
- 停止MySQL程序
- 跳过授权表启动MySQL服务
- 修改root密码
- 以正常方式启动服务
] systemctl stop mysqld
] vim /etc/my.cnf
[mysqld]
skip-grant-tables #新增此行,跳过授权表
#validate_password_policy=0 #注释密码规则
#validate_password_length=6 #注释密码规则
...
] systemctl restart mysqld
] mysql #连接数据库
mysql> update mysql.user set authentication_string=password("密码") where user="root" and host="localhost"; #修改密码
mysql> flush privileges;
重置root密码
] mysqladmin -uroot -p旧密码 password "新密码" #命令行修改root密码