MySQL -chapter3用户/权限管理总结及某一些问题的规避

添加用户

语法格式
create user 用户名1@主机1 identified by 密码名1,[用户名2@主机2 identified by 密码名2,…];
但是这个命令并不是在root用户登录服务器之后,就写这个命令执行的,需要在mysql这个数据库中执行的。如果单单添加一个用户,那么只要写1个 用户名1@主机1 identified by 密码名1 即可,但是如果是多个,那么就写多个,并且用逗号隔开
即基本步骤为:
1)root用户登录服务器
2)使用mysql这个数据库,即执行use mysql命令。但是经过检验之后发现即使没有这一步也可以成功创建新的用户。
在这里插入图片描述

3)可以执行上面说到的语句了,即create user 用户名1@主机1 identified by 密码名1,[用户名2@主机2 identified by 密码名2,…]
在这里插入图片描述
值得注意的的几个问题
1)即使没有写identified by 密码也没有发生报错,此时如果没有写identified by 密码,那么root用户退出服务器之后,用刚刚添加的用户试图登录不需要输入密码就可以直接登陆了

2)@主机:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%,如果在创建的过程中,只给出了用户名,而没指定主机名,那么主机名默认为“%”,即对所有主机开放权限,这个用户可以在所有的主机都可以登陆

这里有一个坑可以避免的
创建用户时发生报错ERROR 1396 (HY000): Operation CREATE USER failed for ‘lisi’@‘localhost’,但是经过检查时语法并没有错误,这时候要怎么解决呢?
1)执行select * from user,判断这个新建的用户是否已经存在了。但是大多数情况时没有存在的
2)执行flush privileges;进行刷新,然后再一次执行创建用户的语句,但是事与愿违,还是发生报错了ERROR 1396 (HY000): Operation CREATE USER failed for ‘lisi’@‘localhost’。
3)执行drop user 想要新建的用户名@想要新建用户对应的主机命令之后,之后可以先进行刷新权限,即执行flush privileges; 命令,最后重新执行创建用户的命令,这时候发现创建用户成功了。但是经过试验,没有进行刷新权限也是可以的,只是为了保障一些吧!
在这里插入图片描述

详细的解答可以看这里哦:
http://stackoverflow.com/questions/5555328/error-1396-hy000-operation-create-user-failed-for-jacklocalhost

删除用户

语法格式:
drop user 用户名1@主机名1[,用户名2@主机名2,…];
添加用户的时候可以同时添加多个用户,那么当然可以同时删除多个用户啦!
在这里插入图片描述
同样的,他的基本步骤和添加用户的基本步骤一样:
1)root用户登录服务器
2)使用mysql数据库,即执行use mysql命令。当然这一步是可以不需要的啦,直接执行第三部就可以了。
3)执行上面的语句:drop user 用户名1@主机名1[,用户名2@主机名2,…],从而将对应的用户删除,如果要查看是否删除成功,那么可以在mysql数据库中查询user表,即先要执行use mysql,保证下面的命令是在mysql数据库中,然后在执行select * from user命令,没有看到删除的用户就是表明已经成功删除了;当然也可以先退出服务器,然后尝试用刚刚删除的用户进行登陆服务器,即使用户名和密码都正确,都会发生报错,表明删除成功,因为这个用户都已经不存在了
在这里插入图片描述

修改用户名

语法格式:
1)rename user 旧用户名@主机名 to 新用户名@主机名;注意的是不要忘记写user了。同时新旧用户名的顺序不要调换了。
这里依旧是以lisi用户为例子进行更改用户名:
在这里插入图片描述
这是这样子并不能表名真的已经更改成功了,还需要退出服务器之后,用更改后的用户名进行登录才可以,如果登陆成功了,才可以证明已经更改成功了,否则更改失败。
在这里插入图片描述
可能有人问了,都已经执行select * from user了,也显示已经更改了,为什么还要多此一举呢?原因是如果执行update user set User = 新用户名 where User = 旧用户名 and Host = 主机名;命令之后如果执行select * from user命令,同样有相同的效果,但是如果退出服务器之后,如果用新用户名登陆服务器会发现登陆不了,而用旧用户名则可以重新登陆
下面是证明的例子:
1、首先新建两个用户,从而进行对照,lisi用户执行rename进行更改,而zhangshan用户利用update进行更改
在这里插入图片描述
2、执行相关语句进行更改之后,执行select * from user:
在这里插入图片描述
3、root用户退出服务器之后,然后分别用新用户/旧用户进行登录服务器,查看是否真的修改成功了,如果新用户登陆成功,旧用户登陆失败表示修改成功,否则,如果新用户登录失败,而旧用户登录成功,表时修改失败(这里不太确定是否结论就是这样,如果有不对的地方,请大家指正)
在这里插入图片描述
那看到这里,可能还会有人问,到底可不可使用update进行更改用户名呢
答案是当然可以的啦,只不过是要在执行update语句之后,一定要刷新权限,即执行flush privileges;命令之后,此时root用户退出服务器,用更改后的用户登录服务器,这时候登陆成功了,而用原来的用户名则无法登录,表明用户名更改成功。
因此更改用户名的第二种方式
2) update user set User = '新用户名 where User = ‘旧用户名’ and Host = ‘旧用户对应的主机’;万分注意的是,如果通过这种方式更改用户名,那么执行这行命令之后,还要进行刷新权限,即执行flush privileges命令,才可以更改用户名成功,否则就和上面的例子一样更改失败。
在这里插入图片描述
值得注意的是在user表中,它的主键是一个复合主键,即User和Host两个列组成一个主键,因此只有两则都相同的情况下才可说是用户相同,否则只有其中一个相同,此时依旧是两个用户,因此这里的where后面个人觉得还需要添加Host = ‘原来用户对应的主机’,否则如果有两个用户的用户名相同,但是对应的主机不同,此时如果没有Host,那么就会更改了两个用户的用户名了。但是这只是我的个人看法,如果有不好的地方,请大家指正哈

修改密码

几种修改密码的方式:
1)set password for 用户名@主机名 = password(‘新密码’);注意的是新密码必须使用 password() 函数来加密,如果不使用 password() 加密,也会执行成功,但是用户会无法登录
2) update user set password = password(‘新密码’) where User = ‘要修改密码的用户名’;
3)alter user 用户名@主机名 identified by ‘新密码’;
经过实验之后,我只有通过方法三才可以成功修改用户的密码,另外两种方法都会出现报错。
在这里插入图片描述

查看权限

语法格式:
show grants for 用户名@主机名;从而可以查询这个用户的权限。
注意的是,如果是刚刚添加的用户,没有任何的权限,只能够登陆而已
在这里插入图片描述
USAGE ON *.*表示该用户对任何数据库和任何表都没有权限

添加权限

语法格式:
grant 权限1,权限2,… on 数据库名.这个数据库中的表名 to 用户名1@主机名1[,用户名2@主机名2,…];

注意的是,如果要访问某一个数据库中所有的表,那么就要使用了数据库名 . * 。同样的,如果要访问所有的数据,即所有数据库的所有表都可以访问,此时为 * . * /
在这里插入图片描述

删除权限:

语法格式:
revoke 权限1,权限2, … on 数据库名.这个数据库中的表名 from用户名1@主机名1[,用户名2@主机名2,…];
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值