MySQL 用户管理与权限控制
前言
如果我们智能使用root用户进行操作的话,相当于我们进行访问root 权限下的OS,之前我们了解过一切皆文件的思想,使用mysql其实也就是在系统中进行对数据库文件或者表文件进行管理,当所有人都具有权限时这是很危险的,容易出现误删文件等安全隐患。此时我们就需要进行使用MySQL进行用户管理。
进行查看用户信息
查看用户的基本信息(用户名,这个用户对应的从哪个主机登陆,如果是localhost,表示只能从本机登陆,用户密码通过password函数加密后的密码)
select user,host,authentication_string from mysql.user;
- user: 用户名
- host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆
- authentication_string: 用户密码通过password函数加密后的
mysql.infoschema
:这是 MySQL 系统数据库用户,用于 MySQL 的信息架构。
mysql.session
:这是 MySQL 用于会话信息的系统用户。
mysql.sys
:这是 MySQL 系统数据库的内部用户,主要用于 MySQL 8.0+ 的系统管理。
创建用户
create user '用户名'@'登陆主机/ip' identified by '密码';
进行创建用户之后,需要进行刷新一下,因为进行创建用户的信息是在内存中的,需要将内存中的信息进行刷新的磁盘中
flush privileges;
进行创建出来的用户能不能通过远端进行登录呢?
答案是不可以的,因为刚刚进行创建出来的用户是没有权限的,我们在进行创建的时候,需要将host 进行设置成 ' % '。
删除用户
drop user '用户名'@'主机名';
修改用户密码
更改密码的本质就是对密码表进行增删查改
- mysql老版本进行修改自己的密码 (mysql 8.0之后废弃)
自己进行更改自己的密码
set password=password('新的密码');
root 用户进行修改指定用户的密码
set password for '用户名'@'主机名'=password('新的密码');
- mysql新版本进行修改自己的密码
alter user '用户名'@'主机地址' identified by 'new_password';
权限的管理
权限 | 列 | 上下文说明 |
---|---|---|
CREATE | Create_priv | 数据库、表或索引的创建权限 |
DROP | Drop_priv | 数据库、表或索引的删除权限 |
GRANT OPTION | Grant_priv | 授权其他用户此权限的权限 |
REFERENCES | References_priv | 创建外键约束的权限 |
ALTER | Alter_priv | 修改表的结构(如添加列、修改列) |
DELETE | Delete_priv | 删除表中的记录权限 |
INDEX | Index_priv | 创建和删除索引的权限 |
INSERT | Insert_priv | 向表中插入记录的权限 |
SELECT | Select_priv | 查询数据的权限 |
UPDATE | Update_priv | 修改表中的数据权限 |
CREATE VIEW | Create_view_priv | 创建视图的权限 |
SHOW VIEW | Show_view_priv | 显示视图的权限 |
ALTER ROUTINE | Alter_routine_priv | 修改存储过程、函数的权限 |
CREATE ROUTINE | Create_routine_priv | 创建存储过程、函数的权限 |
EXECUTE | Execute_priv | 执行存储过程、函数的权限 |
FILE | File_priv | 访问文件的权限(如 LOAD DATA INFILE) |
CREATE TEMPORARY TABLES | Create_tmp_table_priv | 创建临时表的权限 |
LOCK TABLES | Lock_tables_priv | 锁定表的权限 |
CREATE USER | Create_user_priv | 创建用户的权限 |
PROCESS | Process_priv | 查看和管理后台进程的权限 |
RELOAD | Reload_priv | 重新加载数据库的权限 |
REPLICATION CLIENT | Repl_client_priv | 客户端复制权限(复制相关操作) |
REPLICATION SLAVE | Repl_slave_priv | 复制从服务器权限 |
SHOW DATABASES | Show_db_priv | 查看数据库列表的权限 |
SHUTDOWN | Shutdown_priv | 停止 MySQL 服务的权限 |
SUPER | Super_priv | 管理 MySQL 实例的超级权限 |
给用户授权
刚刚创建的用户没有任何权限,需要root用户给对应的用户进行授权。
grant 权限列表 on 库.对象名 to '用户名'@'登录位置(ip)' [identified by '密码']
回收权限
revoke 权限列表 on 库.对象名 from '用户名'@'登录位置(ip)';