what 权限应用的级别。权限可以是全局的(适用于所有数据库和所有的表)、数据库专有的(适用于某个数据库中的所有表),或表专有的。可以通过指定一个C O L U M N S子句将权限授予特定的列。
user 使用权限的用户。它由用户名和主机名组成。在MySQL中,不仅指定谁进行连接,还要指定从哪里连接。它允许您拥有两个带有相同名字的、从不同位置连接的用户。MySQL允许在它们之间进行区别并相互独立地分配权限。
GRANT RELOAD ON *.* TO flush@localhost IDENTIFIEDBY "flushpass"
复制代码
通常授予管理权限应该是保守的,因为具有这些权限的用户可能影响服务器的操作。
数据库级的权限适用于特定数据库中的所有表。这些权限使用ON db_name.* 子句进行授予:
GRANT ALL ON samp_db.* TO bill@racer.snake.net IDENTIFIEDBY "rock"
GRANT SELECT ON menagerie.* TO ro_user@% IDENTIFIEDBY "dirt"
复制代码
第一条语句将bill 的所有权限授予samp_db 数据库的任何表。第二条语句创建一个限制访问的用户r o _ user(只读用户),它可以访问menagerie 数据库的所有表,但只能读取。也就是说,该用户只能发布SELECT 语句。
在授权表项中指定本地主机名
如果您使用服务器的主机名而非localhost,通常存在从该服务器主机连接的问题。这可能是由于在授权表中指定名字的方法和名字分解器例程( name reslover routine)向程序报告名字的方法之间的错误匹配。如果分解器报告了一个非限定的名字(如pit-viper),但授权表包含了具有全限定的名字的项(如pit-viper.snake.net,反之亦然),则发生错误匹配。
GRANT ALL ON samp_db.* TO boris@localhost IDENTFIEDBY "ruby"
GRANT ALL ON samp_db.* TO fred@ares.mars.net IDENTFIEDBY "quartz"0
复制代码
通常,不要给用户授予比实际需要更大的权限。但是,当您想要使用户能够创建存储中间结果的临时表,而又不允许用户在包含有他们不能修改的数据的数据库中这样做时,就有了要在数据库上授予相当多的许可权限的理由。您可以建立一个单独的数据库(笔者称它为t m p)并授予用户该数据库的所有权限。例如,如果想要mars.net 域的主机中的任何用户都能够使用tmp 数据库,可发布下列GRANT语句:
GRANT ALL ON samp_db.* TO boris@localhost IDENTFIEDBY "ruby"
GRANT ALL ON samp_db.* TO fred@ares.mars.net IDENTFIEDBY "quartz"1