用户管理主要有以下作用:
1. 可以限制用户访问哪些库、哪些表
2. 可以限制用户对哪些表执行 SELECT、CREATE、DELETE、DELETE、ALTER 等操作
3. 可以限制用户登录的 IP 或域名
4. 可以限制用户自己的权限是否可以授权给别的用户
一. 创建 MySQL 用户:
创建 MySQL 用户有三种方法:
1. 通过 CREATE USER 命令进行创建用户
语法:CREATE USER [IDENTIFIED BY'PASSWORD'] 其中密码是可选项;
- mysql> create user identified by '123456';
- Query OK, 0 rows affected (0.00 sec)
- mysql> create user 'www@%' identified by '123456';
- Query OK, 0 rows affected (0.00 sec)
- mysql> create user ;
- Query OK, 0 rows affected (0.00 sec)
- 说明:该方法创建出来的用户只有连接数据库的权限,需要后续继续授权;
2. 通过 GRANT 命令创建用户 (常用方法)
这种方法进行创建的用户,当数据库存在用户的时候 GRANT 会对用户进行授权, 但当数据库不存在该用户的时候,就会创建相应的用户并进行授权.
语法:GRANT <权限> ON <数据库. 表名> TO <> IDENTIFIED BY'密码'[WITH GRANT OPTION];
说明:
priv 代表权限 select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file 等 14 个权限
ON:表示这些权限对哪些数据库和表生效,格式:数据库名. 表名,写'*.*'表示所有数据库所有表。
TO:将权限授予哪个用户。格式:% 表示没有限制,在任何主机都可以登录。
IDENTIFIED BY:指定用户的登录密码.
WITH GRANT OPTION:表示允许用户将自己的权限授权给其它用户, 为可选项.
1.> 创建用户 www, 并分配对所有数据库和表有所有的权限, 允许所有主机登录,设定口令为 123456.
- mysql>GRANT ALL PRIVILEGES ON *.* TO 'www@%'IDENTIFIED BY '123456' WITH GRANT OPTION;
2.> 给主机为 192.168.10.1 的用户 www 分配可对数据库 testdb 所有表进行所有操作的权限,并设定口令为 123456.
- mysql>GRANT ALL PRIVILEGES ON testdb.* TO IDENTIFIED BY '123456';
3. 直接向 mysql.user 表插入记录(该方法个人很少用)
- mysql>INSERT INTO mysql.user(Host,User,Password) VALUES('%','www',password('123456'));
- mysql>flush privileges;
二. 刷新权限
对用户做了权限变更之后,一定记得重新加载一下权限,将权限信息从内存中写入数据库。
- mysql> flush privileges;
三. 查看用户权限
- 查看某MySQL用户的使用权限:
- show grants for dbuser;
- 如:show grants for ;
- 查看创建数据库时用到那些参数.
- show create database dbname;
- 查看创建表时用到的那些参数.
- show create table 表名;
四. 回收用户权限
- mysql> revoke create on *.* from ;
- Query OK, 0 rows affected (0.00 sec)
- mysql> flush privileges;
- Query OK, 0 rows affected (0.00 sec)
五. 删除用户
- mysql>Delete FROM user Where User='www' and Host='localhost';
- mysql>flush privileges;
- #删除账户及权限
- mysql>drop user ;
六. 用户重命名
- mysql> rename user to ;
- Query OK, 0 rows affected (0.00 sec)
七. 修改用户密码
1. 用 set password 命令
语法:set password for =password('密码')
- mysql> set password for = password('123');
- Query OK, 0 rows affected (0.00 sec)
2. 更新 mysql.user 表
- mysql> update user set authentication_string=password('123456') where user='www';
- Query OK, 1 row affected (0.00 sec)
- Rows matched: 1 Changed: 1 Warnings: 0
3. 用 mysqladmin 命令
语法:mysqladmin -u 用户名 -p 旧的密码 password 新密码
- mysql> mysqladmin -uroot -p123456 password 1234abcd
八. 忘记密码
1. 添加登录跳过权限检查配置
修改 my.cnf,在 mysqld 配置节点添加 skip-grant-tables 配置
- [mysqld]
- skip-grant-tables
2> 重新启动 mysql 服务
- #service mysqld restart
3> 修改密码
此时在终端用 mysql 命令登录时不需要用户密码,然后按照修改密码的第一种方式将密码修改即可。
注意:mysql 库的 user 表,5.7 以下版本密码字段为 password,5.7 以上版本密码字段为 authentication_string
4> 还原登录权限跳过检查配置
将 my.cnf 中 mysqld 节点的 skip-grant-tables 配置删除,然后重新启动服务即可。
参考文档:
来源: http://www.bubuko.com/infodetail-2005087.html