
前面章节的操作都是通过root超级管理员登录数据库进行相关操作。在实际工作环境中为了保证数据库的安全数据库管理员需要对操作数据库的人员分配用户、密码以及可操作的权限范围。区分登录账号不同人用不同账号登录数据库分配操作权限谁能查、谁能改、谁能删、谁只能看在安装MySQL时系统会自动安装一个名为mysql的数据库该数据库主要用于维护数据库的用户以及权限控制和管理。MySQL中所有用户信息都保存在mysql.user数据表里。desc mysql.user;查看用户信息select * from mysql.user;这个表存储了所有全局级别的权限、加密后的密码以及用户标识.在 MySQL 中用户确实就是数据用户管理本质上就是在user表里做增加删除修改在mysql内部给用户开账号就是把用户的用户名允许从哪里登录以及用户的密码信息放在mysql中的user表里。但是我们不使用insert语句来修改user表直接操作user表会面临加密、同步方面的问题创建用户由于MySQL中所有用户信息全保存在mysql.user表中因此创建用户可以直接利用root用户登录MySQL服务器后向user表中插入记录。利用MySQL提供的create user和grant语句创建用户其中grant语句在创建用户时还可以完成权限的设置。使用create user语句每创建一个新用户都会在mysql.user表中添加一条记录同时服务器会自动修改相应的授权表但是该语句创建的新用户默认没有任何权限需要使用grant进行授权。CREATE USER 用户名主机ip IDENTIFIED BY 密码;账户名是由“用户名主机地址”构成的主机地址限制用户从哪里登录localhost表示数据库本机登录%表示任意远程主机密码设置用户密码会被哈希加密保存到user表中创建一个允许远程访问的开发账号create user app_user% identified by AppPassword2026;创建用户后需要刷新权限flush privileges;指定密码加密方式CREATE USER legacy_user% IDENTIFIED WITH mysql_native_password BY password123;用户名和主机名两边的单引号 在标准 SQL 中是必须的虽然 SQL 关键字不分大小写但在某些操作系统下MySQL 的用户名是区分大小写的有时候弱密码会报错说明你的密码太简单了需要加特殊符号、数字和大小写字母设置密码在MySQL中对用户进行管理时除了创建用户的同时设置密码外还可以为没有密码的用户设置密码、密码过期的用户或指定用户修改密码。修改指定账户的密码需要管理员权限ALTER USER usernamelocalhost IDENTIFIED BY 新密码;修改当前用户的密码若当前通过客户端连接MySQL服务器的用户是非匿名用户则可以使用user()函数更改自己的密码user()函数获取的是客户端提供的用户和主机地址ALTER USER USER() IDENTIFIED BY 新密码;管理员模式可以使用SET PASSWORD FOR 用户名% 新密码;用户自己修改自己的密码SET PASSWORD 新密码;删除用户DROP USER [if exists]用户名主机名;如果不添加if exists关键字当删除了一个不存在的用户时该语句会发生错误在删除用户时如果省略主机地址则默认为%。值得一提的是当drop user删除当前正在打开的用户时该用户的会话不会被自动关闭只有在该用户会话关闭后删除操作才生效。数据库权限MySQL中的权限信息根据其作用范围分别存储在mysql数据库的不同数据表中当MySQL启动时会自动加载这些权限信息并将这些权限信息读取到内存中。user保存用户的全局权限db保存用户的数据库权限tables_priv保存用户的表权限columns_priv保存用户的列权限procs_priv保存用户的存储过程权限MySQL提供的常见权限权限大类权限名称核心作用权限级别基础数据操作权限SELECT读取 / 查询数据库中的数据全局、数据库、表、列INSERT向数据表中插入 / 新增数据全局、数据库、表、列UPDATE修改 / 更新数据表中已有的数据全局、数据库、表、列DELETE删除数据表中的数据全局、数据库、表库表结构管理权限CREATE创建新的数据库、数据表、视图等对象全局、数据库、表ALTER修改已有数据表的结构新增 / 修改字段、调整索引等全局、数据库、表DROP删除数据库、数据表、视图等对象全局、数据库、表INDEX创建、修改、删除数据表的索引全局、数据库、表CREATE VIEW创建 / 删除视图全局、数据库、表高级系统管理权限ALL PRIVILEGES拥有 MySQL 的所有权限最高权限全局、数据库、表、列GRANT OPTION将自己拥有的权限授权给其他用户全局、数据库、表、列、存储过程、代理PROCESS查看 MySQL 服务器的所有进程、执行中的 SQL 语句全局SHUTDOWN关闭 MySQL 服务器全局RELOAD刷新 MySQL 的权限、配置、缓存等flush操作全局权限级别就是权限可以被应用在哪些数据库的内容中例如select权限可以被授予到全局任意数据库下的任意内容、数据库指定数据库下的任意内容、表指定数据库下的指定表、列指定数据库下的指定数据表中的指定字段给用户授权想要使用grant语句为用户授权必须要拥有grant option权限。GRANT 权限列表 ON 数据库名.表名 TO 用户名主机名;权限列表多个权限用逗号分隔GRANT INSERT, UPDATE ON goods.services TO op_user%;用户op_user对goods数据库中的services表有插入、修改的权限。*.*全局权限dbname.*数据库级权限dbname.tablename表级权限更新权限FLUSH PRIVILEGES;查看用户权限show grants for op_user%回收权限在MySQL中为了保证数据库的安全需要将用户不必要的权限回收。MySQL专门提供revoke语句用于回收指定用户的权限REVOKE 权限列表 ON 数据库名.表名 FROM 用户名主机名;回收单个权限revoke insert(name,price) on shop.goods from test1%一次性回收所有权限REVOKE ALL PRIVILEGES ON goods.* FROM dev_user%;总结用户管理MySQL 通过 user 表管理用户信息。创建用户使用 create user 语句创建用户。删除用户使用 drop user 语句删除用户。修改密码使用 set password 语句修改用户密码。权限管理使用 grant 和 revoke 语句为用户授予权限和回收权限。