一. 用户

1 创建用户(这里的用户不可使用,在分配权限后可正常登陆)
  • 只创建用户

    CREATE USER username IDENTIFIED BY 'password';
  • 创建用户的同时授予权限

    GRANT ALL ON databasename.* TO username@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
2 删除用户
DROP USER username@localhost;
3 修改用户密码
  • 命令修改
SET PASSWORD FOR username@localhost = password('newpassword'); 
  • 更新 User 表
use mysql;
UPDATE USER SET password=password('newpassword') WHERE user='username' and host='localhost';
FLUSH PRIVILEGES;
  • mysqladmin
mysqladmin -uroot -pold_password password new_password
4 解决忘记root密码
  • 关闭 mysql 服务

  • 进入mysql/bin 目录

  • 输入mysqld --skip-grant-tables

    • –skip-grant-tables :启动MySQL服务的时候跳过权限表认证
  • 打开新终端,进入mysql/bin 目录

  • 打开mysql命令行

    use mysql;
    UPDATE USER SET password=password('newpassword') WHERE user='username' and host='localhost';
    FLUSH PRIVILEGES;

二. 权限

!!!注意:在每次执行完分配权限命令后,需要刷新权限

FLUSH PRIVILEGES;
1 在多个层次上授予权限
  • 服务器

    GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
  • 数据库

    GRANT ALL PRIVILEGES ON databasename.* TO 'username'@'localhost';
  • 数据表

    GRANT ALL PRIVILEGES ON databasename.tablename TO 'username'@'localhost';
  • 数据表的列

    GRANT SELECT(id, col1, col2) ON databasename.tablename TO 'username'@'localhost';
  • 存储过程

    GRANT EXECUTE ON PROCEDURE databasename.tablename TO 'username'@'localhost';
  • 函数

    GRANT EXECUTE ON FUNCTION databasename.tablename TO 'username'@'localhost';
2 对不同用户角色的授权(权限可自选,这里只是参考)
  • 为普通用户添加权限

    GRANT SELECT, INSERT, UPDATE, DELETE ON databasename.* TO 'username'@'%';
  • 为开发者添加权限

    GRANT CREATE, ALTER, DROP, REFERENCES ON databasename.* TO 'username'@'192.168.0.%';
  • 为普通 DBA 添加权限

    GRANT ALL PRIVILEGES ON databasename.* TO 'username'@'localhost';
  • 为高级 DBA 添加权限

    GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
3 查看授权
SHOW GRANTS FOR username;
4 撤销在所有数据库上的权限
REVOKE ALL PRIVILEGES ON *.* FROM 'username'@'localhost';
5 命令分析
  • GRANT :执行命令词,一般为动词
  • ALL:赋予权限名,参考下面的权限列表
  • *.*:前者表示数据库名,后者表示数据表名
    • databasename.*:表示在databasename中的所有表
    • databasename.tablename:表示在databasename中的tablename表
  • 'username'@'localhost':前者为用户名,后者为接入的IP
    • 'username'@'%':可以从任何地点接入

    • 'username'@'192.168.1.%' :192.168.1 IP下的局域网都可接入

    • 'username'@'%.website.com' :可以从website.com接入

    • 'username'@'localhost': 只可以本机登录

    • localhost 通过UNIXsocket连接,不会被解析为IP地址

      127.0.0.1 通过TCP/IP协议连接,只能本机访问

      ::1 ::1 支持ipv6,等同于ipv4的127.0.0.1

6 权限列表
权限名 含义
ALTER 修改表和索引
CREATE 创建数据库和表
DELETE 删除表中已有的记录
DROP 抛弃(删除)数据库和表
INDEX 创建或抛弃索引
INSERT 向表中插入新行
REFERENCE 外键权限
SELECT 检索表中的记录
UPDATE 修改现存表记录
FILE 读或写服务器上的文件
PROCESS 查看服务器中执行的线程信息或杀死线程
RELOAD 重载授权表或清空日志、主机缓存或表缓存
SHUTDOWN 关闭服务器
ALL 所有权限,ALL PRIVILEGES同义词
USAGE 特殊的 “无权限” 权限