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

📄 mysql-安全性-13.htm

📁 微软数据库开发梦工场多媒体教学-My sql篇.rar
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body bgcolor="#000000" text="#FFFFFF">
<p><font color="#009900">不用GRANT设置用户<br>
  </font> </p>
<p>如果你有一个早于3.22.11的MySQL版本,你不能使用GRANT(或REVOKE)语句设置用户及其访问权限,但你可以直接修改授权表的内容。如果你理解GRANT语句如何修改授权表,这很容易。那么你通过手工发出INSERT语句就能自己做同样的事情。 
</p>
<p>当你发出一条GRANT语句时,你指定一个用户名和主机名,可能还有口令。对该用户生成一个user表记录,并且这些值记录在User、Host和Password列中。如果你在GRANT语句中指定全局权限,这些权限记录在记录的权限列中。其中要留神的是GRANT语句为你加密口令,而INSERT不是,你需要在INSERT中使用PASSWORD()函数加密口令。如果你指定数据库级权限,用户名和主机名被记录在db表的User和Host列。你为其授权的数据库记录在Db列中,你授予的权限记录在权限列中。</p>
<p>对于表级和列级权限,效果是类似的。在tables_priv和columns_priv表中创建记录以记录用户名、主机名和数据库,还有相关的表和列。授予的权限记录在权限列中。</p>
<p>如果你还记得前面的介绍,你应该能即使不用GRANT语句也能做GRANT做的事情。记住在你直接修改授权表时,你将通知服务器重载授权表,否则他不知道你的改变。你可以执行一个mysqladmin 
  flush-privileges或mysqladmin reload命令强迫一个重载。如果你忘记做这个,你会疑惑为什么服务器不做你想做的事情。</p>
<p>下列GRANT语句创建一个拥有所有权的超级用户。包括授权给别人的能力:</p>
<p>GRANT ALL ON *.* TO anyname@localhost IDENTIFIED BY &quot;passwd&quot;<br>
  WITH GRANT OPTION<br>
  该语句将在user表中为anyname@localhost创建一个记录,打开所有权限,因为这里是超级用户(全局)权限存储的地方,要用INSERT语句做同样的事情,语句是: 
</p>
<p>INSERT INTO user VALUES(&quot;localhost&quot;,&quot;anyname&quot;,PASSWORD(&quot;passwd&quot;),<br>
  &quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;)<br>
  你可能发现它不工作,这要看你的MySQL版本。授权表的结构已经改变而且你在你的user表可能没有14个权限列。用SHOW COLUMNS找出你的授权表包含的每个权限列,相应地调整你的INSERT语句。 
  下列GRANT语句也创建一个拥有超级用户身份的用户,但是只有一个单个的权限: </p>
<p>GRANT RELOAD ON *.* TO flush@localhost IDENTIFIED BY &quot;flushpass&quot;<br>
  本例的INSERT语句比前一个简单,它很容易列出列名并只指定一个权限列。所有其它列将设置为缺省的&quot;N&quot;: </p>
<p>INSERT INTO user (Host,Password,Reload) VALUES(&quot;localhost&quot;,&quot;flush&quot;,PASSWORD(&quot;flushpass&quot;),&quot;Y&quot;)<br>
  数据库级权限用一个ON db_name.*子句而不是ON *.*进行授权: </p>
<p>GRANT ALL ON sample.* TO boris@localhost IDENTIFIED BY &quot;ruby&quot;<br>
  这些权限不是全局的,所以它们不存储在user表中,我们仍然需要在user表中创建一条记录(使得用户能连接),但我们也需要创建一个db表记录记录数据库集权限: 
</p>
<p>INSERT INTO user (Host,User,Password) VALUES(&quot;localhost&quot;,&quot;boris&quot;,PASSWORD(&quot;ruby&quot;)) 
</p>
<p>INSERT INTO db VALUES(&quot;localhost&quot;,&quot;sample_db&quot;,&quot;boris&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;N&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;)</p>
<p>&quot;N&quot;列是为GRANT权限;对末尾的一个数据库级具有WITH GRANT OPTION的GRANT语句,你要设置该列为&quot;Y&quot;。</p>
<p>要设置表级或列级权限,你对tables_priv或columns_priv使用INSERT语句。当然,如果你没有GRANT语句,你将没有这些表,因为它们在MySQL中同时出现。如果你确实有这些表并且为了某些原因想要手工操作它们,要知道你不能用单独的列启用权限。</p>
<p>你设置tables_priv.Table_priv或columns_priv.Column_priv列来设置包含你想启用的权限值。例如,要对一个表启用SELECT和INSERT权限,你要在相关的tables_priv的记录中设置Table_priv为&quot;Select,Insert&quot;。 
</p>
<p>如果你想对一个拥有MySQL账号的用户修改权限,使用UPDATE而不是INSERT,不管你增加或撤销权限都是这样。要完全删除一个用户,从用户使用的每个表中删除记录。 
</p>
<p>如果你愿意避免发一个查询来直接修改全权表,你可以看一下MySQL自带的mysqlaccess和mysql_setpermissions脚本。 <br>
</p>
<p></p>
</body>
</html>

⌨️ 快捷键说明

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