ImageVerifierCode 换一换
格式:DOCX , 页数:42 ,大小:100.33KB ,
资源ID:24155977      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24155977.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MYSQL培训经典教程第七章.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MYSQL培训经典教程第七章.docx

1、MYSQL培训经典教程第七章本章要点:v MySQL权限系统原理v 如何授予撤销用户和授权v 如何直接修改授权表v 授予用户权限的规范和注意事项作为一个MySQL的系统管理员,你有责任维护你的MySQL数据库系统的数据安全性和完整性。本文主要主要介绍如何建立一个安全的MySQL系统,从系统内部和外部网络两个角度,为你提供一个指南。本章主要考虑下列安全性有关的问题: 为什么安全性很重要,你应该防范那些攻击? 服务器面临的风险(内部安全性),如何处理? 连接服务器的客户端风险(外部安全性),如何处理? MySQL管理员有责任保证数据库内容的安全性,使得这些数据记录只能被那些正确授权的用户访问,这涉

2、及到数据库系统的内部安全性和外部安全性。内部安全性关心的是文件系统级的问题,即,防止MySQL数据目录(DATADIR)被在服务器主机有账号的人(合法或窃取的)进行攻击。如果数据目录内 容的权限过分授予,使得每个人均能简单地替代对应于那些数据库表的文件,那么确保控 制客户通过网络访问的授权表设置正确,对此毫无意义。外部安全性关心的是从外部通过网络连接服务器的客户的问题,即,保护MySQL服务器免受来自通过网络对服务器的连接的攻击。你必须设置MySQL授权表(grant table),使得他们不允许访问服务器管理的数据库内容,除非提供有效的用户名和口令。下面就详细介绍如何设置文件系统和授权表my

3、sql,实现MySQL的两级安全性。7.1 MySQL的权限系统MySQL有一套先进的但非标准的安全/授权系统,掌握其授权机制是开始操作MySQL数据库必须要走的第一步,对于一个熟悉SQL基本操作的人来说,也是MySQL所有的知识中比较难以理解的一个部分。本节通过揭开其授权系统的运作机制,希望大家能够可以更好地操作和使用这个优秀的数据库系统。 MySQL的安全系统是很灵活的,它允许你以多种不同方式设置用户权限。一般地,你可使用标准的SQL语句GRANT和REVOKE语句做,他们为你修改控制客户访问的授权表,然而,你可能由一个不支持这些语句的老版本的MySQL(在3.22.11之前这些语句不起作

4、用),或者你发觉用户权限看起来不是以你想要的方式工作。对于这种情况,了解MySQL授权表的结构和服务器如何利用它们决定访问权限是有帮助的,这样的了解允许你通过直接修改授权表增加、删除或修改用户权限,它也允许你在检查这些表时诊断权限问题。7.1.1授权表的结构通过网络连接服务器的客户对MySQL数据库的访问由授权表内容来控制。这些表位于mysql数据库中,并在第一次安装MySQL的过程中初始化(运行mysql_install_db脚本)。授权表共有5个表:user、db、host、tables_priv和columns_priv。7.1.1.1授权表user、db和host的结构和作用表7-1

5、授权表user、db和host的结构User表Db表Host表作用域列HostHostHostDbDbUserUserPassword数据库/表的权限列Alter_privAlter_privAlter_privCreate_privCreate_privDelete_privDelete_privDrop_privDrop_privIndex_privIndex_privIndex_privInsert_privInsert_privReferences_privReferences_privSelect_privSelect_privUpdate_privUpdate_privUpdate

6、_privAlter_privAlter_privAlter_privFile_privGrant_privGrant_privGrant_privProcess_privReload_privShutdown_priv授权表的内容有如下用途: user表user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。 db表db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。

7、 host表host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响,所以,你可能发觉你根本不是用它。7.1.1.2授权表tables_priv和columns_priv的结构和作用表7-2 授权表tables_priv和columns_priv的结构授权表tables_priv授权表columns_priv作用域列HostHostDbDbUserUserTable_nameTable_nameColumn_name权限列Table_privColumn_priv其他列TimestampTimestampG

8、rantorMySQL没有rows_priv表,因为它不提供记录级权限,例如,你不能限制用户于表中包含特定列值的行。如果你确实需要这种能力,你必须用应用编程来提供。如果你想执行建议的记录级锁定,你可用GET_LOCK()函数做到。授权表的内容有如下用途: tables_priv表tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。 columns_priv表columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。 tables_priv和columns_priv表在MySQL 3.22.11版引进(与GRANT语句同时)。如果你有较早版本的MyS

