⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 422.html

📁 关于jsp的一些好文章 主要介绍一些关于JSP的应用技巧方面的东西
💻 HTML
字号:

<STYLE type=text/css>
<!--
body,td { font-size:9pt;}
hr { color: #000000; height: 1px}
-->
</STYLE>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD><TITLE>精选文章 >> SQL之家 >> MySQL安全性指南(3)</title>
</head>
<body >

<p><IMG SRC="../image/jsp001_middle_logo.gif" WIDTH="180" HEIGHT="60" BORDER=0 ALT=""></p>

<table width=100% bgcolor="#cccccc" align=center cellpadding="2" cellspacing="0" border=1 bordercolorlight="#000000" bordercolordark="#FFFFFF">
<tr bgcolor="#EFF8FF"><td>
<a href=http://www.jsp001.com/list_thread.php?int_attribute=2>精选文章</a>
>> <a href=http://www.jsp001.com/list_thread.php?forumid=45&int_attribute=2>SQL之家</a>
>> MySQL安全性指南(3) [<a href=http://www.jsp001.com/forum/showthread.php?goto=newpost&threadid=422>查看别人的评论</a>]<br>

<hr><p>由 amtd 发布于: 2001-02-13 18:46</p><p><img src="images/icons/icon1.gif" alt="Post" border=0> </p><p>MySQL安全性指南(3)    <br><br>作 者: 晏子<br><br><br><br>2.4 不用GRANT设置用户<br>如果你有一个早于3.22.11的MySQL版本,你不能使用GRANT(或REVOKE)语句设置用<br>户及其访问权限,但你可以直接修改授权表的内容。如果你理解GRANT语句如何修改授<br>权表,这很容易。那么你通过手工发出INSERT语句就能自己做同样的事情。<br><br>当你发出一条GRANT语句时,你指定一个用户名和主机名,可能还有口令。对该用户生<br>成一个user表记录,并且这些值记录在User、Host和Password列中。如果你在GRANT<br>语句中指定全局权限,这些权限记录在记录的权限列中。其中要留神的是GRANT语句为<br>你加密口令,而INSERT不是,你需要在INSERT中使用PASSWORD()函数加密口令。<br><br>如果你指定数据库级权限,用户名和主机名被记录在db表的User和Host列。你为其授<br>权的数据库记录在Db列中,你授予的权限记录在权限列中。<br><br>对于表级和列级权限,效果是类似的。在tables_priv和columns_priv表中创建记录<br>以记录用户名、主机名和数据库,还有相关的表和列。授予的权限记录在权限列中。<br><br>如果你还记得前面的介绍,你应该能即使不用GRANT语句也能做GRANT做的事情。记住<br>在你直接修改授权表时,你将通知服务器重载授权表,否则他不知道你的改变。你可<br>以执行一个mysqladmin flush-privileges或mysqladmin reload命令强迫一个重<br>载。如果你忘记做这个,你会疑惑为什么服务器不做你想做的事情。<br><br>下列GRANT语句创建一个拥有所有权的超级用户。包括授权给别人的能力:<br><br>GRANT ALL ON *.* TO anyname@localhost IDENTIFIED BY "passwd"<br>    WITH GRANT OPTION<br>该语句将在user表中为anyname@localhost创建一个记录,打开所有权限,因为这里<br>是超级用户(全局)权限存储的地方,要用INSERT语句做同样的事情,语句是: <br><br>INSERT INTO user  VALUES("localhost","anyname",PASSWORD("passwd"),<br>    "Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y")<br>你可能发现它不工作,这要看你的MySQL版本。授权表的结构已经改变而且你在你的<br>user表可能没有14个权限列。用SHOW COLUMNS找出你的授权表包含的每个权限列,相<br>应地调整你的INSERT语句。 下列GRANT语句也创建一个拥有超级用户身份的用户,但<br>是只有一个单个的权限: <br><br>GRANT RELOAD ON *.* TO flush@localhost IDENTIFIED BY "flushpass"<br>本例的INSERT语句比前一个简单,它很容易列出列名并只指定一个权限列。所有其它<br>列将设置为缺省的"N": <br><br>INSERT INTO user (Host,Password,Reload) VALUES<br>("localhost","flush",PASSWORD("flushpass"),"Y")<br>数据库级权限用一个ON db_name.*子句而不是ON *.*进行授权: <br><br>GRANT ALL ON sample.* TO boris@localhost IDENTIFIED BY "ruby"<br>这些权限不是全局的,所以它们不存储在user表中,我们仍然需要在user表中创建一<br>条记录(使得用户能连接),但我们也需要创建一个db表记录记录数据库集权限: <br><br>INSERT INTO user (Host,User,Password) VALUES<br>("localhost","boris",PASSWORD("ruby")) <br><br>INSERT INTO db VALUES<br>("localhost","sample_db","boris","Y","Y","Y","Y","Y","Y","N","Y","Y","<br>Y")<br><br>"N"列是为GRANT权限;对末尾的一个数据库级具有WITH GRANT OPTION的GRANT语<br>句,你要设置该列为"Y"。<br><br>要设置表级或列级权限,你对tables_priv或columns_priv使用INSERT语句。当然,<br>如果你没有GRANT语句,你将没有这些表,因为它们在MySQL中同时出现。如果你确实<br>有这些表并且为了某些原因想要手工操作它们,要知道你不能用单独的列启用权限。<br><br>你设置tables_priv.Table_priv或columns_priv.Column_priv列来设置包含你想<br>启用的权限值。例如,要对一个表启用SELECT和INSERT权限,你要在相关的<br>tables_priv的记录中设置Table_priv为"Select,Insert"。 <br><br>如果你想对一个拥有MySQL账号的用户修改权限,使用UPDATE而不是INSERT,不管你<br>增加或撤销权限都是这样。要完全删除一个用户,从用户使用的每个表中删除记录。 <br><br>如果你愿意避免发一个查询来直接修改全权表,你可以看一下MySQL自带的<br>mysqlaccess和mysql_setpermissions脚本。 <br><br><br><br>附录1 小测验<br>在你刚刚新安装了一个MySQL服务器,在你增加了一个允许连接MySQL的用户,用下列<br>语句:<br><br>GRANT ALL ON samp_db.* TO fred@*.snake.net IDENTIFIED "cocoa"<br><br>而fred碰巧在服务器主机上有个账号,所以他试图连接服务器:<br><br>%mysql -u fred -pcocoa samp_db<br>ERROR 1045: Access denied for user: 'fred@localhost' (Using password: <br>YES)<br><br>为什么?<br><br>原因是: <br><br>先考虑一下mysql_install_db如何建立初始权限表和服务器如何使用user表记录匹<br>配客户连接。在你用mysql_install_db初始化你的数据库时,它创建类似这样的<br>user表:<br><br>Host User <br>localhost<br>pit.snake.net<br>localhost<br>pit.snake.net root<br>root<br><br><br><br>头两个记录允许root指定localhost或主机名连接本地服务器,后两个允许匿名用户<br>从本地连接。当增加fred用户后,<br><br>Host User <br>localhost<br>pit.snake.net<br>localhost<br>pit.snake.net<br>%.snake.net root<br>root<br><br><br>fred <br><br>在服务器启动时,它读取记录并排序它们(首先按主机,然后按主机上的用户),越<br>具体越排在前面:<br><br>Host User <br>localhost<br>localhost<br>pit.snake.net<br>pit.snake.net<br>%.snake.net root<br><br>root<br><br>fred <br><br>有localhost的两个记录排在一起,而对root的记录排在第一,因为它比空值更具<br>体。pit.snake.net的记录也类似。所有这些均是没有任何通配符的字面上的Host<br>值,所以它们排在对fred记录的前面,特别是匿名用户排在fred之前。<br><br>结果是在fred试图从localhost连接时,Host列中的一个空用户名的记录在包<br>含%.snake.net的记录前匹配。该记录的口令是空的,因为缺省的匿名用户没有口<br>令。因为在fred连接时指定了一个口令,由一个错配且连接失败。<br><br>这里要记住的是,虽然用通配符指定用户可以从其连接的主机是很方便。但你从本地<br>主机连接时会有问题,只要你在table表中保留匿名用户记录。<br><br>一般地,建议你删除匿名用户记录:<br><br>mysql&gt; DELETE FROM user WHERE User="";<br><br>更进一步,同时删除其他授权表中的任何匿名用户,有User列的表有db、<br>tables_priv和columns_priv。<br><br>附录2 使一个新的MySQL安装更安全<br>在你自己安装了一个新的MySQL服务器后,你需要为MySQL的root用户指定一个目录<br>(缺省无口令),否则如果你忘记这点,你将你的MySQL处于极不安全的状态(至少在<br>一段时间内)。<br><br>在Unix(Linux)上,在按照手册的指令安装好MySQL后,你必须运行<br>mysql_install_db脚本建立包含授权表的mysql数据库和初始权限。在Windows上,<br>运行分发中的Setup程序初始化数据目录和mysql数据库。假定服务器也在运行。<br><br>当你第一次在机器上安装MySQL时,mysql数据库中的授权表是这样初始化的:<br><br>你可以从本地主机(localhost)上以root连接而不指定口令。root用户拥有所有权<br>限(包括管理权限)并可做任何事情。(顺便说明,MySQL超级用户与Unix超级用户<br>有相同的名字,他们彼此毫无关系。) <br>匿名访问被授予用户可从本地连接名为test和任何名字以test_开始的数据库。匿名<br>用户可对数据库做任何事情,但无管理权限。 <br>从本地主机多服务器的连接是允许的,不管连接的用户使用一个localhost主机名或<br>真实主机名。如:<br><br>% mysql -h localhost test<br><br>% mysql -h pit.snake.net test<br><br>你以root连接MySQL甚至不指定口令的事实只是意味着初始安装不安全,所以作为管<br>理员的你首先要做的应该是设置root口令,然后根据你设置口令使用的方法,你也可<br>以告诉服务器重载授权表是它知道这个改变。(在服务器启动时,它重载表到内存中<br>而可能不知道你已经修改了它们。)<br><br>对MySQL 3.22和以上版本,你可以用mysqladmin设置口令:<br><br>% mysqladmin -u root password yourpassword<br><br>对于MySQL的任何版本,你可以用mysql程序并直接修改mysql数据库中的user授权<br>表:<br><br>% mysql -u root mysql<br>mysql&gt;UPDATE user SET password=PASSWORD("yourpassword") WHERE <br>User="root";<br><br>如果你有MySQL的老版本,使用mysql和UPDATE。<br><br>在你设置完口令后,通过运行下列命令检查你是否需要告诉服务器重载授权表:<br><br>% mysqladmin -u root status<br><br>如果服务器仍然让你以root而不指定口令而连接服务器,重载授权表:<br><br>% mysqladmin -u root reload<br><br>在你设置了root的口令后(并且如果需要重载了授权表),你将需要在任何时候以<br>root连接服务器时指定口令。<br><br><br><br><br>——摘自:晏子工作室<br> <br><br>__________________<br><font color=red>真实源于生活! </font><br>请访问我们的网站: <br>(VB爱好者乐园) <br><a href="http://www.vbgood.com" target=_blank>http://www.vbgood.com</a><br><a href="http://www.d1vb.com" target=_blank>http://www.d1vb.com</a><br><a href="http://61.128.97.225/vbgood/index.asp" target=_blank>http://61.128.97.225/vbgood/index.asp</a><br>拥有1800多个资料! </p></td>
  </tr>
</table>

<p>
<CENTER><a href="http://www.jsp001.com/forum/newreply.php?action=newreply&threadid=422">点这里对该文章发表评论</a></CENTER>
<p>该文章总得分是 <font color=red>0</font> 分,你认为它对你有帮助吗?
				[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=422&intVote=4","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>非常多</a>](<font color=red>0</font>) 
				[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=422&intVote=2","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>有一些</a>](<font color=red>0</font>) 
				[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=422&intVote=1","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>无帮助</a>](<font color=red>0</font>) 
				[<a href=javascript:void(0) onclick=window.open("http://www.jsp001.com/forum/codeVote.php?threadid=422&intVote=-1","","menubar=no,toolbar=no,location=no,directories=no,status=no,resizable=no,scrollbars=no,width=70,height=40,top=0,left=0")>是灌水</a>](<font color=red>0</font>) </p>
<script language="javascript" src="http://www.jsp001.com/include/read_thread_script.php?threadid=422"></script>
<p><CENTER>
Copyright &copy; 2001 - 2009 JSP001.com . All Rights Reserved <P>

<IMG SRC="../image/jsp001_small_logo.gif" WIDTH="85" HEIGHT="30" BORDER=0 ALT="">
</CENTER></p>

</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -