ASP.NET Core Angular Netty 哨兵模式 存量客户 facebook search oauth nosql jqgrid tags chartjs vue插件 vuejs 教程 vue修改样式 php零基础入门视频 jquery去除空格 teamviewer验证被拒绝 art神经网络 查看kafka消费情况 cad正在执行命令 range函数python mysql更新 python中sort函数 java实例 java迭代器 java字符串长度 java平台 java读取文件数据 java获得当前日期 linux简介 python视频教程 dep 网络文件服务器 电脑手机模拟器 2k14生涯模式修改器 c语言编程实例 linux运维之道 xapk安装器 微信公众号点餐系统
当前位置: 首页 > 学习教程  > 编程学习

mysql的用户管理和权限管理(访问控制)

2021/1/9 2:08:52 文章标签: 用户账号控制

前言: MySQL服务器的安全基础是:用户应该对他们的需要的数据具有适当的访问权,既不能多也不能少。换句话说,用户不能对过多的数据具有过多的访问权。 例如,我们可能有一下要求: - 多数用户只能对表进行读…

前言:

MySQL服务器的安全基础是:用户应该对他们的需要的数据具有适当的访问权,既不能多也不能少。换句话说,用户不能对过多的数据具有过多的访问权。
例如,我们可能有一下要求:
- 多数用户只能对表进行读和写,但少数用户甚至需要创建和删除表;
- 有些用户需要读表,但不能更新表;
- 有些用户可以往表里添加数据,但是他们不能删除表了的数据;
- 等等;

以上的只是例子,但是有助于说明一个事实,也就是你需要给用户提供他们所需的访问权,且仅提供他们所需的访问权。这就是所谓的访问控制,管理访问控制需要创建和管理用户账号。

平时我们在学习或测试mysql的时候可能用的都是root的账户,但是在现实世界的日常生活中,在正式的开发过程中,我们要做到,尽量不要使用root用户登录(更linux很像,root就是万能的),因为权限太多了!我们应该创建一系列账户,有的用于管理,有的供用户使用,有的供开发人员使用,等等。

管理用户

MYSQL用户账号和信息存储在名为mysql的数据库中,一般的,我们不需要直接访问mysql数据库和表。我们可以从mysql表中获得所有用户账号列表:

USE mysql;
SELECT user FROM user;

返回:
这里写图片描述
我们用图形界面可能会看得更清楚(这里我用的是Navicat for mysql):
这里写图片描述

mysql数据库中有个user表,它包含所有的用户账号,user表里面有一个名为user的列,它存储用户登录名,新安装的服务器可能只有一个用户(如这里只有一个root用户)。

在这里我们看到暂时我们只有一个root用户,接下来我们看看如何管理用户:

1、创建用户账号:

为了创建一个新的用户账号,使用CREATE USER语句:

CREATE USER lsgo IDENTIFIED BY '123456';

如上我创建了一个新用户 lsgo ,密码为 123456 ,在创建用户的时候不一定要指定密码(不指定的话则登录密码为空),不过这里用 IDENTIFIED BY 指定了用户密码。
如果你再次列出用户账号,就会看到我们已经创建用户成功了:
这里写图片描述

用户是我创建的,那么我肯定能够修改他的名字啊!重命名一个用户用 RENAME USER 语句:

RENAME USER lsgo TO zhongjin;

这里写图片描述

改过来了有木有?感觉挺有趣的。

2、删除用户账号:

删除用户用:

DROP USER zhongjin;

注意:MYSQL 5以来DROP USER删除用户账号和所有相关的账号权限,但是在MYSQL 5以前,DROP USER只能用来删除用户账号,不能删除相关权限。那么在使用旧版的MYSQL,需要先把要删除的用户的权限都删除掉后,再删除用户。如何管理用户权限?看下面。。。

3、设置访问权限:

在创建完用户之后,必须接着分配访问权限,新创建的用户账号是没有访问权限的,他们能够登录MYSQL,但是不能看到数据,不能执行任何数据库的操作。

为了能够看到赋予给用户的权限,可以使用SHOW GRANTS FOR语句:

SHOW GRANTS FOR zhongjin;

这里写图片描述

输出结果显示用户zhongjin有一个权限 USAGE ON .。USAGE其实表示“根本没有权限”(尽管这很不直观),因此,此结果表示在任意数据库和任意表上对任何东西没有权限(*表示任意,某个数据库的某个表用: 数据库名.表名)

还有 zhongjin@% 是什么鬼?用户名定义为 user@root MySQL的权限用用户名和主机名结合定义,如果不使用主机名,则使用默认的主机名 %(授予用户访问权限而不管主机名)。
这里写图片描述

为了给用户授予权限,我们可以用 GRANT 语句,GRANT要求你至少给出以下几点信息:
1. 要授予的权限;
2. 倍授予访问权限的数据库或表;
3. 用户名(给谁分配);
例子:

GRANT SELECT ON test.* TO zhongjin;

此GRANT允许用户在test.*(test数据库下的任意表上)使用SELECT。通过只授予SELECT访问权限,用户zhongjin对test数据库只有只读的访问权限。

SHOW GRANTS FOR zhongjin;

返回:
这里写图片描述

每个GRANT添加或更新用户的一个权限,但是怎么给用户取消某个权限呢?我们就要用到REVOKE语句了。REVOKE语句撤销特定的权限:

REVOKE SELECT ON test.* FROM zhongjin;

结果发现:
这里写图片描述

之前的SELECT权限没有了。证明REVOKE语句起作用了。
注意:被撤销的访问权限必须存在,否则会出错。

GRANT 和 REVOKE 可在几个层次上控制访问权限:
- 在整个服务器,使用 GRANT ALL 和 REVOKE ALL;
- 在整个数据库,使用 ON database.*;
- 特定的表,使用 ON database.table;
- 特定的列;
- 特定的存储过程。

可以管理的权限当然有一大堆,大家可以访问
http://blog.chinaunix.net/uid-167175-id-3472332.html
了解更多的权限列表。

4、更改用户密码:

为了更改用户的密码,可使用 SET PASSWORD 语句:

SET PASSWORD FOR zhongjin = Password('456789');

SET PASSWORD 更新用户密码,新密码必须传到Password()函数中进行加密。

SET PASSWORD 还可以用来设置你自己的密码:

SET PASSWORD = Password('123789');

在不指定用户名时,SET PASSWORD更新当前登录用户的密码。

其实吧,用户权限这个东西如果用代码来实现,还是比较麻烦的,毕竟真正开发起来,我们的数据表会很多,权限也是多种多样的。我们可以尝试用图形界面来管理这些用户及权限:

这里写图片描述
这里写图片描述

本博客参考自《mysql必知必会》


本文链接: http://www.dtmao.cc/news_show_1100342.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?