MySQL管理员应该知道怎样通过指定哪些用户可连接到服务器、从哪里进行连接,以及在连接 时做什么,来设置MySQL用户账号。MySQL3.22.11引入了两个更容易进行这项工作的语句:GRANT 语句创建MySQL用户并指定其权限,REVOKE 语句删除权限。这两个语句充当mysql数据库中的授权表的前端,并提供直接操纵这些表内容的可选择的方法。GRANT 和REVOKE 语句影响以下四个表:

授权表 内容

user 可连接到服务器的用户和他们拥有的任何全局特权

db 数据库级的特权

tables_priv 表级特权

columns_priv 列级特权

还有第五个授权表( host),但它不受GRANT 或REVOKE的影响。

当您为某个用户发布GRANT 语句时,应在user表中为该用户创建一个项。如果该语句指定了所有全局特权(管理权限或用于所有数据库的权限),则这些指定也被记录在user表中。如 果指定了数据库、表或列的权限,它们将记录在db、tables_priv 和columns_priv表中。

使用GRANT 和REVOKE语句比直接修改授权表更容易。但是,建议您最好通过阅读第12章来补充本章的内容,第12章中详细讨论了授权表。这些表非常重要,作为一位管理员应该了解这些表是怎样在GRANT 和REVOKE 语句级上工作的。

本节下面的部分将讨论如何设置MySQL用户的账号和授权,还将介绍如何取消权限以及从授权表中删除全部用户,并且将考虑一个困扰许多新的MySQL管理员的难题。

您还要考虑使用mysqlaccess 和mysql_setpermission 脚本,它们是MySQL分发包的组成部分。这些是Perl 的脚本,它们提供了设置用户账号的GRANT 语句的代用品。mysql_setpermission 需要具有DBI 的支持环境。

创建新用户和授权

GRANT 语句的语法如下:

GRANT privileges (columns)

ON what

TO user IDENTIFIEDBY "password"

WITH GRANT OPTION

要使用该语句,需要填写以下部分:

privileges 分配给用户的权限。下表列出了可在GRANT 语句中使用的权限说明符:

权限说明符权限允许的操作

上表显示的第一组权限说明符适用于数据库、表和列。第二组说明符是管理特权。通常, 这些权限的授予相当保守,因为它们会影响服务器的操作(例如, SHUTDOWN 特权不是按每天来分发的权限)。第三组说明符是特殊的。ALL的意思是“所有的权限”,而USAGE 的意思是“无权限”─即创建用户,但不授予任何的权限。

columns 权限适用的列。这是可选的,只来设置列专有的权限。如果命名多于一个列,则用逗号分开。

what 权限应用的级别。权限可以是全局的(适用于所有数据库和所有的表)、数据库专有的(适用于某个数据库中的所有表),或表专有的。可以通过指定一个C O L U M N S子句将权限授予特定的列。

user 使用权限的用户。它由用户名和主机名组成。在MySQL中,不仅指定谁进行连接,还要指定从哪里连接。它允许您拥有两个带有相同名字的、从不同位置连接的用户。MySQL允许在它们之间进行区别并相互独立地分配权限。

MySQL的用户名就是您在连接到服务器时指定的名字。该名字与您的UNIX 注册名或Windows 名的没有必然连系。缺省设置时,客户机程序将使用您注册的名字作为MySQL的用户名(如果您不明确指定一个名字的话),但这只是一个约定。有关将 root作为可以操作一切MySQL的超级用户名也是这样,就是一种约定。您也可以在授权表中将此名修改成nobody,然后作为nobody 用户进行连接,以执行需要超级用户特权的操作。

password 分配给该用户的口令。这是可选的。如果您不给新用户指定IDENTIFIEDBY子句,该用户不分配口令(是非安全的)。对于已有的用户,任何指定的口令 将替代旧口令。如果不指定新口令,用户的旧口令仍然保持不变。当您确实要使用IDENTIFIEDBY 时,该口令串应该是直接量,GRANT 将对口令进行编码。当用SET PASSWORD语句时,不要使用PASSWORD() 函数。

WITH GRANT OPTION 子句是可选的。如果包含该子句,该用户可以将GRANT 语句授予的任何权限授予其他的用户。可以使用该子句将授权的能力授予其他的用户。

用户名、口令以及数据库和表的名称在授权表项中是区分大小写的,而主机名和列名则不是。

