管理MySQL用户方法,第1张

管理MySQL用户方法,第2张

MySQL管理员要知道如何设置MySQL用户账号,并注明哪个用户可以连接服务器,连接到哪里,连接后做什么。MySQL 3.22.11开始引入两条语句让这项工作变得更简单:GRANT语句创建MySQL用户并指定其权限,REVOKE语句删除权限。两条语句扮演了mysql数据库的前端角色,并提供了不同于直接操作这些表的内容的另一种方法。和CREATE REVOKE语句影响四个表:授权表。

内容

用户可以连接到服务器的用户以及他们拥有的任何全局权限。

Db级权限
tables_priv表级权限
columns_priv列级权限

还有第五个授权表(主机),但它不受授权和撤销的影响。
向用户发出GRANT语句时,在用户表中为该用户创建一条记录。如果语句指定了任何全局权限(管理权限或适用于所有数据库的权限),这些权限也会记录在用户表中。如果指定数据库级、表级和列级权限,它们将分别记录在db、tables_priv和columns_priv表中。
使用授权和撤销比直接修改授权表更容易。但是,我建议您阅读MySQL安全指南。这些表非常重要,作为管理员,您应该了解它们是如何超越GRANT和REVOKE语句的功能级别的。
在接下来的章节中,我们将介绍如何设置MySQL用户帐号并对其进行授权。我们还将讨论如何从授权表中撤销权限和删除用户。
您可能还想考虑使用mysqlaccess和mysql_setpermission脚本,它们是MySQL发行版的一部分。它们是Perl脚本,提供了GRANT语句的另一个选项来设置用户帐户。Mysql_setpermission需要DBI支持。

1创建用户并授权
grant语句的语法看起来是这样的:用grant option将关于什么的特权(列)授予由“password”标识的用户
要使用该语句,需要填写以下部分:
privileges
授予用户的权限。下表列出了可在grant语句中使用的权限指示:
权限指示权限允许操作:

更改表和索引
创建创建数据库和表
删除表中的现有记录
删除丢弃数据库和表
索引创建或丢弃索引
插入向表中插入新行
引用未使用的
检索选择表中的记录
更新修改现有表记录
文件读取或写入服务器上的文件
进程查看服务器中执行的线程信息或终止线程
重新加载授权表或
SHUTDOWN关闭所有拥有的服务器
;所有权限的同义词
用法特殊“无权限”权限

表中第一组显示的权限指示符适用于数据库、表和列,第二组管理权限。一般来说,这些授权相对严格,因为它们允许用户影响服务器的操作。第三组权限比较特殊,ALL表示“所有权限”,UASGE表示没有权限,即创建了用户,但是没有授予任何权限。

Columns
是可选的,您只能设置特定于列的权限。如果命令有多列,应该用逗号分隔。

什么
权限申请级别。权限可以是全局的(适用于所有数据库和所有表)、特定于数据库的(适用于数据库中的所有表)或特定于表的。通过指定columns语句,权限是特定于列的。

User
权限授予用户,由用户名和主机名组成。在MySQL中,您不仅要指定谁可以连接,还要指定连接到哪里。这允许您从不同的地方连接两个同名的用户。MySQL让您可以区分它们,并相互独立地授予权限。MySQL中的用户名是您连接到服务器时指定的用户名,它不必与您的Unix登录名或Windows名称相关联。默认情况下,如果您没有明确指定名称,客户端将使用您的登录名作为MySQL用户名。这只是一个协议。您可以在授权表中将名称更改为nobody,然后连接到nobody来执行需要超级用户权限的操作。

密码

给用户的密码,这是可选的。如果没有为新用户指定IDENTIFIED BY子句,则不会向用户提供密码(不安全)。对于现有用户,您指定的任何密码都将替换旧密码。如果不指定密码,旧密码将保持不变。当您使用IDENTIFIED BY时,密码字符串将使用密码的字面含义。格兰特会给你加密密码。不要像使用SET password那样使用PASSWORD()函数。
with grant option子句是可选的。如果包含它,用户可以通过GRANT语句向其他用户授予权限。您可以使用此子句向其他用户授予授权。
在授权表记录中,用户名、密码、数据库和表名区分大小写,但主机名和列名不区分大小写。
通常,您可以通过问几个简单的问题来确定授权陈述的类型:

谁能从那里连接和?
用户应该拥有什么级别的权限,适用于什么?
用户是否应该允许管理权限?
这里有一些例子。
1.1谁可以从那里进行连接?

您可以允许用户从特定主机或一系列主机进行连接。在一个极端情况下,如果您知道从主机连接降级,您可以将权限限制到单个主机
: grant all on samp _ db。* toboris @ localhost由samp _ db上的“ruby”grant all标识。*至fred@res.mars.com,标识为“石英”[br/](samp _ db。*表示“samp _ db数据库的所有表”]
在另一个极端,您可能有一个经常出差的用户max,需要能够从世界各地的主机连接。在这种情况下,您可以允许他从任何地方连接:
grant all on samp _ db。*对于由“diamond”
“%”标识的max @%,字符充当通配符,其含义与LIKE模式匹配相同。在上面的语句中,它表示“任何主机”。所以max和max@%是等价的。这是最容易建立用户的方法,但也是最不安全的。
您可以允许用户从受限主机集进行访问。例如,要允许mary从snake.net域中的任何主机进行连接,请使用%.snake.net主机说明符:
grant all on samp _ db。* tomary @。snake.net以“石英”鉴定;
如果您愿意,用户标识符的主机部分可以由IP地址而不是主机名给出。您可以指定一个IP地址或包含模式字符的地址,并且,从MySQL 3.23开始,您还可以指定带有网络掩码的IP号码,该网络掩码指示用于网络号码的位数:
grant all on samp _ db。* toboris @ 192.168.128.3由samp _ db上的“ruby”grant all标识。*致弗雷德@ 192.168.128。%由samp _ db上的“quartz”grant all标识。* to rex @ 192.168.128.0/17标识为“ruby”
第一个示例指示用户可以连接的特定主机,第二个示例指定C类子网192.168.128的IP模式,而在第三个语句中,192.168.128.0/17指定一个17位数字的网络号,并将IP地址与192.168.128的前17位数字匹配。
如果MySQL抱怨您指定的用户值,您可能需要使用引号(仅单独引用用户名和主机名)。将samp_db.president上的所有内容授予“我的朋友”@“boa . snake . net”

