- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章MySQL两种删除用户语句的区别(delete user和drop user)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
Tip:
在MySQL中,我们经常需要创建用户和删除用户,创建用户时,我们一般使用create user或者grant语句来创建,create语法创建的用户没有任何权限,需要再使用grant语法来分配权限,而grant语法创建的用户直接拥有所分配的权限。在一些测试用户创建完成之后,做完测试,可能用户的生命周期就结束了,需要将用户删除,而删除用户在MySQL中一般有两种方法,一种是drop user,另外一种是delete from mysql.user,那么这两种方法有什么区别呢?我们这里通过例子演示.
delete from mysql.user 。
首先,我们看看delete from mysql.user的方法。我们创建两个用户用来测试,测试环境是MySQL5.5版本,用户名分别为yeyz@'%'和yeyz@'localhost',创建用户的语法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
mysql 15:13:12>>
create
user
yeyz@
'%'
identified
by
'123456'
;
Query OK,
rows
affected (. sec)
mysql 15:20:01>>
grant
select
,
create
,
update
,
delete
on
yeyz.yeyz
to
yeyz@
'%'
;
Query OK,
rows
affected (. sec)
mysql 15:29:48>>
GRANT
USAGE
ON
yeyz.yeyz
TO
'yeyz'
@localhost IDENTIFIED
BY
'123456'
;
Query OK,
rows
affected (. sec)
mysql
--dba_admin@127...1:(none) 15:20:39>>show grants for yeyz@'%';
+
-----------------------------------------------------------------------------------------------------+
| Grants
for
yeyz@% |
+
-----------------------------------------------------------------------------------------------------+
|
GRANT
USAGE
ON
*.*
TO
'yeyz'
@
'%'
IDENTIFIED
BY
PASSWORD
'*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'
|
|
GRANT
SELECT
,
UPDATE
,
DELETE
,
CREATE
ON
`yeyz`.`yeyz`
TO
'yeyz'
@
'%'
|
+
-----------------------------------------------------------------------------------------------------+
|
此时我们通过delete的方法手动删除mysql.user表中的这两个用户,在去查看用户表,我们发现:
1
2
3
4
5
6
7
8
9
10
11
12
|
mysql 15:20:43>>
delete
from
mysql.
user
where
user
=
'yeyz'
;
Query OK,
rows
affected (. sec)
mysql 15:21:40>>
select
user
,host
from
mysql.
user
;
+
------------------+-----------------+
|
user
| host |
+
------------------+-----------------+
| dba_yeyz | localhost |
| root | localhost |
| tkadmin | localhost |
+
------------------+-----------------+
rows
in
set
(. sec)
|
已经没有这两个yeyz的用户了,此时我们使用show grants for命令查看刚才删除的用户,我们发现依旧是存在这个用户的权限说明的:
1
2
3
4
5
6
7
8
|
mysql 15:24:21>>show grants
for
yeyz@
'%'
;
+
-----------------------------------------------------------------------------------------------------+
| Grants
for
yeyz@% |
+
-----------------------------------------------------------------------------------------------------+
|
GRANT
USAGE
ON
*.*
TO
'yeyz'
@
'%'
IDENTIFIED
BY
PASSWORD
'*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'
|
|
GRANT
SELECT
,
UPDATE
,
DELETE
,
CREATE
ON
`yeyz`.`yeyz`
TO
'yeyz'
@
'%'
|
+
-----------------------------------------------------------------------------------------------------+
rows
in
set
(0.00 sec)
|
说明我们虽然从mysql.user表里面删除了这个用户,但是在db表和权限表里面这个用户还是存在的,为了验证这个结论,我们重新创建一个yeyz@localhost的用户,这个用户我们只给它usage权限,其他的权限我们不配置,如下:
1
2
|
mysql ::>>
GRANT
USAGE
ON
yeyz.yeyz
TO
'yeyz'
@localhost IDENTIFIED
BY
'123456'
;
Query OK,
rows
affected (. sec)
|
这个时候,我们使用yeyz@localhost这个用户去登陆数据库服务,然后进行相关的update操作,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
[dba_mysql@tk-dba-mysql-stat
-- ~]$ /usr/local/mysql/bin/mysql -uyeyz --socket=/data/mysql_4306/tmp/mysql.sock --port= -p -hlocalhost
Enter
password
:
Welcome
to
the MySQL monitor. Commands
end
with
;
or
\g.
Your MySQL
connection
id
is
Server version: 5.5.-log MySQL Community Server (GPL)
Copyright (c) , , Oracle
and
/
or
its affiliates.
All
rights reserved.
Oracle
is
a registered trademark
of
Oracle Corporation
and
/
or
its
affiliates. Other names may be trademarks
of
their respective
owners.
Type
'help;'
or
'\h'
for
help. Type
'\c'
to
clear the
current
input statement.
mysql
--yeyz@localhost:(none) 15:31:05>>select * from yeyz.yeyz;
+
------+
| id |
+
------+
| 3 |
| 4 |
| 5 |
+
------+
rows
in
set
(. sec)
mysql
--yeyz@localhost:(none) 15:31:16>>delete from yeyz.yeyz where id=;
Query OK, row affected (. sec)
mysql
--yeyz@localhost:(none) 15:31:32>>select * from yeyz.yeyz;
+
------+
| id |
+
------+
| 3 |
| 4 |
+
------+
rows
in
set
(. sec)
|
最终出现的结果可想而知,一个usage权限的用户,对数据库总的表进行了update操作,而且还成功了。这一切得益于我们delete from mysql.user的操作,这种操作虽然从user表里面删除了记录,但是当这条记录的host是%时,如果重新创建一个同名的新用户,此时新用户将会继承以前的用户权限,从而使得用户权限控制失效,这是很危险的操作,尽量不要执行.
再开看看drop的方法删除用户 。
首先,我们删除掉刚才的那两个用户,然后使用show grants for语句查看他们的权限:
1
2
3
4
5
6
7
8
9
|
mysql ::>>
drop
user
yeyz@
'%'
;
Query OK,
rows
affected (0.00 sec)
mysql ::>>
drop
user
yeyz@
'localhost'
;
Query OK,
rows
affected (0.00 sec)
mysql ::>>
mysql ::>>show grants
for
yeyz@
'%'
;
ERROR (): There
is
no
such
grant
defined
for
user
'yeyz'
on
host
'%'
mysql ::>>show grants
for
yeyz@
'localhost'
;
ERROR (): There
is
no
such
grant
defined
for
user
'yeyz'
on
host
'192.168.18.%'
|
可以看到,权限已经完全删除了,此时我们重新创建一个只有select权限的用户:
1
2
|
mysql ::>>
GRANT
SELECT
ON
*.*
TO
'yeyz'
@
'localhost'
IDENTIFIED
BY
PASSWORD
'*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'
;
Query OK,
rows
affected (. sec)
|
我们使用这个用户登录到数据库服务,然后尝试进行select、update以及create操作,结果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
[dba_mysql@tk-dba-mysql-stat-10-104 ~]$ /usr/
local
/mysql/bin/mysql -uyeyz
--socket=/data/mysql_4306/tmp/mysql.sock --port=4306 -p -hlocalhost
Enter
password
:
Welcome
to
the MySQL monitor. Commands
end
with
;
or
\g.
Your MySQL
connection
id
is
Server version: 5.5.19-log MySQL Community Server (GPL)
Copyright (c) , , Oracle
and
/
or
its affiliates.
All
rights reserved.
Oracle
is
a registered trademark
of
Oracle Corporation
and
/
or
its
affiliates. Other names may be trademarks
of
their respective
owners.
Type
'help;'
or
'\h'
for
help. Type
'\c'
to
clear the
current
input statement.
mysql ::>>
select
*
from
yeyz.yeyz;
+
------+
| id |
+
------+
| |
| |
| |
+
------+
rows
in
set
(0.00 sec)
mysql ::>>
update
yeyz.yeyz
set
id=
where
id=;
ERROR ():
UPDATE
command denied
to
user
'yeyz'
@
'localhost'
for
table
'yeyz'
mysql ::>>
create
table
test (id
int
);
ERROR (D000):
No
database
selected
mysql ::>>
create
table
yeyz.test (id
int
);
ERROR ():
CREATE
command denied
to
user
'yeyz'
@
'localhost'
for
table
'test'
|
可以发现,这个用户只可以进行select操作,当我们尝试进行update操作和create操作的时候,系统判定这种操作没有权限,直接拒绝了,这就说明使用drop user方法删除用户的时候,会连通db表和权限表一起清除,也就是说删的比较干净,不会对以后的用户产生任何影响.
结论:
当我们想要删除一个用户的时候,尽量使用drop user的方法删除,使用delete方法可能埋下隐患,下次如果创建同名的用户名时,权限控制方面存在一定的问题.
这个演示也解决了一些新手朋友们的一个疑问:为什么我的用户只有usage权限,却能访问所有数据库,并对数据库进行操作?这个时候,你需要看看日志,查询自己有没有进行过delete from mysql.user的操作,如果有,这个问题就很好解释了.
以上就是MySQL两种删除用户语句的区别(delete user和drop user)的详细内容,更多关于MySQL 删除用户的资料请关注我其它相关文章! 。
原文链接:https://cloud.tencent.com/developer/article/1533576 。
最后此篇关于MySQL两种删除用户语句的区别(delete user和drop user)的文章就讲到这里了,如果你想了解更多关于MySQL两种删除用户语句的区别(delete user和drop user)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
export class UserListComponent implements OnInit{ users; constructor(private userService: UserS
我最近在我的系统中遇到了 Java 语言环境的问题,我试图用这个配置运行一个项目: -Duser.language=pt_BR -Duser.country=BR 谷歌搜索后,我找到了this sit
1 当我希望出现注册错误时,我的代码出现问题:管理器不可用; 'auth.User' 已替换为 'users.User' ,我尝试解决其他问题,与 Manager 不可用相同; 'auth.User'
Loopback 非常酷,但这是我迄今为止遇到的一个缺点,我真的不确定如何解决它。内置用户模型在我的 MongoDB 数据库中生成一个名为“User”的集合,当我尝试根据 Loopback.js 自己
我在 aws cognito 中有以下用户组。行政成员付费成员(member) 我想在所有用户注册我的应用程序时将所有用户默认分配到 Member 用户组,这样我就可以为该用户组分配不同的 IAM A
blogsIndex.blade.php @extends('layouts.default') @section('details')
我正在尝试在Rails 3开发环境中使用sqlite3而不是MySQL,但是遇到了问题。尝试执行rake db:migrate时,我得到: SQLite3::SQLException: no such
尝试使用 构建 API Phoenix v1.3 按照本教程: https://dreamconception.com/tech/phoenix-full-fledged-api-in-five-mi
我正在使用通过模板 cookie-cutter 创建的 Django。当我尝试在本地使用 docker 运行项目时,出现以下错误。 FATAL: password authentication fai
我正在尝试使用 node.js/adonis 创建新用户 我创建了这两个函数: const User = use("App/Models/User") async store ({ request,
我想安排一些事情,例如 GET 请求 http://example.com/user/foo@bar.com 内部调用脚本 /var/www/example.com/rest/user/GET.php
我是一名具有可用性工程背景的软件开发人员。当我在研究生院学习可用性工程时,其中一位教授有一句口头禅:“你不是用户”。我们的想法是,我们需要将 UI 设计基于实际的用户研究,而不是我们自己关于 UI 应
您好,我正在制作一个使用互联网发送消息的消息传递应用程序。我需要从用户 a 向用户 b 发出通知。 我使用这段代码: if (toUser!= nil){ parseMessage[@
在 ruby/ror 中你可以这样做: user = User.new(params[:user]) 它使用发布表单中的值填充新对象。 使用 django/python 可以完成类似的事情吗? 最
每当我编辑用户的角色时,用户都需要注销并重新登录以查看更改。提升用户时没有问题,因为他们在再次登录之前不会看到额外的权限。但是,当降级发生时,用户仍将保留其现有角色,这会带来安全风险。想象一下,撤销一
我的核心数据有线问题。使用 iOS 10 中的 Swift3,每次使用 获取或存储数据时,我都会获得托管对象上下文 func getContext () -> NSManagedObjectCont
我发现当我使用 users_path(user) 时它返回 /users.id 其中 id 是用户的 ID 但我希望它返回 /用户/ID。我的配置 routes.rb 如下所示。 # config/r
我的应用程序在我的测试设备上正常运行(当我通过 ADT 安装它时,当我通过导出的 APK 文件安装它时)但它在 Play Store 测试设备上失败并出现以下错误: Permission Denial
创建模型的第一个条目会抛出错误 我执行了以下命令进行迁移 manage.py makemigrations manage.py migrate 在我执行这些命令以在数据库中创建第一个“数据”之后,一切
我正在尝试实现一个 getter,但它在下面代码 fragment 的最后一行向我显示了这个错误。 代码是—— class AuthRepository extends BaseAuthReposit
我是一名优秀的程序员,十分优秀!