通过查询某些问题,通常可以推断出所需的GRANT 语句的类型:

谁可以进行连接,从哪里连接?

用户应具有什么级别的权限,这些权限适用于什么?

允许用户管理权限吗?

让我们来提问这些问题,同时看一些利用GRANT 语句设置MySQL用户账号的例子。

1. 谁可以进行连接,从哪里连接。

您可以允许用户在特定的主机或涉及范围很宽的一组主机中进行连接。在一个极端,如果知道用户将仅从那个主机中进行连接,则可限定对单个主机的访问:

GRANT ALL ON samp_db.* TO boris@localhost IDENTFIEDBY "ruby"

GRANT ALL ON samp_db.* TO fred@ares.mars.net IDENTFIEDBY "quartz"

(符号samp_db.* 含义是“在samp_db 数据库中的所有表”)在另一个极端,您可能会有一个用户max,他周游世界并需要能够从世界各地的主机中进行连接。在这种情况下,无论他从哪里连接您都将允许:

GRANT ALL ON samp_db.* TO max@% IDENTFIEDBY "diamond"

‘%’字符起通配符的作用,与LIKE模式匹配的含义相同,在上个语句中,它的意思是“任何主机”。如果您根本不给出主机名部分,则它与指定“ %”的含义相同。因此,max和max@%是等价的。这是设置一个用户最容易的方法,但安全性最小。

要想采取妥协的办法,可允许用户在一组有限的主机中进行连接。例如,要使mary 从snake.net 域的任何主机中进行连接,可使用%.snake.net 主机说明符:

GRANT ALL ON samp_db.* TO mary@%.snake.net IDENTFIEDBY "topaz"

该用户标识符的主机部分可用IP 地址而不是主机名给出(如果愿意的话)。可以指定一个直接的IP 地址或包含模式字符的地址。同样,自MySQL3.23 起,可以用一个网络掩码来指定IP 号,网络掩码表明了用于该网络号的二进制位数:

GRANT ALL ON samp_db.* TO joe@192.168.0.3 IDENTIFIEDBY "water"

GRANT ALL ON samp_db.* TO ardis@192.168.128.% IDENTIFIEDBY "snow"

GRANT ALL ON samp_db.* TO rex@192.168.128.0/17 IDENTIFIEDBY "ice"

第一条语句指明用户可进行连接的特定的主机。第二条语句指定129.168.128 Class C 子网的IP 模式。在第三条语句中, 192.168.128.0/17 指定一个17 位二进制的网络号,并将任何主机与其IP 地址的前17 个二进制位中的192.168.128.0/17 进行匹配。

如果MySQL抱怨您指定的用户值,则可能需要使用引号(但对用户名和主机名分别加引号):

GRANT ALL ON samp_db.president TO "my friend"@"boa.snake.net"

2. 用户应具有什么级别的权限,这些权限适用于什么。

您可授予不同级别的权限。全局权限的功能最强,因为它们适用于任何数据库。为了使ethel 成为可以进行一切操作的超级用户(其中包括可以对其他用户授权),发布下列语句:

GRANT ALL ON *.* TO ethel@localhost IDENTIFIEDBY "coffee"

WITH GRANT OPTION

ON 子句中*.* 说明符的意思是“所有数据库,所有的表”,为保险起见,我们已经指定ethel 只能从本地主机中连接。限制超级用户从哪些主机上进行连接通常是明智的做法,因为它限制住了其他用户对口令进行试探。

有些权限(FILE、PROCESS、RELOAD 和SHUTDOWN)是管理权限,只能用NO *.* 全局权限说明符来授予。如果希望的话,也可以不用授予数据库级的权限来授予这些权限。例如,下列语句建立了一个flush 用户,它除了发布FLUSH语句外不做其他任何事情。在管理脚本中这可能是有用的,因为需要在这些脚本中执行诸如在日志文件循环期间刷新日志的操作:

GRANT RELOAD ON *.* TO flush@localhost IDENTIFIEDBY "flushpass"

通常授予管理权限应该是保守的,因为具有这些权限的用户可能影响服务器的操作。

