与Linux操作系统类似,MySQL中也有超级用户和普通用户之分
若一个用户只需访问MySQL中的某一个数据库,甚至数据库中的某一个表,那么可以为其创建一个普通用户,并为该用户赋予对应的权限,而不让该用户看到数据库中的其他数据,防止该用户对其他数据进行误操作
一、用户
1.1 用户信息
MySQL中默认有一个名为mysql的数据库
查看该数据库中的表,其中有一个名为user的表
user表中存储的是MySQL中用户相关的信息
user: 表示该用户的用户名
host: 表示该用户可以从哪个主机登录,localhost表示只能从本机登录,%表示可以从任意地方登录
authentication_string: 表示该用户的密码经过password函数加密后的值
xxx_priv: 表示该用户是否拥有对应权限
在查看用户信息时为了避免刷屏,可以只选择其中的部分字段进行显示
MySQL中可以存在同名的用户,只要同名用户对应的登录主机不同即可,因为user表中的主键是复合主键,由user列和host列共同承担
1.2 创建用户
CREATE USER '用户名'@'登录主机' IDENTIFIED BY '密码';
如下面创建一个用户名为GG_Bond,并且可以从任意地方登录的用户
创建好后就可以用新用户来连接MySQL服务器了
注意:
创建用户的SQL中包含用户的密码,因此该SQL不会被记录,所以不能通过上下键进行追溯
MySQL本身的认证级别比较高,因此创建用户时设置的密码不能太简单,否则会出现报错,这时可以选择将密码设置复杂一些,也可以对密码相关的设置进行调整
通过show命令查看全局变量,可以看到密码设置相关的要求
1.3 修改用户密码
用户修改自己的密码
以通过调用password函数,将新密码加密后的值设置到password中
超级用户修改任意用户的密码
超级用户可以通过调用password函数,将新密码加密后的值设置到指定用户的password中
1.4 删除用户
DROP USER '用户名'@'登录地址';
注意:删除用户时若不指明待用户的登录地址,则默认删除的是登录地址为%的用户
二、数据库权限
2.1 MySQL中的权限
注意:新创建的用户没有任何权限,因此创建用户后需要给用户授权
2.2 赋权
GRANT 权限列表 ON 库名.对象名 TO '用户名'@'登录地址' [IDENTIFIED BY '密码'];
'用户名'@'登录地址':表示给哪一个用户授权
库名.对象名:表示要授予用户哪个数据库下的哪个对象的权限
权限列表:表示要授予用户何种权限,多个权限之间用逗号隔开
IDENTIFIED BY '密码'可选:若用户存在,则在授予权限的同时修改该用户的密码;若用户不存在,则创建该用户
如下面创建用户GG_Bond,并授予用户在test数据库下所有对象的select权限
授权后通过 show grants for '用户名'@'登录地址' 查看该用户现有的权限
创建用户后该用户默认会有USAGE权限,该权限只能用于数据库登录,不能执行任何操作
*.*表示所有数据库的所有对象,库名.*表示某个数据库的所有对象(表、视图、存储过程等)
此时该用户查看数据库时,就能查看到test数据库了(创建用户后默认只能看到information_schema数据库,该数据库中保存的是MySQL服务器所维护的所有其他数据库的信息)
进入test数据库后,也能查看其中的所有表
但该用户目前只能查看表中的信息,而不能对表中的数据进行修改,因为只授予了该用户select权限
下面将test数据库下的所有权限都授予该用户
此时该用户就可以对表中的数据进行其他操作了
2.3 回收权限
REVOKE 权限列表 ON 库名.对象名 FROM '用户名'@'登录地址';
将GG_Bond用户在test数据库下的所有权限回收
注意:
回收用户在某一数据库下的权限后,在该用户下一次进入该数据库时才会生效
若发现赋权或者回收权限后,没有生效,执行flush privileges