深入理解 MySQL 用户和权限

一. 用户

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特殊的 “无权限” 权限
    原文作者:mysql
    原文地址: https://blog.csdn.net/u011262253/article/details/82144947
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