mysql数据库帐户_MySQL数据库用户帐号管理基础知识详解相关推荐

  1. 有关linux用户和用户组管理的知识详解

    Linux作为多用户多任务的分时操作系统,所有要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 用户的账号一方面能帮助系统管理员对使用系统的用户进行跟踪,并控制他们 ...

  2. mysql通过集合查询_MySQL使用集合函数进行查询操作实例详解

    本文实例讲述了MySQL使用集合函数进行查询操作.分享给大家供大家参考,具体如下: COUNT函数 SELECT COUNT(*) AS cust_num from customers; SELECT ...

  3. SQL与NoSQL数据库入门基础知识详解

    这几年的大数据热潮带动了一激活了一大批hadoop学习爱好者.有自学hadoop的,有报名培训班学习的.所有接触过hadoop的人都知道,单独搭建hadoop里每个组建都需要运行环境.修改配置文件测试 ...

  4. 【MySQL】MySQL基础知识详解

    文章目录 1. MySQL概述 1.1 数据库相关概念 1.1.1 数据库.数据库管理系统与SQL 1.1.2 关系型数据库与数据模型 1.2 MySQL数据库 1.2.1 MySQL的安装与配置 1 ...

  5. mysql数据库服务器的超级用户名是,MYSQL数据库的用户帐号管理基础知识 (2)

    用户名.口令以及数据库和表的名称在授权表项中是区分大小写的,而主机名和列名则不是. 通过查询某些问题,通常可以推断出所需的GRANT 语句的类型: 谁可以进行连接,从哪里连接? 用户应具有什么级别的权 ...

  6. MYSQL (关系型数据库管理系统)的基础知识详解

    一.什么是数据库? 数据库,简而言之可视为电子化的文件柜--存储电子文件的处所,用户可以对文件中的数据进行新增.查询.更新.删除等操作 所谓"数据库"是以一定方式储存在一起.能与多 ...

  7. mysql 优化300例_MySQL配置文件my.cnf参数优化和中文详解

    Mysql参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一次性完成,需要不断的 ...

  8. mysql sql执行过程_MySQL探秘(二):SQL语句执行过程详解

    昔日庖丁解牛,未见全牛,所赖者是其对牛内部骨架结构的了解,对于MySQL亦是如此,只有更加全面地了解SQL语句执行的每个过程,才能更好的进行SQL的设计和优化. 当希望MySQL能够以更高的性能运行查 ...

  9. mysql myisam 行锁_MySQL MYISAM引擎表锁和行锁详解

    MySQL有三种锁:表级锁.行级锁和页面锁.BDB支持页面锁,MyISAM支持表级锁,而innoDB则支持表锁和行级锁.这篇文章主要介绍MYISAM引擎的表锁. 表锁分为读锁(read lock)和写 ...

最新文章

  1. 微信内置浏览器的JsAPI(WeixinJSBridge续)[转载]
  2. python处理表格数据-python读取word 中指定位置的表格及表格数据
  3. linux/centos/集群安装ntp时间同步,自身实验成功
  4. window.event.srcElement (转)
  5. CodeForces - 1354E Graph Coloring(dfs判断二分图+dp)
  6. 两个字符串的删除操作Python解法
  7. Python3 matplotlib的绘图函数subplot()简介
  8. Unable to instantiate default tuplizer
  9. codeblocks和vscode编译时弹出不支持的16位程序解决方案
  10. 矩阵(二维数组)的性质在算法求解中的应用
  11. 读《操作系统之哲学原理》的一点感想
  12. CoreData学习-最好的一片文章
  13. 《动手学深度学习》全系列目录
  14. Flash:形变动画的制作
  15. pyppeteer如何更改默认chrome路径
  16. Linux ● 文件操作指令
  17. 服务器宕机 自动重启,服务器宕机重启利弊
  18. 【大数据架构】基于大数据的消费信贷平台
  19. C语言 PTA-6-8 简单的阶乘计算
  20. 企业数据分析工作的任务、工具及挑战

热门文章

  1. 第八次课作业(采购管理、信息与配置管理)
  2. 【Spring实战】注入非Spring Bean对象
  3. FreeBSD配置防火墙开启SSH服务
  4. 设置程序无label
  5. 面向方面编程(Spring AOP)
  6. 从贫民到百万富翁转变的心理学基础
  7. swoole 异步系统文件IO
  8. Navicat使用教程:在Navicat Monitor for MySQL/MariaDB中配置实例
  9. flutter apk 打包
  10. 记一次discuz修改首页图片路径问题