9、QL,你的mysql数据库将只有user、db和host表。如果你从老版本升级到3.22.11或更新,而没有tables_priv和columns_priv表,运行mysql_fix_privileges_tables脚本创建它们。7.1.2用户的权限权限信息用user、db、host、tables_priv和columns_priv表被存储在mysql数据库中(即在名为mysql的数据库中)。在MySQL启动时和在7.5权限修改何时生效所说的情况时,服务器读入这些数据库表内容。7.1.2.1数据库和表的权限下列权限运用于数据库和表上的操作。 SELECT允许你使用SELECT语句从表中检索数

10、据。SELECT语句只有在他们真正从一个表中检索行是才需要select权限,你可以执行某个SELECT语句,甚至没有任何到服务器上的数据库里的存取任何东西的许可。例如,你可使用mysql客户作为一个简单的计算器: mysql SELECT 1+1;mysql SELECT PI()*2; UPDATE 允许你修改表中的已有的记录。 INSERT允许在表中插入记录 DELETE允许你从表中删除现有记录。 ALTER允许你使用ALTER TABLE语句,这其实是一个简单的第一级权限,你必须由其他权限,这看你想对数据库实施什么操作。 CREATE允许你创建数据库和表,但不允许创建索引。 DROP允许

11、你删除(抛弃)数据库和表,但不允许删除索引。 注意:如果你将mysql数据库的drop权限授予一个用户,该用户能抛弃存储了MySQL存取权限的数据库! INDEX允许你创建并删除索引。 REFERENCES目前不用。7.1.2.2管理权限下列权限运用于控制服务器或用户授权能力的操作的管理性操作。 FILE允许你告诉服务器读或写服务器主机上的文件。该权限不应该随便授予,它很危险,见“回避授权表风险”。服务器确实较谨慎地保持在一定范围内使用该权限。你只能读任何人都能读的文件。你正在写的文件必须不是现存的文件,这防止你迫使服务器重写重要文件,如/etc/passwd或属于别人的数据库的数据目录。如果

12、你授权FILE权限,确保你不以UNIX的root用户运行服务器,因为root可在文件系统的任何地方创建新文件。如果你以一个非特权用户运行服务器,服务器只能在给用户能访问的目录中创建文件。 GRANT允许你将你自己的权限授予别人,包括GRANT。 PROCESS允许你通过使用SHOW PROCESS语句或mysqladmin process命令查看服务器内正在运行的线程(进程)的信息。这个权限也允许你用KILL语句或mysqladmin kill命令杀死线程。你总是能看到或杀死你自己的线程。PROCESS权限赋予你对任何线程做这些事情的能力。 RELOAD允许你执行大量的服务器管理操作。你可以发

