用户登录

前面我们使用 CREATE USER 去为 MySQL 添加了一个新的用户,要想让这个用户能去做点什么,你需要给他分配一些权限。权限可以分成几个类型,有处理数据的权限,比如 SELECT,INSERT,UPDATE,DELETE。还有影响数据表结构的权限,比如 CREATE,ALTER,INDEX,DROP。还有一些管理类型的权限,比如 GRANT,CREATE USER 等等。

使用这些权限也分为几个层级,你可以为用户把这些权限分配到全局范围,这样用户就可以对系统里的所有的数据库去执行你分配的权限。我们也可以把权限分配到指定的数据库,或者数据表和列上面。

一般我们会把权限分配到数据库的级别,也就是用户只能针对某些你指定的数据库去执行你分配给他的权限。

GRANT

分配权限用的是 GRANT 命令,使用的语法看起来像这样:

GRANT 权限 ON 数据库/表 TO '用户'@'主机名' [IDENTIFIED BY '密码']

GRANT 命令后面是你想要分配的权限的列表,不同的权限之间用逗号分隔开,想要分配所有权限的话,这里可以用一个 ALL PRIVILEGES ,这个关键词表示所有的权限。

ON 的后面可以指定数据库或者数据表,这样你分配的权限只会应用在这些指定的数据库或者数据表上面。在这里,你可以使用 *.* 这个点位符,它表示所有的数据库。如果想应用在单独某个数据库上,可以使用 数据库.数据表 的形式,把权限应用在所有的表上,可以使用一个 * 号。比如把权限应用在 movietalk 这个数据库里的所有的数据表上,可以这样:movietalk.*

TO 的后面是用户的名称还有主机名,也就是你想分配权限的用户。方括号里的 IDENTIFIED BY '密码' 是一个可选项,在这里可以指定用户的密码。使用 GRANT 命令分配权限的时候,如果用户还不存在的话,就会去创建一个。这样,你可以加上 IDENTIFIED BY ,去为这个新的用户添加一个登录的时候使用的密码。

另外在分配权限的时候,我们可以加上一些资源限制的选项,可以用一个 WITH 连接,

MAX_QUERIES_PER_HOUR 0
MAX_CONNECTIONS_PER_HOUR 0
MAX_UPDATES_PER_HOUR 0
MAX_USER_CONNECTIONS 0

这些选项可以控制用户每小时允许查询,连接,更新的最大的数量,还有总体的能够连接的数量。如果都设置成 0 的话,表示不限制。

演示

下面,我们去给之前创建的 phoenix 这个用户分配一些权限。打开终端工具,先用 root 用户登录到 MySQL ...

然后输入:

CRANT ALL PRIVILEGES ON movietalk.* TO wanghao@localhost;

回车 ... 返回 Query OK ,表示已经成功执行了这行命令,这行命令的意思就是,去为 phoenix 这个用户分配所有的权限,这些权限只能应用在 movietalk 这个数据库上。下面,我们想要让修改的限制立即生效,要执行一条命令:

flush privileges;

下面我们再用 phoenix 这个用户登录一下 ... exit 退出 ...

然后再登录 ... 输入 show databases;

现在, 会显示 movietalk 这个数据库,说明 phoenix 这个用户可以操作这个数据库 .. 用一个简单的 SELECT 语句去试一下 ...

USE movietalk;
SELECT * FROM film;

会返回查找到的结果,说明 phoenix 这个用户有可以从 movietalk 这个数据库选择数据的权限。

分配权限 - GRANT《 MySQL 基础 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点