MySQL数据库(13) 用户管理
目录
一,用户
1.1 关于用户
1.2 创建用户
1.3 修改密码
1.4 删除用户
二,权限
2.1 关于权限
2.2 给用户权限
2.3 移除用户权限
一,用户
1.1 关于用户
- MySQL也有自己的账号管理系统,那么既然有账号,那么也就有普通用户和超级用户之分
- MySQL的账号管理是以表的形式管理的,在MySQL刚刚安装的时候,会默认创建一些库,其中有一个库名叫做mysql:
查看其中的表,可以发现一个叫做 user 的表:
这个user表里面存储的就是MySQL中用户相关的信息:
但是直接这样的话会刷屏,可以选择下面的SQL 让其只显示部分字段:
- user:表示用户名
- host:表示该用户可以从哪个主机登录,localhost表示只能从本机登录
- authentication_string: 表示该用户的密码经过password函数加密后的值
1.2 创建用户
注:如果后面的某些步骤出现ERROR,可以尝试使用SQL:flush privileges; 来刷新下内存
假设我要创建一个用户,用户名为‘dyk’,可以从任意地点登录,并且将密码设置成‘123456’,则使用下的SQL:
再次查看前面的user表,可以发现有了我们刚刚创建的用户:
然后我们就可以使用该用户名登录了,并且由于我们把host设置成%,那么如果我们本地的Windows系统也安装了MySQL,那么也可以使用这个用户去登录:
1.3 修改密码
在旧版本的MySQL中,我们使用下面的SQL来修改密码:
自己改自己的密码
set password=password('新的密码');root修改指定用户的密码
set password for 'dyk'@'%'=password('1234abcd');
但是在MySQL 8.0 以及之后的版本中,password函数已被移除并且不再推荐使用,而是引入了更安全的身份验证插件和密码哈希方法,默认情况下,MySQL 8.0 使用 caching_sha2_password 或 mysql_native_password 插件来处理密码
在MySQL 8.0 可以使用下面的SQL修改密码:
创建一个用户并设置密码
CREATE USER 'newuser'@'localhost' IDENTIFIED BY '新的密码';修改现有用户的密码
ALTER USER 'myuser'@'localhost' IDENTIFIED BY '新的密码';
1.4 删除用户
如果没有指定用户登录地址,默认删除的登录地址以为%的用户,因为MySQL允许有同名用户,只要登录地址不同即可
二,权限
2.1 关于权限
MySQL提供的权限如下:
All/All Privileges:权限代表全局或者全数据库对象级别的所有权限
Alter:代表允许修改表结构的权限,但必须要求有create和insert权限配合。如果是rename表名,则要求有alter和drop原表, create和insert新表的权限
Alter routine:代表允许修改或者删除存储过程、函数的权限
Create:代表允许创建新的数据库和表的权限
Create routine:代表允许创建存储过程、函数的权限
Create tablespace:代表允许创建、修改、删除表空间和日志组的权限
Create temporary tables:代表允许创建临时表的权限
Create user:代表允许创建、修改、删除、重命名user的权限
Create view:代表允许创建视图的权限
Delete:代表允许删除行数据的权限
Drop:代表允许删除数据库、表、视图的权限,包括truncate table命令
Event:代表允许查询,创建,修改,删除MySQL事件
Execute:代表允许执行存储过程和函数的权限
File:代表允许在MySQL可以访问的目录进行读写磁盘文件操作,可使用的命令包括load data infile,select … into outfile,load file()函数
Grant option:代表是否允许此用户授权或者收回给其他用户你给予的权限,重新付给管理员的时候需要加上这个权限
Index:代表是否允许创建和删除索引
Insert:代表是否允许在表里插入数据,同时在执行analyze table,optimize table,repair table语句的时候也需要insert权限
Lock:代表允许对拥有select权限的表进行锁定,以防止其他链接对此表的读或写
Process:代表允许查看MySQL中的进程信息,比如执行show processlist, mysqladmin processlist, show engine等命令
Reference:是在5.7.6版本之后引入,代表是否允许创建外键
Reload:代表允许执行flush命令,指明重新加载权限表到系统内存中,refresh命令代表关闭和重新开启日志文件并刷新所有的表
Replication client:代表允许执行show master status,show slave status,show binary logs命令
Replication slave:代表允许slave主机通过此用户连接master以便建立主从复制关系
Select:代表允许从表中查看数据,某些不查询表数据的select执行则不需要此权限,如Select 1+1, Select PI()+2;而且select权限在执行update/delete语句中含有where条件的情况下也是需要的
Show databases:代表通过执行show databases命令查看所有的数据库名
Show view:代表通过执行show create view命令查看视图创建的语句
Shutdown:代表允许关闭数据库实例,执行语句包括mysqladmin shutdown
Super:代表允许执行一系列数据库管理命令,包括kill强制关闭某个连接命令, change master to创建复制关系命令,以及create/alter/drop server等命令
Trigger:代表允许创建,删除,执行,显示触发器的权限
Update:代表允许修改表中的数据的权限
Usage:是创建一个用户之后的默认权限,其本身代表连接登录权限
信息来源: Mysql 用户权限管理(权限列表) - 数据库小白(专注) - 博客园
2.2 给用户权限
先创建一个用户用于演示:
我们在root用户下创建一个库并往里面插入一些数据:
然后我们切换成用户 ‘zhangsan’, 可以看到大部分的库都不可见:
所以我们要给zhangsan权限,如下SQL:
这时候切回zhangsan用户就能看到rootDB库以及user表了,能执行CURD操作:
给予用户权限SQL如下:
grant 权限名 on 库名.表名 to '用户名'@'登录地址' [identified by '密码'];
- 权限名:表示要给予的权限列表,如果要一次性给予多个权限,那么多个权限之间由逗号分开
- 库名.表名:表示要给予给用户哪个数据库下哪个表的权限
- '用户名'@'登录地址':表示要给哪个用户权限
- identified by '密码':这个是可选项,如果用户存在,则可以在给予权限时顺便修改下密码,如果用户不存在,则创建用户并设置密码
2.3 移除用户权限
移除权限SQL如下:
revoke 权限名 on 库名.表名 from '用户名'@'登录地址'
- 移除权限的语法和给予是一样的,只是将to关键字改成了from,并且去掉了修改密码的字段
上面是对单个表做操作,也可以把表名换成‘ * ’,表示对该库下的所有表的权限做操作
需要注意的是,回收权限后将会在该用户下一次进入数据库时才会生效,如果回收权限时该用户正在使用对应的数据库,那么此时回收权限后该用户仍拥有对应权限