一、数据库用户管理
1.1 新建用户
create user '用户名'@'来源地址' [identified by [password] '密码'];
# '用户名':指定将创建的用户名
# '来源地址':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost。允许任意主机登录可用通配符
# '密码':1)若使用明文密码,直接输入'密码',插入到数据库时由MySQL自动加密;
2)若使用加密密码,需要先使用select password('密码');获取密文,再在语句中添加passwd '密文';
3)若省略"identified by"部分,则用户的密码将为空(不建议使用)
示例1:
'root'@'%' #可以在任何主机中使用root登录,包括本地
'root'@'localhost' #只能在本地使用root登录
示例2:
create user 'zhangsan'@'%' identified by '123456';
create user 'zhangsan'@'localhost' identified by '123456';
# 当创建两个同名用户登录,一个是在localhost登录一个,一个创建是在'%'登录
# 将优先使用localhost这个密码进行本地登录
注意:create user所创建的用户,只有登录MySQL数据库的权限,无法进行增删改查的操作。
1.2 查看用户信息
MySQL数据库的用户存放在mysql库中的user表,该表主要存放用户的信息
select host,user,authentication_string from user;
# 用于查看user表中的用户名和密码的基本信息
1.3 查看当前登录用户
select user(); #查看当前用户登录信息
1.4 更改用户名信息
rename user '用户名'@'localhost' to '新用户名'@'设定登陆地址';
1.5 更改用户密码
set password = passsword('密码'); # 更改当前用户的密码,password()代表对内部的密码进行加密措施
set password for '其他用户'= passsword('密码');
1.6 忘记MySQL密码后如何进行恢复
在我们忘记MySQL登录密码情况下,我们可以修改MySQL的配置文件参数,达到免密登录的效果
vim /etc/my.cof # MySQL配置文件
# 在mysqld配置下加入一行参数
skip-grant-tables
PS:该配置在重新登录完成后,建议注释掉,并重新进行密码的加密,否则以后的登录都无需通过密码,安全性大大降低。
1.7 删除用户
drop user '用户名'@'来源地址';
#指定user表中的用户进行删除
1.8 远程登陆MySQL数据库
mysql -u <用户名> -p<密码> -h 192.168.142.70 -P 3306
# 指定用户名及密码,指定目标主机的IP地址及端口号达到远程登陆其他主机MySQL数据库的效果
要想使用远程登陆这个功能,要确保两台主机的防火墙关闭,确保两台主机是可以进行通信的。
二、数据库用户权限管理
2.1 授予权限
① grant语句与基本格式
grant语句:专门用来设置数据库用户的访问权限。当指定的用户不存在时,grant语句将会创建新的用户并授权;当指定的用户存在时,grant语句用于修改用户信息进行授权。
grant 权限列表 on 数据库名.表名 to '用户名'@'来源地址' [identified by [password] '密码'];
- 权限列表:用于列出授权使用的各种数据库操作,以逗号进行分割,如"select,insert,update"。使用"all"表示所有权限,可授权执行任何操作。
- 数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符"*"表示。比如"mysql.*"代表mysql数据库下方的所有表都可以进行相关的授权操作。
- '用户名'@'来源地址':用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP地址、还可以使用"%"(通配符),表示某个区域或网段内的所有地址,如"192.168.142.%"、"%.baidu.com"等。
② 用户的权限列表
授权用户所有权限是all privitege,all privitege所包含的权限如下所示:
| 权限 | 含义 |
|---|---|
| insert | 插入数据 |
| select | 查询数据 |
| update | 更新表的数据 |
| delete | 删除表中数据 |
| create | 创建库、表 |
| drop | 删除库、表 |
| reference | 5.7.6版本之后引入,代表是否允许创建外键 |
| index | 建立索引 |
| alter | 更改表属性 |
| create temporary tables | 创建临时表 |
| lock tables | 锁表 |
| execute | 允许执行存储过程和函数的权限 |
| create view | 创建视图 |
| show view | 显示视图 |
| create routine | 创建存储过程 |
| alter routine | 修改存储过程 |
| event | 事件 |
| trigger on | 创建触发器 |
③ 指定用户指定的权限
示例:给予用户查询权限:
create user 'zhaoliu'@'%' identified by 'abc123';
# 创建一个用户zhaoliu,允许所有主机登录,密码为abc123
grant select on school.* 'zhaoliu'@'%' identified by 'abc123';
# 给予zhaoliu用户查看school库中任何表的查询权限;
给予所有权限:
grant all on *.* to '用户名'@'来源地址' [identified by [password] '密码'];
#给予用户所有的相关权限并修改/给予密码
PS:给予用户最高权限属于比较具有风险的操作,建议授权只给本地登录的用户,如果配置文件/etc/my.cof下添加了“NO_AUTO_CREATE_USER”这个SQL模式,创建用户或授权并创建新用户时,将无法设置空密码。
④ 查看用户拥有的权限
show grants for '用户名'@'来源地址';
# 查看指定用户权限
⑤ 撤销用户权限
revoke 权限列表 on 库名.表名 from '用户名'@'来源地址';
# 撤销用户权限,登录权限无法撤销