1.2用户应该拥有什么级别的权限,应该适用于什么?

您可以授权不同级别的权限。全局权限很重要,因为它们适用于任何数据库。要使ethel成为可以做任何事情(包括授权其他用户)的超级用户,请发出以下语句:
grant all on *。*致Ethel @ localhost,标识为“coffee ”,授予条款*中的期权
。*表示“所有数据库、所有表”。出于安全原因,我们指定ethel只能本地连接。限制超级用户可以连接的主机通常是明智的,因为这限制了试图破解密码的主机。
某些权限(文件、进程、重新加载和关闭)是管理权限,只能由“ON *”授权。* "全局权限指示符。如果愿意,可以授权这些权限,而不是数据库权限。例如,以下语句设置了一个flush用户,该用户只能发出flush语句。当您需要执行管理脚本(如清除空日志)时,这可能很有用:
grant reload on *。* toflush @ localhost由“flush pass”标识[br/]一般情况下,您希望授予管理权限。要小气,因为拥有它们的用户可以影响你服务器的运行。
数据库级权限适用于特定数据库中的所有表,可以使用db_name上的授予这些权限。*子句:
将samp_db上的ALL授权给由" rock "标识的bill@racer.snake.net,将samp_db上的SELECT授权给由" rock "标识的ro_user @ %[ br/]第一条语句授权bill对samp_db数据库中所有表的权限,第二条语句创建一个具有严格访问限制的用户ro _ user(只读用户),该用户只能访问samp_db数据库中的所有表,但只能是read,即用户只能发出SELECT语句。
您可以列出同时授予的一系列权限。例如,如果您希望用户能够读取和修改现有数据库的内容,但不能创建新表或删除表,请按如下方式授予这些权限:
将对samp _ db的Select、Insert、delete和Update权限授予由“rock”指定的bill@snake.net[br/]。要获得更精确的访问控制,您可以对每个表甚至表的每列进行授权。当您希望对用户隐藏表的某些部分,或者希望用户只修改特定的列时,特定于列的权限非常有用。例如
grant select on samp _ db . member to bill @ localhost indexed by " rock " grant UPDATE(expiration)on samp _ db . member to bill @ localhost
第一条语句授予对整个成员表的读取权限并设置密码,第二条语句在仅使用expiration列时增加更新权限。不需要指定密码,因为已经指定了第一条语句。
如果要向多列授予权限,请指定逗号分隔的列表。例如,要向assistant用户添加成员表的address字段的UPDATE权限,请使用以下语句:
将samp _ db上的update (street,city,state,zip)授予assistant @ localhost
通常,您不希望授予任何超出用户实际需要的权限。但是,当您希望用户创建一个临时表来存储中间结果,但又不希望他们在包含不应该修改的内容的数据库中这样做时,就会出现一个相对宽松的授予数据库的权限。您可以通过建立一个单独的数据库(如tmp)并授予该数据库上的所有权限来实现这一点。例如,如果希望来自mars.net域中主机的任何用户使用tmp数据库,可以发出GRANT语句:grant all on tmp。*到""@mars.net
完成后,用户可以在TMP中以tmp.tbl_name的形式创建和引用表(用户说明符中的“”创建匿名用户,任何用户匹配空白色用户名)。

1.3是否应该允许用户管理权限?

通过向数据库的所有所有者授予权限,可以允许数据库的所有者控制对数据库的访问。授予权限时,请指定WITH GRANT OPTION。例如,如果希望alicia能够从big.corp.com域中的任何主机进行连接,并对sales数据库中的所有表拥有管理员权限,可以使用下面的GRANT语句:
Grant all on sales。* ToAlicia @% .big.corp.com由“apple juice”标识,WITH GRANT OPTION
有效时,WITH GRANT OPTION子句允许您向另一个用户授予访问授权。请注意,具有GRANT权限的两个用户可以相互授权。如果您只给第一个用户SELECT权限,而另一个用户有GRANT plus SELECT权限,那么第二个用户可能比第一个用户更“强大”。
2撤销权限并删除用户
若要撤销用户的权限,请使用REVOKE语句。REVOKE的语法与GRANT语句非常相似,只是TO被FROM替换,并且没有INDETIFED BY和WITH GRANT OPTION子句:
REVOKE privileges(columns on what FROM user
用户部分必须与要撤销原始GRANT语句权限的用户的用户部分相匹配。权限不需要匹配,可以用GRANT语句授权,然后用REVOKE语句只撤销部分权限。
REVOKE语句只删除权限,不删除用户。即使撤销所有权限,用户表中的用户记录仍会保留,这意味着用户仍然可以连接到服务器。要完全删除一个用户,必须使用DELETE语句从用户表中显式删除该用户记录:
% MySQL-u root MySQL > DELETE from user-> where user = " user _ name " and host = " host _ name ";mysql >刷新权限;
delete语句删除用户记录,而FLUSH语句告诉服务器重新加载授权表。(当使用GRANT和REVOKE语句时,该表会自动重载,但在直接修改授权表时不会。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 管理MySQL用户方法

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情