13、出FLUSH语句,你也能指性mysqladmin的reload、refresh、flush-hosts、flush-logs、flush-privileges和flush-tables等命令。 SHUTDOWN允许你用mysqladmin shutdown关闭服务器。 在user、db和host表中,每一个权限以一个单独的列指定。这些列全部声明为一个ENUM(N,Y)类型,所以每个权的缺省值是“N”。在tables_priv和columns_priv中的权限以一个SET表示,它允许权限用一个单个列以任何组合指定。这两个表比其他三个表更新,这就是为什么它们使用更有效的表示方式的原因。(有可能在未

14、来,user、db和host表也用一个SET类型表示。)7.1.3授权表列的内容7.1.3.1作用域列内容一些范围列要求文字值,但它们大多数允许通配符或其他特殊值。表7-3 作用域列的类型字段名类型HostCHAR(60)UserCHAR(16)PasswordCHAR(16)DbCHAR(64) (tables_priv和columns_priv表为CHAR(60) Host 一个Host列值可以是一个主机名或一个IP地址。值localhost意味着本地主机,但它只在你用一个localhost主机名时才匹配,而不是你在使用主机名时。假如你的本地主机名是并且在user表中有对你的两条记录,一个

15、有一个Host值或localhost,而另一个有,有localhost的记录将只当你连接localhost时匹配,其他在只在连接时才匹配。如果你想让客户能以两种方式连接,你需要在user表中有两条记录。你也可以用通配符指定Host值。可以使用SQL的模式字符“%”和“_”并具有当你在一个查询中使用LIKE算符同样的含义(不允许regex算符)。 SQL模式字符都能用于主机名和IP地址。如%wisc.edu匹配任何wisc.edu域内的主机,而%.edu匹配任何教育学院的主机。类似地,192.168.%匹配任何在192.168 B类子网的主机,而192.168.3.%匹配任何在192.168.3

16、 C类子网的主机。%值匹配所有主机,并可用于允许一个用户从任何地方连接。一个空白的Host值等同于%。(例外:在db表中,一个空白Host值含义是“进一步检查host表”,该过程在“查询访问验证”中介绍。)从MySQL 3.23起,你也可以指定带一个表明那些为用于网络地址的网络掩码的IP地址,如192.168.128.0/17指定一个17位网络地址并匹配其IP地址是192.168.128前17位的任何主机。 User 用户名必须是文字的或空白。一个空白值匹配任何用户。%作为一个User值不意味着空白,相反它匹配一个字面上的%名字,这可能不是你想要的。当一个到来的连接通过user表被验证而匹配的

17、记录包含一个空白的User值,客户被认为是一个匿名用户。 Password 口令值可以是空或非空,不允许用通配符。一个空口令不意味着匹配任何口令,它意味着用户必须不指定口令。口令以一个加密过的值存储,不是一个字面上的文本。如果你在Password列中存储一个照字面上的口令,用户将不能连接!GRANT语句和mysqladmin password命令为你自动加密口令,但是如果你用诸如INSERT、REPLACE、UPDATE或SET PASSWORD等命令,一定要用PASSWORD(new_password)而不是简单的new_password来指定口令。 Db在columns_priv和tabl

18、es_priv表中,Db值必须是真正的数据库名(照字面上),不允许模式和空白。在db和host中,Db值可以以字面意义指定或使用SQL模式字符%或_指定一个通配符。一个%或空白匹配任何数据库。 Table_name,Column_name这些列中的值必须是照字面意思的表或列名,不允许模式和空白。某些范围列被服务器视为大小写敏感的,其余不是。这些原则总结在下表中。特别注意Table_name值总是被看作大小写敏感的,即使在查询中的表名的大小写敏感性对待视服务器运行的主机的文件系统而定(UNIX下是大小写敏感,而Windows不是)。某些作用域列被服务器视为大小写敏感的,其余不是。这些原则总结在下

19、表中。特别注意Table_name值总是被看作大小写敏感的,即使在查询中的表名的大小写敏感性对待视服务器运行的主机的文件系统而定(UNIX下是大小写敏感,而Windows不是)。表7-4 作用域列的大小写敏感性列大小写敏感性HostNoUserYesPasswordYesDbYesTable_nameYesColumn_nameNo7.1.3.2授权表User、Db和Host的权限列的内容在user、db和host表中,所有权限字段被声明为ENUM(N,Y)-每一个都可有值N或Y,并且缺省值是N.7.1.3.3授权表tables_priv和columns_priv的权限列的内容在tables_

20、priv和columns_priv表中,权限字段被声明为SET字段:表7-5 授权表tables_priv和columns_priv的权限列的类型表名字段名可能的集合成员tables_privTable_privSelect, Insert, Update, Delete, Create, Drop, Grant, References, Index, Altertables_privColumn_privSelect, Insert, Update, Referencescolumns_privColumn_privSelect, Insert, Update, References7.1.

21、4权限系统工作原理7.1.4.1权限系统工作的一般过程MySQL权限系统保证所有的用户可以严格地做他们假定被允许做的事情。当你连接一个MySQL服务器时, 你的身份由你从那连接的主机和你指定的用户名来决定,系统根据你的身份和你想做什么来授予权限。 MySQL在认定身份中考虑你的主机名和用户名字,是因为有很小的原因假定一个给定的用户在因特网上属于同一个人。例如,用户从whitehouse.gov连接的bill不必和从连接bill是同一个人。 MySQL通过允许你区分在不同的主机上碰巧有同样名字用户来处理它:你可以对从whitehouse.gov连接授与bill一个权限集,而为从的连接授予一个不同

22、的权限集。 MySQL存取控制包含2个阶段: 阶段1:服务器检查你是否允许连接。 阶段2:假定你能连接,服务器检查你发出的每个请求。看你是否有足够的权限实施它。例如,如果你从数据库中一个表精选(select)行或从数据库抛弃一个表,服务器确定你对表有select权限或对数据库有drop权限。 服务器在存取控制的两个阶段使用在mysql的数据库中的user、db和host表对存取控制的第二阶段(请求证实),如果请求涉及表,服务器可以另外参考tables_priv和columns_priv表。简单地说,服务器使用这样的授权表: user表范围字段决定是否允许或拒绝到来的连接。对于允许的连接,权限字

23、段指出用户的全局(超级用户)权限。 db和host表一起使用: db表范围字段决定用户能从哪个主机存取哪个数据库。权限字段决定允许哪个操作。 当你想要一个给定的db条目应用于若干主机时,host表作为db表的扩展被使用。例如,如果你想要一个用户能在你的网络从若干主机使用一个数据库,在用户的db表的Host条目设为空值,然后将那些主机的每一个移入host表。这个机制详细描述在7.1.4.3 存取控制, 阶段2:请求证实。 tables_priv和columns_priv表类似于db表,但是更精致:他们在表和列级应用而非在数据库级。 注意管理权限(reload, shutdown, 等等)仅在us

24、er表中被指定。这是因为管理性操作是服务器本身的操作并且不是特定数据库,因此没有理由在其他授权表中列出这样的权限。事实上,只需要请教user表来决定你是否执行一个管理操作。 file权限也仅在user表中指定。它不是管理性权限,但你读或谢在服务器主机上的文件的的能力独立于你正在存取的数据库。 当mysqld服务器启动时,读取一次授权表内容。对授权表的更改生效在7.5权限修改何时生效。一个有用的诊断工具是mysqlaccess脚本,由Carlier Yves 提供给MySQL分发。使用-help选项调用mysqlaccess查明它怎样工作。注意:mysqlaccess仅用user、db和host

25、表仅检查存取。它不检查表或列级权限。7.1.4.2存取控制, 阶段1:连接证实当你试图联接一个MySQL服务器时,服务器基于你的身份和你是否能通过供应正确的口令验证身份来接受或拒绝连接。如果不是,服务器完全具结你的存取,否则,服务器接受连接,然后进入阶段2并且等待请求。 你的身份基于2个信息: 你从那个主机连接 你的MySQL用户名 身份检查使用3个user表(Host, User和Password)范围字段执行。服务器只有在一个user表条目匹配你的主机名和用户名并且你提供了正确的口令时才接受连接。 在user表范围字段可以如下被指定: 一个Host值可以是主机名或一个IP数字,或local

26、host指出本地主机。 你可以在Host字段里使用通配符字符“%”和“_”。 一个Host值%匹配任何主机名,一个空白Host值等价于%。注意这些值匹配能创建一个连接到你的服务器的任何主机! 通配符字符在User字段中不允许,但是你能指定空白的值,它匹配任何名字。如果user表匹配到来的连接的条目有一个空白的用户名,用户被认为是匿名用户(没有名字的用户),而非客户实际指定的名字。这意味着一个空白的用户名被用于在连接期间的进一步的存取检查(即,在阶段2期间)。 Password字段可以是空白的。这不意味着匹配任何口令,它意味着用户必须不指定一个口令进行连接。 非空白Password值代表加密的口

27、令。 MySQL不以任何人可以看的纯文本格式存储口令,相反,正在试图联接的一个用户提供的口令被加密(使用PASSWORD()函数),并且与存储了user表中的已经加密的版本比较。如果他们匹配,口令是正确的。 下面的例子显示出各种user表中Host和User条目的值的组合如何应用于到来的连接:表7-6 Host和User条目的值的组合Host值User值被条目匹配的连接GwenGwen, 从连接任何用户, 从连接,%GwenGwen, 从任何主机连接%任何用户, 从任何主机连接%.loc.govGwenGwen, 从在loc.gov域的任何主机连接x.y.%GwenGwen, 从、,x.y.e

28、du等联接。(这或许无用)144.155.166.177GwenGwen, 从有144.155.166.177 IP 地址的主机连接144.155.166.%GwenGwen, 从144.155.166 C类子网的任何主机连接既然你能在Host字段使用IP通配符值(例如,144.155.166.%匹配在一个子网上的每台主机),有可能某人可能企图探究这种能力,通过命名一台主机为。为了阻止这样的企图,MySQL不允许匹配以数字和一个点起始的主机名,这样,如果你用一个命名为类似的主机,它的名字决不会匹配授权表中Host列。只有一个IP数字能匹配IP通配符值。 一个到来的连接可以被在user表中的超过

29、一个条目匹配。例如,一个由Gwen从的连接匹配多个条目如上所述。如果超过一个匹配,服务器怎么选择使用哪个条目呢?服务器在启动时读入user表后通过排序来解决这个问题,然后当一个用户试图连接时,以排序的顺序浏览条目,第一个匹配的条目被使用。 MySQL服务器按一种特定方式排序符授权表中的记录,然后通过按序浏览记录匹配到来的连接。找到的第一个匹配决定了被使用的记录。理解MySQL使用的排序顺序很重要,特别是对user表。当服务器读取user表内容时,它根据在Host和User列中的值排序记录,Host值起决定作用(相同的Host值排在一起,然后再根据User值排序)。然而,排序不是典序(按词排序),它只是部分是。要牢记的是字面上的词优先于模式。这意味着如果你正从连接服务器而Host有和%两个值,则第一个先选。类似地,%优先于%.net,然后是%。IP地址的匹配也是这样的。总之一句话,越具体越优先。user表排序工作如下,假定user表看起来像这样: +-+-+-| Host | User | .+-+-+-| % | root | .| % | jerry | .| localhost | root | .| localhost | | .+

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1