MySQL管理员起首 要懂得怎样 设置MySQL用户账号 ,以及MySQL数据库账户怎样 分配管理权限,如许 更方便管理而且不会导致不须要 的操纵 错误,下面就来谈谈MySQL数据库账户方面的题目 。
MySQL 3.22.11开始引入两条语句使得这项工作更轻易 做:GRANT语句创建MySQL用户并指定其权限 ,而REVOKE语句删除权限。两条语句扮演 了mysql数据库的前端脚色 ,并提供与直接操纵 这些表的内容差别 的另一种方法。CREATE和REVOKE语句影响4个表:授权表
内容
user 能毗连 服务器的用户以及他们拥有的任何全局权限
db 数据库级权限
tables_priv 表级权限
columns_priv 列级权限
尚有 第5个授权表(host),但它不受GRANT和REVOKE的影响 。
当你对一个用户发出一条GRANT语句时,在user表中为该用户创建一条记录 。假如 语句指定任何全局权限(管理权限或实用 于全部 数据库的权限) ,这些也记录 在user表中。假如 你指定命 据库 、表和列级权限,他们被分别记录 在db、tables_priv和columns_priv表中。
用GRANT和REVOKE比直接修改授权表更轻易 些,然而 ,发起 你阅读一下《MySQL安全性指南》 。这些表非常 紧张 ,而且作为一名管理员,你应该明白 它们怎样 逾越 GRANT和REVOKE语句的功能程度 。
在下面的章节中 ,我们将先容 怎样 设置MySQL用户账号并授权。我们也涉及怎样 撤权和从授权表中删除用户 。
你大概 也想思量 利用 mysqlAccess和mysql_setpermission脚本,它是MySQL分发的一部分 ,它们是Perl脚本 ,提供GRANT语句的另一种选择设置用户账号。mysql_setpermission必要 安装DBI支持。
1、创建用户并授权
GRANT语句的语法看上去像如许 :
GRANT privileges (columns) ON what TO user IDENTIFIED BY "password" WITH GRANT OPTION
要利用 该语句,你必要 填写下列部分 :
privileges
授予用户的权限,下表列出可用于GRANT语句的权限指定符:
权限指定符
权限答应 的操纵
ALTER 修改表和索引
CREATE 创建数据库和表
DELETE 删除表中已有的记录
DROP 扬弃 (删除)数据库和表
INDEX 创建或扬弃 索引
INSERT 向表中插入新行
REFERENCE 未用
SELECT 检索表中的记录
UPDATE 修改现存表记录
FILE 读或写服务器上的文件
PROCESS 查察 服务器中实行 的线程信息或杀死线程
RELOAD 重载授权表或清空日记 、主机缓存或表缓存 。
SHUTDOWN 关闭服务器
ALL 全部 ;ALL PRIVILEGES同义词
USAGE 特别 的“无权限 ”权限
上表表现 在第一组的权限指定符实用 于数据库、表和列 ,第二组数管理权限。一样平常 ,这些被相对严格 地授权,由于 它们答应 用户影响服务器的操纵 。第三组权限特别 ,ALL意味着“全部 权限” ,UASGE意味着无权限,即创建用户,但不授予权限 。
columns
权限运用的列 ,它是可选的,而且 你只能设置列特定的权限。假如 下令 有多于一个列,应该用逗号分开它们。
what
权限运用的级别 。权限可以是全局的(实用 于全部 数据库和全部 表)、特定命 据库(实用 于一个数据库中的全部 表)或特定表的。可以通过指定一个columns字句是权限是列特定的。
user
权限授予的用户 ,它由一个用户名和主机名构成 。在MySQL中,你不但 指定谁能毗连 ,尚有 从那边 毗连 。这答应 你让两个同名用户从差别 地方毗连 。MySQL让你区分他们 ,并相互 独立地赋予权限。
MySQL中的一个用户名就是你毗连 服务器时指定的用户名,该名字不必与你的Unix登录名或Windows名接洽 起来 。缺省地,假如 你不明白 指定一个名字 ,客户程序将利用 你的登录名作为MySQL用户名。这只是一个约定。你可以在授权表中将该名字改为nobody,然后以nobody毗连 实行 必要 超等 用户权限的操纵 。
password
赋予用户的口令,它是可选的。假如 你对新用户没有指定IDENTIFIED BY子句,该用户不赋给口令(不安全)。对现有效 户 ,任何你指定的口令将代替 老口令 。假如 你不指定口令,老口令保持稳固 ,当你用IDENTIFIED BY时 ,口令字符串用改用口令的字面寄义 ,GRANT将为你编码口令,不要象你用SET PASSWORD 那样利用 password()函数。
WITH GRANT OPTION子句是可选的。假如 你包罗 它 ,用户可以授予权限通过GRANT语句授权给别的 用户 。你可以用该子句给与别的 用户授权的本领 。
用户名、口令 、数据库和表名在授权表记录 中是巨细 写敏感的,主机名和列名不是。
一样平常 地,你可以通过扣问 几个简单 的题目 来辨认 GRANT语句的种类:
谁能毗连 ,从那儿毗连 ?
用户应该有什么级别的权限,他们实用 于什么?
用户应该答应 管理权限吗?
下面就讨论一些例子。
1.1 谁能毗连 ,从那儿毗连 ?
你可以答应 一个用户从特定的或一系列主机毗连 。有一个极度 ,假如 你知道降职从一个主机毗连 ,你可以将权限范围 于单个主机:
GRANT ALL ON samp_db.* TO boris@localhost IDENTIFIED BY "ruby"GRANT ALL ON samp_db.* TO fred@res.mars.com IDENTIFIED BY "quartz"
(samp_db.*意思是“samp_db数据库的全部 表)另一个极度 是,你大概 有一个常常 观光 并必要 能从天下 各地的主机毗连 的用户max。在这种环境 下,你可以答应 他无论从那边 毗连 :
GRANT ALL ON samp_db.* TO max@% IDENTIFIED BY "diamond"
“%”字符起通配符作用 ,与LIKE模式匹配的寄义 雷同 。在上述语句中,它意味着“任何主机 ” 。以是 max和max@%等价。这是创建 用户最简单 的方法,但也是最不安全的。
取此中 ,你可以答应 一个用户从一个受限的主机聚集 访问 。比方 ,要答应 mary从snake.net域的任何主机毗连 ,用一个%.snake.net主机指定符:
GRANT ALL ON samp_db.* TO mary@.snake.net IDENTIFIED BY "quartz";
假如 你喜好 ,用户标识符的主机部分 可以用IP地点 而不是一个主机名来给定。你可以指定一个IP地点 或一个包罗 模式字符的地点 ,而且,从MySQL 3.23 ,你还可以指定具有指出用于网络号的位数的网络掩码的IP号:
GRANT ALL ON samp_db.* TO boris@192.168.128.3 IDENTIFIED BY "ruby" GRANT ALL ON samp_db.* TO fred@192.168.128.% IDENTIFIED BY "quartz" GRANT ALL ON samp_db.* TO rex@192.168.128.0/17 IDENTIFIED BY "ruby"
第一个例子指出用户能从其毗连 的特定主机,第二个指定对于C类子网192.168.128的IP模式,而第三条语句中 ,192.168.128.0/17指定一个17位网络号并匹配具有192.168.128头17位的IP地点 。
假如 MySQL抱怨 你指定的用户值,你大概 必要 利用 引号(只将用户名和主机名部分 分开加引号) 。
GRANT ALL ON samp_db.president TO "my friend"@"boa.snake.net"
1.2 用户应该有什么级别的权限和它们应该实用 于什么?
你可以授权差别 级别的权限,全局权限是最强大 的,由于 它们实用 于任何数据库。要使ethel成为可做任何事变 的超等 用户 ,包罗 能授权给别的 用户,发出下列语句:
GRANT ALL ON *.* TO ethel@localhost IDENTIFIED BY "coffee" WITH GRANT OPTION
ON子句中的*.*意味着“全部 数据库、全部 表”。从安全思量 ,我们指定ethel只能从本地 毗连 。限定 一个超等 用户可以毗连 的主机通常是明智的 ,由于 它限定 了试图破解口令的主机。
有些权限(FILE、PROCESS 、RELOAD和SHUTDOWN)是管理权限而且 只能用"ON *.*"全局权限指定符授权。假如 你乐意 ,你可以授权这些权限,而不授权数据库权限。比方 ,下列语句设置一个flush用户,他只能发出flush语句 。这大概 在你必要 实行 诸如清空日记 等的管理脚本中会有效 :
GRANT RELOAD ON *.* TO flushl@localhost IDENTIFIED BY "flushpass"
一样平常 地,你想授权管理权限 ,吝啬点,由于 拥有它们的用户可以影响你的服务器的操纵 。
数据库级权限实用 于一个特定命 据库中的全部 表,它们可通过利用 ON db_name.*子句授予:
GRANT ALL ON samp_db TO bill@racer.snake.net INDETIFIED BY "rock" GRANT SELECT ON samp_db TO ro_user@% INDETIFIED BY "rock"
第一条语句向bill授权samp_db数据库中全部 表的权限 ,第二条创建一个严格 限定 访问的用户ro_user(只读用户),只能访问samp_db数据库中的全部 表,但只有读取,即用户只能发出SELECT语句。
你可以列出一系列同时授予的各个权限 。比方 ,假如 你想让用户能读取并能修改现有数据库的内容,但不能创建新表或删除表,如下授予这些权限:
GRANT SELECT,INSERT,DELETE,UPDATE ON samp_db TO
bill@snake.net INDETIFIED BY "rock"
对于更风雅 的访问控制 ,你可以在各个表上授权,或乃至 在表的每个列上。当你想向用户隐蔽 一个表的部分 时,或你想让一个用户只能修改特定的列时 ,列特定权限非常有效 。如:
GRANT SELECT ON samp_db.member TO bill@localhost INDETIFIED BY "rock"GRANT UPDATE (expiration) ON samp_db. member TO bill@localhost
第一条语句授予对整个member表的读权限并设置了一个口令,第二条语句增长 了UPDATE权限,当只对expiration列 。没须要 再指定口令 ,由于 第一条语句已经指定了。
假如 你想对多个列授予权限,指定一个用逗号分开的列表。比方 ,对assistant用户增长 member表的地点 字段的UPDATE权限 ,利用 如下语句,新权限将加到用户已有的权限中:
GRANT UPDATE (street,city,state,zip) ON samp_db TO assistant@localhost
通常,你不想授予任何比用户确实必要 的权限宽的权限 。然而,当你想让用户能创建一个临时 表以生存 中心 结果 ,但你又不想让他们在一个包罗 他们不应修改内容的数据库中如许 做时,发生了要授予在一个数据库上的相对宽松的权限。你可以通过创建 一个分开的数据库(如tmp)并授予开数据库上的全部 权限来举行 。比方 ,假如 你想让来自mars.net域中主机的任何用户利用 tmp数据库 ,你可以发出如许 的GRANT语句:
GRANT ALL ON tmp.* TO ""@mars.net
在你做完之后,用户可以创建并用tmp.tbl_name情势 引用tmp中的表(在用户指定符中的""创建一个匿名用户,任何用户均匹配空缺 用户名) 。
1.3 用户应该被答应 管理权限吗?
你可以答应 一个数据库的拥有者通过授予数据库上的全部 拥有者权限来控制数据库的访问 ,在授权时,指定WITH GRANT OPTION。比方 :假如 你想让alicia能从big.corp.com域的任何主机毗连 并具有sales数据库中全部 表的管理员权限,你可以用如下GRANT语句:
GRANT ALL ON sales.* TO alicia@%.big.corp.com INDETIFIED BY "applejuice" WITH GRANT OPTION
在结果 上WITH GRANT OPTION子句答应 你把访问授权的权利授予另一个用户。要留意 ,拥有GRANT权限的两个用户可以相互 授权。假如 你只给予了第一个用户SELECT权限,而另一个用户有GRANT加上SELECT权限,那么第二个用户可以是第一个用户更“强大 ” 。
2、撤权并删除用户
要取消一个用户的权限 ,利用 REVOKE语句。REVOKE的语法非常雷同 于GRANT语句,除了TO用FROM代替 而且 没有INDETIFED BY和WITH GRANT OPTION子句:
REVOKE privileges (columns) ON what FROM user
user部分 必须匹配原来GRANT语句的你想撤权的用户的user部分 。privileges部分 不需匹配,你可以用GRANT语句授权,然后用REVOKE语句只取消 部分 权限 。
REVOKE语句只删除权限 ,而不删除用户。纵然 你取消 了全部 权限,在user表中的用户记录 依然保存 ,这意味着用户仍旧 可以毗连 服务器。要完全删除一个用户 ,你必须用一条DELETE语句明白 从user表中删除用户记录 :
%mysql -u root mysqlmysqlDELETE FROM user -WHERE User="user_name" and Host="host_name";mysqlFLUSH PRIVILEGES;
DELETE语句删除用户记录 ,而FLUSH语句告诉服务器重载授权表 。(当你利用 GRANT和REVOKE语句时,表主动 重载 ,而你直接修改授权表时不是。
MySQL数据库账户怎样 分配管理权限就叙述到这里了,更多有关MySQL数据库账户方面的题目 ,请继承 关注拓胜科技数据库技能 频道。
内容泉源 :https://www.toceansoft.com/database/20161027/6442.html