📄 manual_privilege_system.html
字号:
<p><strong>select</strong>、<strong>insert</strong>、<strong>update</strong>和<strong>delete</strong>权限允许你在一个数据库现有的表上实施操作。
</p>
<p><code>SELECT</code>语句只有在他们真正从一个表中检索行是才需要<strong>select</strong>权限,你可以执行某个<code>SELECT</code>语句,甚至没有任何到服务器上的数据库里的存取任何东西的许可。例如,你可使用<code>mysql</code>客户作为一个简单的计算器:
</p>
<pre>mysql> SELECT 1+1;
mysql> SELECT PI()*2;
</pre>
<p><strong>index</strong>权限允许你创建或抛弃(删除)索引。 </p>
<p><strong>alter</strong>权限允许你使用<code>ALTER TABLE</code>。 </p>
<p><strong>create</strong>和<strong>drop</strong>权限允许你创建新的数据库和表,或抛弃(删除)现存的数据库和表。
</p>
<p>注意:如果你将<code>mysql</code>数据库的<strong>drop</strong>权限授予一个用户,该用户能抛弃存储了<strong>MySQL</strong>存取权限的数据库!
</p>
<p><strong>grant</strong>权限允许你把你自己拥有的那些权限授给其他的用户。
</p>
<p><strong>file</strong>权限给予你用<code>LOAD DATA INFILE</code>和<code>SELECT ...
INTO OUTFILE</code>语句读和写服务器上的文件,任何被授予这个权限的用户都能读或写<strong>MySQL</strong>服务器能读或写的任何文件。
</p>
<p>其余的权限用于管理性操作,它使用<code>mysqladmin</code>程序实施。下表显示<code>mysqladmin</code>支配每个管理性权限允许你执行的命令:
</p>
<table BORDER="manual_Privilege_system.html#Privilege_changes" WIDTH="100%" NOSAVE="#101090" class="p4">
<tr>
<td><strong>优惠</strong> </td>
<td><strong>权限拥有者允许执行的命令</strong> </td>
</tr>
<tr>
<td><strong>reload</strong> </td>
<td><code>reload</code>, <code>refresh</code>, <code>flush-privileges</code>, <code>flush-hosts</code>,
<code>flush-logs</code>, <code>flush-tables</code> </td>
</tr>
<tr>
<td><strong>shutdown</strong> </td>
<td><code>shutdown</code> </td>
</tr>
<tr>
<td><strong>precess</strong> </td>
<td><code>processlist</code>, <code>kill</code> </td>
</tr>
</table>
<p><code>reload</code>命令告诉服务器再读入授权表,<code>refresh</code>命令清洗所有表并打开和关闭记录文件,<code>flush-privileges</code>是<code>reload</code>的一个同义词,其它<code>flush-*</code>命令执行类似<code>refresh</code>的功能,但是范围更有限,并且在某些情况下可能更好用。例如,如果你只是想清洗记录文件,<code>flush-logs</code>比<code>refresh</code>是更好的选择。
</p>
<p><code>shutdown</code>命令关掉服务器。 </p>
<p><code>processlist</code>命令显示在服务器内执行的线程的信息。<code>kill</code>命令杀死服务器线程。你总是能显示或杀死你自己的线程,但是你需要<strong>process</strong>权限来显示或杀死其他用户启动的线程。
</p>
<p>总的说来,只授予权限给需要他们的那些用户是一个好主意,但是你应该在授予某个权限时试验特定的警告:
<ul>
<li><strong>grant</strong>权限允许用户放弃他们的权限给其他用户。2个有不同的权限并有<strong>grant</strong>权限的用户可以合并权限。
</li>
<li><strong>alter</strong>权限可以用于通过重新命名表来推翻权限系统。 </li>
<li><strong>file</strong>权限可以被滥用在服务器上读取任何世界可读(world-readable,即任何人可读)的文件到一张数据库表,然后其内容能用<code>SELECT</code>被存取。
</li>
<li><strong>shutdown</strong>权限通过终止服务器可以被滥用完全拒绝为其他用户服务,
。 </li>
<li><strong>precess</strong>权限能被用来察看当前执行的查询的普通文本,包括设定或改变口令查询。
</li>
<li>在<code>mysql</code>数据库上的权限能被用来改变口令和其他存取权限信息。(口令被加密存储,所以一个恶意的用户不能简单地读取他们。然而,有足够的权限,同一个用户能用不同的一个代替一个口令。)</li>
</ul>
<p>有一些事情你不能用<strong>MySQL</strong>权限系统做到:
<ul>
<li>你不能明显地指定一个给定用户应该被拒绝存取。即,你不能明显地匹配一个用户并且然后拒绝连接。
</li>
<li>你不能指定一个用户有权创建立或抛弃一个数据库中的表,也不能创建或抛弃数据库本身。
</li>
</ul>
<h2><a NAME="Privileges" HREF="manual_toc.html#Privileges">6.6 权限系统工作原理</a></h2>
<p><strong>MySQL</strong>权限系统保证所有的用户可以严格地做他们假定被允许做的事情。当你连接一个<strong>MySQL</strong>服务器时,
你的身份由<strong>你从那连接的主机</strong>和<strong>你指定的用户名</strong>来决定,系统根据你的身份和<strong>你想做什么</strong>来授予权限。
</p>
<p><strong>MySQL</strong>在认定身份中考虑你的主机名和用户名字,是因为有很小的原因假定一个给定的用户在因特网上属于同一个人。例如,用户从<code>whitehouse.gov</code>连接的<code>bill</code>不必和从<code>mosoft.com</code>连接<code>bill</code>是同一个人。
<strong>MySQL</strong>通过允许你区分在不同的主机上碰巧有同样名字用户来处理它:你可以对从<code>whitehouse.gov</code>连接授与<code>bill</code>一个权限集,而为从<code>microsoft.com</code>的连接授予一个不同的权限集。
</p>
<p><strong>MySQL</strong>存取控制包含2个阶段:
<ul>
<li>阶段1:服务器检查你是否允许连接。 </li>
<li>阶段2:假定你能连接,服务器检查你发出的每个请求。看你是否有足够的权限实施它。例如,如果你从数据库中一个表精选(select)行或从数据库抛弃一个表,服务器确定你对表有<strong>select</strong>权限或对数据库有<strong>drop</strong>权限。
</li>
</ul>
<p>服务器在存取控制的两个阶段使用在<code>mysql</code>的数据库中的<code>user</code>、<code>db</code>和<code>host</code>表,在这些授权表中字段如下:
</p>
<table BORDER="Privileges" WIDTH="100%" NOSAVE="#101090">
<tr>
<td><strong>表名称</strong> </td>
<td><code>user</code> </td>
<td><code>db</code> </td>
<td><code>host</code> </td>
</tr>
<tr>
<td><strong>范围字段</strong> </td>
<td><code>Host</code> </td>
<td><code>Host</code> </td>
<td><code>Host</code> </td>
</tr>
<tr>
<td></td>
<td><code>User</code> </td>
<td><code>Db</code> </td>
<td><code>Db</code> </td>
</tr>
<tr>
<td></td>
<td><code>Password</code> </td>
<td><code>User</code> </td>
<td></td>
</tr>
<tr>
<td><strong>权限字段</strong> </td>
<td><code>Select_priv</code> </td>
<td><code>Select_priv</code> </td>
<td><code>Select_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Insert_priv</code> </td>
<td><code>Insert_priv</code> </td>
<td><code>Insert_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Update_priv</code> </td>
<td><code>Update_priv</code> </td>
<td><code>Update_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Delete_priv</code> </td>
<td><code>Delete_priv</code> </td>
<td><code>Delete_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Index_priv</code> </td>
<td><code>Index_priv</code> </td>
<td><code>Index_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Alter_priv</code> </td>
<td><code>Alter_priv</code> </td>
<td><code>Alter_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Create_priv</code> </td>
<td><code>Create_priv</code> </td>
<td><code>Create_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Drop_priv</code> </td>
<td><code>Drop_priv</code> </td>
<td><code>Drop_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Grant_priv</code> </td>
<td><code>Grant_priv</code> </td>
<td><code>Grant_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Reload_priv</code> </td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td><code>Shutdown_priv</code> </td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td><code>Process_priv</code> </td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td><code>File_priv</code> </td>
<td></td>
<td></td>
</tr>
</table>
<p>对存取控制的第二阶段(请求证实),如果请求涉及表,服务器可以另外参考<code>tables_priv</code>和<code>columns_priv</code>表。这些表的字段如下:
</p>
<table BORDER="Privileges" WIDTH="100%" NOSAVE="#101090">
<tr>
<td><strong>表名称</strong></td>
<td><code>tables_priv</code> </td>
<td><code>columns_priv</code> </td>
</tr>
<tr>
<td><strong>范围字段</strong> </td>
<td><code>Host</code> </td>
<td><code>Host</code> </td>
</tr>
<tr>
<td></td>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -