Chinaunix首页 | 论坛 | 博客
  • 博客访问: 136094
  • 博文数量: 24
  • 博客积分: 2022
  • 博客等级: 大尉
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-21 01:00
文章分类
文章存档

2010年(1)

2009年(23)

我的朋友

分类: LINUX

2009-10-23 11:58:46

(5)创建用户

   首次安装MySQL时,MySQL自动授予任何用户都可以从本地连接MySQL服务器,但是,只有MySQL管理员(root用户)能够完全访

   问系统中所有数据库,而其他用户只能访问test数据库。这是因为MySQL安装程序在mysql这个数据库中设置了5个授权表,这5

   个授权表决定用户连接服务器及操作的权限。

                                       mysql数据库中5个授权表的功能

表名

说明

user

定义了能够连接到数据库服务器的用户和主机,以及这些用户的密码和访问权限

db

定义了连接到数据库服务器上的用户可以使用的数据库,以及在这些数据库中能够执行的操作

host

当表db中的Host字段为空时,由表 host定义用户可以从哪些主机连接到数据库服务器,并且不同的主机对指定的数据库可以具有不同的权限

tables_priv

定义了连接到数据库服务器上的用户可以访问的表,以及在这些表中可以执行的操作

columns_priv

定义了连接到数据库服务器上的用户可以访问的字段,以及在这些字段中可以执行的操作

   查看user表的内容,可以使用如下命令:

         mysql>use  mysql

         mysql>select  host userpasswordselect_priv  from  user

                +-----------------------+------+------------------+-----------------+

                 | host                  | user | password         | select_priv |

                +-----------------------+------+------------------+-----------------+

                 | localhost             | root | 565491d704013245 | Y         |

                 | localhost.localdomain | root |                     | Y          |

                 | localhost.localdomain |      |                     | N         |

                 | localhost             |      |                     | N         |

                 +-----------------------+------+------------------+----------------+

                 4 rows in set (0.00 sec)

    从查询结果可以看到:第12条记录表明,MySQL允许用户root可以从本地连接到数据库服务器,并对服务器中的所有数据库都具

    有完全控制权限,从结果记录中第4个字段开始,所有的字段值均为“Y”,表示用户具有完全控制权限;第34条记录表明,任何用

    户都可以从本地连接到数据库服务器中,但对所有数据库都没有访问权限,记录中user字段的值为空表示所有用户,而记录中的第4

    个字段开始,所有的字段值均为“N”,表示对所有数据库都没有访问权限。

   查看db表中的内容,可以使用如下命令:

          mysql>select  hostdbuserselect_priv  from  mysql.db

                 +------+---------+------+-------------+

                 | host | db      | user | select_priv |

                 +------+---------+------+-------------+

                 | %    | test    |      | Y           |

                 | %    | test\_% |      | Y          |

                 +------+---------+------+-------------+

                 2 rows in set (0.01 sec)

    从查询结果可以看到:db表中定义了任何用户都可以从任何主机访问test数据库,或以test开头的数据库,并且对该数据库拥有完全

    控制权限。因为host字段的值为%通配符,即代表所有主机,db字段的值为testtest\_%表示test数据库或以test开头的数据

    (\_”是转义字符,“%”是通配符),而从表中第4个字段开始,所有的字段值均为“Y”,表示具有完全控制权限。

    注意:尽管在db表中定义了任何用户都可以从任何主机访问test数据库,但在user表中已经做了限制,要求任何用户只可以从本地

    连接到数据库服务器,因此,两个表的共同作用使得MySQL最终的设置是对于任何用户只能从本地连接数据库服务器。

  根据以上分析,可以利用mysql数据库中的授权表在MsSQL中进行用户的管理:

  【创建新用户】

    例如:创建一个test用户,并为其设置密码,使其能够从任何一台主机上连接到数据库服务器,可以使用以下SQL语句实现:

          mysql>use  mysql              //选择mysql数据库//

          mysql>insert  into  user  (hostuserpassword) values (%’,‘test’,password(test)) //添加新记录//

          mysql>flush  privileges         //对授权表进行重载//

          再让test用户从其他任何主机上连接到数据库服务器后,对e_learning数据库能完全控制,可以使用以下SQL语句:

          mysql>insert  into  db (hostdbuserselect_priv)values(%’,‘e_learning’,‘test’,‘Y)

          mysql>flush  privileges

  【更改用户密码】

    更改用户密码实际就是用update语句对授权表进行更新,例如,将test用户的密码改为123456,可以使用以下语句:

          mysql>update  user  set  password=password(123456)

          mysql>flush  privileges

  【删除用户】

    删除用户的语句是delete,例如,删除test用户可以使用以下语句:

          mysql>delete  from  user  where  user=test’;

          mysql>flush  privileges

                                                                 

 (6)用户权限设置

    若要进行用户权限的设置,首先需要了解在数据库mysql的以下5个授权表中,具体哪些字段是用来设置权限的:

                            userdbhost表中可设置的权限

字段名

权限名

select_priv

select查询

insert_priv

insert插入

update_priv

update更新

delete_priv

delete删除

create_priv

create创建

drop_priv

drop删除

reload_priv

reload重载

shutdown_priv

shutdown关闭

process_priv

process跟踪

file_priv

file文件读写

grant_priv

grant授权

references_priv

references引用

index_priv

index索引

alter_priv

alter修改

show_db_priv

show databases查看数据库

super_priv

super执行管理命令

create_tmp_table_priv

create temporary tables创建临时表

lock_tables_priv

lock tables锁定表

execute_priv

execute执行被保护程序

repl_slave_priv

replication slave 备份slave

repl_client_priv

replication client 备份client


                       tables_priv
columns_priv表中的权限字段和可设置的权限

表名

字段名

权限集合

columns_priv

column_priv

InsertReferenceSelectUpdate

tables_priv

columv_priv

InsertReferenceSelectUpdate

table_priv

AlterCreateDeleteDropGrantIndexInsertReferenceSelectUpdate

    MySQL提供了两种修改授权表中访问权限的方法:一种是使用insertupdateSQL语句直接修改授权表中的信息;另一种是使

    GRANTREVOKE语句。相比起来,GRANTREVOKE语句要比前一种方法更为简单,清晰。

  Grant语句】

    Grant语句的基本格式:

      mysql>grant 权限列表 [(字段列表)]  on  数据库名.表名  to  用户名@域名或IP地址  [identified  by  '密码值']

              [with  grant  option]

   ·简单的授权

     简单的授权可以设置哪些用户可以从哪些主机连接到数据库服务器。

     例如:可以使用以下命令为用户test设置从任意主机连接到服务器的权限,并能完全访问news数据库。

           mysql>grant  all  on  news.  to  test@'%'  identified  by  'test'

    需要注意的是:

   ·不同级别的授权

     不同级别的授权可以为同一个用户在对不同数据库操作时授予不同的权限。

     例如:可以使用以下命令创建一个新用户Kelly,使其能够从192.168.10.0子网中任何一台主机连接到服务器,具有读取e_learning

           数据库,并能修改teacher表中name字段的值:

           mysql>grant  select  on  e_learning.  to  Kelly@'192.168.10.%'  indentified  by  '123456'

           mysql>grant  update  (name)  on  e_learning.teacher  to  Kelly@'192.168.10.%'

   ·管理权限的授权

     管理权限的授权可以为用户设置某个数据库的完全访问权限,能够管理数据库中的所有表。

     例如:授予用户Sullivan能够从本地连接到服务器,并对e_learning数据库具有完全访问权限,并可以将其拥有的权限授予其他用

           户,可以使用以下语句:

           mysql>grant  all  on  e_learning. to Sullivan@localhost  identified  by  '123456'  with  grant  option

  Revoke语句】

    Revoke语句的基本格式:

      mysql>revoke  权限列表  [(字段列表)]  on  数据库.表名  from  用户名@域名或IP地址;

    例如:MySQL管理员撤销用户Kelly@localhost对数据库e_learningcreatedelete数据库和表的权限,并撤销该用户将自己             

          所拥有的权限授予他人的权限,可以使用以下语句:

          mysql>revoke  createdrop  on  e_learning.  from  Kelly@localhost

          mysql>revoke  grant  option  on  e_learning.  from  Kelly@localhost

 

 

 

 

 

.MySQL数据库的备份和修复

   数据库的备份和修复是确保数据完整性,安全性的重要功能,MySQL数据库提供了以下备份和修复的工具。

 1.MySQL数据库备份和恢复

   在数据库数据丢失或损坏的情况下,备份数据库是很重要的。当发生系统崩溃时,需要尽可能使损失的数据最少,并且把数据库恢复到

   崩溃前的状态。根据备份时是否停止MySQL数据库服务,备份数据库分为在线备份与离线备份:

  (1)在线备份与恢复的命令与用法

  【select  into  outfile | dumpfile

      利用select语句的into outfiledumpfile子句,可以将查询的结果导出到一个文件。其语法格式为:

     mysql>select  ...  into  {outfile | dumpfile}  'file_name'  [fields  [terminated by '\t']  [optionally]

             enclosed  by ''] [lines  terminated  by  '\n'

    load  data  infile恢复文件】

      其语法格式为:

     mysql>load  data  infile  'file_name.txt'  [replace| ignore]  into  table  tbl_name  [fields  

             [terminated  by '\t'] [optionally] enclosed by ''] [lines  terminated  by  '\n']

    mysqldump备份】

        由于利用select into语句导出数据时,只能导出数据的值,导出之后,就失去了数据与数据结构之间的关联。再导入数据时,只

      能依据自然序将各数据项(字段)对应起来,如果用户在导出数据之后修改了数据结构或数据项的位置,那么导入的数据就会发生错误。

        使用mysqldump能实现带结构的备份,从而克服了上述问题。mysqldump是一个MySQL自带的标准在线导出工具,导出后的

      数据将以SQL语句的形式存在,可以选择导出数据结构(建表SQL语句)数据(数据插入SQL语句)

        利用mysqldump(-c-complete_insert选项)可避免使用select-into/load data结构与数据分离所带来的问题

      mysqldump存在于/usr/bin/目录下(通过rpm包安装mysql)。其使用方法有三种:

      1导出指定数据库的表,如果不指定tables,将导出整个数据库的所有表:

         #mysqldump  [options]  database  [tables]           

         例如:导出e_learning数据库的teacher表到文本文件teacher.sql

             #mysqldump  e_learning  teacher  -h localhost -u root -p >teacher.sql

      2同时导出多个数据库:

         #mysqldump  [options]  --database  [options]  db1  [db2  db3....]

      3导出当前服务器内的所有数据库:

         #mysqldump  [options]  -all-database  [options]

      通过#mysqldump -help可以得到当前mysqldump版本所支持的所有选项。

    mysqlhotcopy备份】

        对于MyISAM型数据表,mysqlhotcopy是备份数据库或单个表的最快的途径,但只能运行在数据库目录所在的机器上。

      mysqlhotcopy是一个Perl脚本,使用LOCK TABLESFLUSH TABLEScpscp来快速备份数据库。

        mysqlhotcopy可方便地将某个数据库复制为另外一个数据库,而不中止服务。其语法格式为:

         #mysqlhotcopy  db_name

      例如:执行以下命令

             #mysqlhotcopy  e_learning  -h localhost -u root -p 123456

              mysql>show databases;

      可以看到备份后多出了一个mysql_copy数据库,说明mysqlhotcopy命令执行成功。利用这种方法可以很快地进行整个数据库的

      在线备份。

  (2).离线备份    

    除了在线备份以外,还可以通过离线方式备份数据库,就是将MySQL数据库关闭后,直接利用命令行复制数据。这样做的优点在于一

    定会保持备份前的数据的一致性。可用如下命令将/var/lib/mysql目录下的数据库采用gzip方式压缩到/tmp/mysql.tgz文件中进行

    备份:   #tar  cvfz  /tmp/mysql.tgz  /var/lib/mysql

   

 2.MySQL数据库的故障修复

    数据库文件的损坏有很多原因,而且损坏的程度不同,但无论数据库损坏的原因如何,都应当在损坏后进行故障的修复。MySQL提供

    myisamchk语句用以检查和修复MyISAM表,isamchk语句则用来检查和修复ISAM表。为防止myisamchk恢复数据库时

    产生不一致,在使用myisamchk命令时最好停止mysqld服务。

    Myisamchk基本语法如下:

         #myisamchk  [OPTIONS]  tables[.MYI]

    tables[.MYI]是指数据表所在的文件名,可以采用相对路径或绝对路径和采用通配符指示,例如:

             #myisamchk  f.MYI

    使用以下命令可以查看myisamchk的选项内容:

             #myisamckh  --help

    使用myisamchk命令还可以查看表的信息。通过以下命令可以以描述模式运行myisamchk,生成表的描述:

         #myisachk  -d  [-v]  表名

    以下是一个myisamchk  -d的输入例子:

             #myisamchk  -d  -v  func.MYI

    而如果只需要显示表的重要信息,则可使用以下命令:

         #myisamchk  -ei[s|v]  表名

     例如:  #myisamchk  -eiv  func.MYI         

    在故障恢复的过程中,myisamchk一行一行地创建一个MYD(数据)文件的副本,通过删除目的MYD文件,并且用原来的文件名重命

    名新文件。

    表文件发生损坏,通常会体现在发生查询意外中断的情况。同时,还可能出现以下错误,如:

        ·.FRM文件被锁定 

        ·无法找到.MYI文件

        ·文件意外结束

        ·记录文件毁坏等

    若遇到以上情况,则需要进行表修复的过程。通过myisamchk命令通常可以修复大多数错误,修复的一般步骤包括:

     ·确保MySQL用户及当前用户有权访问,修改需要修复的数据表文件,并能进入相关的数据库文件目录。

     ·运行myisamchk  *.MYI检查表,并根据检查表的结果作出不同的处理。

    若检查结果错误情况简单,则可以使用-q 快速恢复命令:

          #myisamchk  -r  -q  tbl_name

    若快速恢复命令不能恢复,则采用直接恢复,命令为:

          #myisamchk  -r  tal_name

    若仍然失效,则可采用安全恢复,命令为:

          #myisamchk  --safe-recover  tbl_name

导出表

mysqldump --opt school > school.sql

导入表

mysql

mysql>create database school;

mysql>use school;

mysql>source school.sql;

导出数据库

mysqldump --databases db1 db2 > db1.db2.sql

导入数据库

mysql < db1.db2.sql

阅读(1350) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~