Mysql操作教学之用户权限管理,教会大家如何创建用户,修改权限,简单实用教学。(5)

文章目录

  • 前言
  • 1、用户管理
    • 1.1 查看用户
    • 1.2 创建用户
    • 1.3 修改用户密码
    • 1.4 删除用户
  • 2、权限管理
    • 2.1 给用户授予权限(grant)
    • 2.2 权限管理(查看、撤销)
    • 2.3 注意事项

前言

本篇文章主要讲解Mysql中的用户管理和权限管理,包括:创建、删除用户,授予、撤销权限等操作,通过多个案例帮助大家快速掌握这些知识点,以便更好的管理Mysql用户和权限。

1、用户管理

1.1 查看用户

  1. 查看所有用户

    select user, host from mysql.user;
    

  1. 查看当前登录用户

    select current_user();
    

    select user();
    

1.2 创建用户


1、基本语法

create user '用户名'@'主机名' identified by '密码';


2、常用创建用户示例

  1. 创建本地访问用户:

    create user '用户名'@'localhost' identified by '密码';
    
  2. 创建可从任何主机访问的用户(不推荐,有安全风险):

    create user '用户名'@'%' identified by '密码';
    
  3. 创建可从特定IP访问的用户:

    create user '用户名'@'192.168.1.100' identified by '密码';
    
  4. 创建可从IP段访问的用户:

    create user '用户名'@'192.168.1.%' identified by '密码';
    

1.3 修改用户密码

  1. 方法1:使用set password语句

    set password for '用户名'@'主机名' = password('新密码');
    
  2. 方法2:使用alter user语句(mysql 5.7.6及以上版本)

    alter user '用户名'@'主机名' identified by '新密码';
    
  3. 方法3:使用update直接修改mysql.user表

    update mysql.user set authentication_string=password('新密码') where user='用户名' and host='主机名';
    flush privileges; # 修改完后,刷新权限
    
  4. 修改当前登录用户密码

    set password = password('新密码');
    

注意事项

  1. 执行后可能需要flush privileges;刷新权限

  2. 密码建议使用强密码

  3. 主机名通常为’localhost’或’%'(允许任意主机连接)

例如修改用户’root’在本地登录的密码:

set password for 'root'@'localhost' = password('newpass123');

1.4 删除用户

  1. 删除单个用户

    drop user '用户名'@'主机名';
    

    例如:

    drop user 'testuser'@'localhost';
    

  1. 删除多个用户,用逗号隔开

    drop user 'user1'@'localhost', 'user2'@'%';
    

注意事项:

  1. 执行此命令需要具有mysql的root权限或足够的权限

  2. 删除用户前请确保该用户已不再需要

  3. 删除用户不会自动删除该用户创建的数据库对象

2、权限管理

2.1 给用户授予权限(grant)


1、基本语法

grant 权限类型 on 数据库对象 to 'username'@'host' [with grant option];


常见权限类型:

  • 数据操作select, insert, update, delete

  • 结构操作create, alter, drop, index

  • 管理权限all privileges, grant option, super

  • 其他权限execute(存储过程), trigger

权限作用范围:

作用范围 示例 说明
全局权限 on *.* 所有数据库的所有表
指定数据库 on dbname.* 某个数据库的所有表
指定表 on dbname.tablename 特定数据库的特定表
列级权限 update(col1, col2) 仅允许操作指定列
存储过程/函数 on procedure funcname 允许执行存储过程或函数

2、常用方法示例

  • 授予所有数据库的只读权限:

    grant select on *.* to 'user'@'localhost';
    
  • 授予特定数据库的全部权限:

    grant all privileges on dbname.* to 'user'@'%';
    
  • 授予多权限(select + insert + update):

    grant select, insert, update on dbname.* to 'user'@'192.168.1.%';
    
  • 授予列级权限:

    grant select, update(name, age) on dbname.employees to 'hr'@'%';
    
  • 允许用户授予权限给他人:

    grant select on dbname.* to 'admin'@'%' with grant option;
    

    如果在使用grant语句为某个用户授予权限时添加了with grant option子句,则表示该用户可以将自己拥有的权限授予其他人。

2.2 权限管理(查看、撤销)


1、查看用户权限

  1. 查看指定用户权限:

    show grants for '用户名'@'主机名';
    

    示例:

    show grants for 'username'@'host';
    
  2. 查看用户详细权限信息

    select * from mysql.user where user='用户名';
    
  3. 查看所有用户及其权限概况

    select * from mysql.user;
    

2、撤销权限

  1. 撤销指定类型权限(revoke):

    revoke 权限类型 on 数据库对象 from 'username'@'host';
    

    示例:撤销insert权限

    revoke insert on dbname.* from 'user'@'%';
    
  2. 撤销全部权限:

    revoke all privileges, grant option from 'username'@'host';
    

2.3 注意事项

  1. host字段的匹配规则:

    • localhost:仅允许本地连接

    • %:允许任意ip远程连接

    • 192.168.1.%:允许特定ip段连接

  2. mysql 8.0+ 变化:

    • 不再允许通过grant隐式创建用户,必须先使用create user
  3. 权限层级覆盖:

    • 全局权限 > 数据库权限 > 表权限 > 列权限
  4. 安全建议:

    • 避免使用all privilegeswith grant option

    • 按最小权限原则分配权限


通过以上命令可以完成mysql用户权限的全生命周期管理。建议通过show grants验证权限分配是否符合预期。

你可能感兴趣的:(MySQL,从入门到精通,高效数据库管理指南,mysql,数据库)