mysql> SELECT Host, User FROM mysql.user WHERE User=”; 如果您想要删除本地匿名用户账户,以避免出现刚才谈到的问题,则需使用以下语句: mysql> DELETE FROM mysql.user WHERE Host=’localhost’ AND User=”; mysql> FLUSH PRIVILEGES; GRANT支持最长为60个字符的hostnames。数据库、表、列和子程序名称最长可为64个字符。Usernames最长可为16个字符。 注释:不能通过更改mysql.user表来改变usernames的允许长度。如果试图这么做,会导致出现不可预见的问题,可能会造成用户无法登录MySQL服务器。除了采用由MySQL公司提供的用于升级MySQL服务器的mysql_fix_privilege_tables原稿之外,请您不要以任何方式变更授权表。 对于表或列的权限是作为各个权限层级的逻辑OR权限被附加形成的。例如,如果mysql.user表指定一个用户拥有全局SELECT权限,则该权限不能被数据库、表或列层级的登录项定义。 可以按下列方法计算列权限: global privileges OR (database privileges AND host privileges) OR table privileges OR column privileges 在多数情况下,您只在一个权限层级下向用户授予权利,所以寿命通常不是那么复杂。有关权限检查规程的细节,请参见5.7节,“MySQL访问权限系统”。 如果您对一个在mysql.user表中不存在的username/hostname组合授予权限,则增加一个登录项并保持在此处,直到使用DELETE语句删除为止。换句话说,GRANT可以创建用户表登录项,但是REVOKE不会取消它们;您必须使用DROP USER或DELETE明确地操作。 如果创建了一个新的用户,或者如果您拥有全局授权权限,则用户密码被设置为由IDENTIFIED BY子句指定的密码(如果给定了一个)。如果用户已拥有了一个密码,则此密码被新密码替代。 警告:如果您创建了一个新用户,但是不指定IDENTIFIED BY子句,则用户没有 密码。这是很不安全的。不过,您可以启用NO_AUTO_CREATE_USER SQL模式,来防止GRANT创建一个新用户(否则GRANT会这么做),除非给定了IDENTIFIED BY来为新用户提供一个密码。 使用SET PASSWORD语句也可以设置密码。请参见13.5.1.5节,“SET PASSWORD语法”。 在IDENTIFIED BY子句中,密码应被作为文字密码只被给定。没有必要使用PASSWORD()函数,因为该函数用于SET PASSWORD语句。例如: GRANT … IDENTIFIED BY ‘mypass’; 如果您不想以明白的文字发送密码,并且您知道PASSWORD()返回给密码的混编值,则您可以指定混编值,前面加入关键词PASSWORD: GRANT … IDENTIFIED BY PASSWORD ‘*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4′; 在一个C程序中,您可以通过使用make_scrambled_password() C API函数得到混编值。 如果您为一个数据库授予权限,则在mysql.db表中,会根据需要创建登录项。如果使用REVOKE删除了所有的数据库权限,则本登录项被删除。 如果一个用户不拥有表权限,则当用户申请表清单时(例如,使用SHOW TABLES语句),表名称不显示。 SHOW DATABASES权限允许账户通过发布SHOW DATABASE语句来观看数据名称。不拥有此权限的账户只能看到他们拥有部分权限的数据库,并且如果使用–skip-show-database选项启动服务器,则根本不能使用本语句。 WITH GRANT OPTION子句给予用户能力,可以在指定的权限层级,向其它用户给定其拥有的任何权限。您应该留心您给予了谁GRANT OPTION权限,因为拥有不同权限的两个用户可以联合使用权限! 您不能向其它用户授予您自己没有的权限;GRANT OPTION权限只允许您赋予您自己拥有的权限。 要注意,当您在某个特定权限层级向一个用户授予GRANT OPTION权限时,用户拥有的该层级的任何权限(或未来将被给定的权限)也可以由该用户授予。假设您向一个用户赋予了数据库INSERT权限。如果您然后赋予数据库SELECT权限,并指定了WITH GRANT OPTION,则该用户不仅可以向其它用户给予SELECT权限,还可以给予INSERT。如果您然后向用户授予数据库UPDATE权限,则用户可以授予INSERT, SELECT和UPDATE。 您不应该向一个常规用户授予ALTER权限。如果您这么做,则该用户可以尝试通过对表重新命名来破坏授权系统! The MAX_QUERIES_PER_HOUR count, MAX_UPDATES_PER_HOUR count, and MAX_CONNECTIONS_PER_HOUR count options limit the number of queries, updates, and logins a user can perform during any given one-hour period. If count is 0 (the default), this means that there is no limitation for that user. MAX_QUERIES_PER_HOUR count, MAX_UPDATES_PER_HOUR count和MAX_CONNECTIONS_PER_HOUR count选项限制了在任何给定的一小时期间,用户可以执行的查询、更新和登录的数目。如果count是0(默认值),这意味着,对该用户没有限制。 MAX_USER_CONNECTIONS count选项限制了账户可以同时进行的连接的最大数目。如果count是0(默认值),则max_user_connections系统可以决定该账户同时连接的数目。 注释:要对一个原有的用户指定任何这类资源限制型选项,同时又不影响原有的权限,需使用GRANT USAGE ON *.* … WITH MAX_…。 见5.8.4节,“限制账户资源”。 除了根据username和密码进行常规鉴定外,MySQL还可以检查X509证明属性。要为MySQL账户指定与SSL有关的选项,需使用GRANT语句的REQUIRE子句。(要了解有关在MySQL中使用SSL的背景信息,请参见5.8.7节,“使用安全连接”。) 对于一个给定的账户,有多种可能性可以限制连接类型: · 如果账户没有SSL或X509要求,并且如果username和密码是有效的,则允许不加密连接。但是,如果客户端有正确的证明和关键文件,则根据客户端的选择,也可以使用加密连接。 · REQUIRE SSL选项用于告知服务器,对于该账户只允许SSL加密连接。注意,如果有允许任何非SSL连接的访问控制记录,则本选项可以被忽略。 · mysql> GRANT ALL PRIVILEGES ON test.* TO ‘root’@'localhost’ · -> IDENTIFIED BY ‘goodsecret’ REQUIRE SSL; · REQUIRE X509意味着客户端必须拥有一个有效证明,除非不需要确切的证明、发布者和主题。唯一的要求是,应可以使用CA证明其中之一来验证签名。 · mysql> GRANT ALL PRIVILEGES ON test.* TO ‘root’@'localhost’ · -> IDENTIFIED BY ‘goodsecret’ REQUIRE X509; · REQUIRE ISSUER ‘issuer’用于对连接尝试进行限定,客户端必须出示一个由CA’issuer’发布的有效的X509证明。如果客户端出示的证明是有效的,但是有一个不同的发布者,则服务器会拒绝连接。使用X509证明就意味着要加密,所以在这种情况下,SSL选项是不必要的。 · mysql> GRANT ALL PRIVILEGES ON test.* TO ‘root’@'localhost’ · -> IDENTIFIED BY ‘goodsecret’ · -> REQUIRE ISSUER ‘/C=FI/ST=Some-State/L=Helsinki/ · O=MySQL Finland AB/CN=Tonu Samuel/Email=tonu@example.com’; 注意,ISSUER值应被作为一个单一字符串输入。 · REQUIRE SUBJECT ‘subject’用于对连接尝试进行限定,客户端必须出示一个包含主题subject的有效的X509证明。如果客户端出示的证明是有效的,但是有一个不同的主题,则服务器会拒绝连接。 · mysql> GRANT ALL PRIVILEGES ON test.* TO ‘root’@'localhost’ · -> IDENTIFIED BY ‘goodsecret’ · -> REQUIRE SUBJECT ‘/C=EE/ST=Some-State/L=Tallinn/ · O=MySQL demo client certificate/ · CN=Tonu Samuel/Email=tonu@example.com’; 注意,SUBJECT值应被作为一个单一字符串输入。 · 需要REQUIRE CIPHER ‘cipher’来确认使用了密码和足够长度的关键字。如果使用了采用短型加密关键字的旧算法,SSL本身会比较脆弱。使用本选项,您可以要求使用特定的密码方法来许可一个连接。 · mysql> GRANT ALL PRIVILEGES ON test.* TO ‘root’@'localhost’ · -> IDENTIFIED BY ‘goodsecret’ · -> REQUIRE CIPHER ‘EDH-RSA-DES-CBC3-SHA’; SUBJECT, ISSUER和CIPHER选项可以在REQUIRE子句中结合,如下: mysql> GRANT ALL PRIVILEGES ON test.* TO ‘root’@'localhost’ -> IDENTIFIED BY ‘goodsecret’ -> REQUIRE SUBJECT ‘/C=EE/ST=Some-State/L=Tallinn/ O=MySQL demo client certificate/ CN=Tonu Samuel/Email=tonu@example.com’ -> AND ISSUER ‘/C=FI/ST=Some-State/L=Helsinki/ O=MySQL Finland AB/CN=Tonu Samuel/Email=tonu@example.com’ -> AND CIPHER ‘EDH-RSA-DES-CBC3-SHA’; 注意,SUBJECT和ISSUER值各自应被作为一个单一字符串输入。 在REQUIRE各选项之间,AND关键词是自选的。 选项的顺序无所谓,但是选项不能被指定两次。 当mysqld启动后,所有的权限被读入存储器中。要了解详细说明,请参见5.7.7节,“权限更改何时生效”。 注意,如果您正在使用表权限或列权限,即使只对一个用户使用,服务器也会对所有用户检查表权限和列权限,这会略微降低MySQL的速度。与此类似,如果您对某些用户限制查询、更新或连接的数目,则服务器必须监测这些值。 标准SQL版本和MySQL版本的GRANT之间的最大区别是: · 在MySQL中,权限与hostname和username的组合有关,与单一的username无关。 · 标准SQL不拥有全局层级或数据库层级权限,也不支持MySQL支持的所有权限类型。 · MySQL不支持标准SQL TRIGGER或UNDER权限。 · 标准SQL权限以一种分等级的方式进行组织。如果您取消一个用户,则用户被授予的所有权限都被撤销。在MySQL中,如果您使用DROP USER,也会如此。请参见13.5.1.2节,“DROP USER语法”。 · 在标准SQL中,当您取消一个表时,对一个表的所有权限会被撤销。在标准SQL中,当您撤销一个权限时,根据该权限被授予的所有权限也会被撤销。在MySQL中,只有使用明确的REVOKE语句,或通过操作存储在MySQL授权表中的值,才能取消权限。 · 在MySQL中,可以只对一个表中的部分列拥有INSERT权限。在此情况下,如果您忽略您不拥有INSERT权限的那些列,,您仍然可以对表执行INSERT语句。如果没有启用严格的SQL模式,则被忽略的列被设置为各自隐含的默认值。在严格模式下,如果某个被忽略的列没有默认值,则该语句被拒绝。5.3.2节,“SQL服务器模式”对严格模式进行了讨论。13.1.5节,“CREATE TABLE语法”对隐含默认值进行了讨论。 您不拥有INSERT权限的列被设置为各自的默认值。标准SQL要求您拥有所有列的INSERT权限。 在MySQL中,如果您只拥有一个表中的部分列的INSERT权限,同时,如果您从INSERT语句中忽略您不拥有权限的列,则您仍然可以对表执行INSERT语句;那些列将被设置为各自的默认值。在严格模式下(即当sql_mode=’traditional’时,如果某些被忽略的列没有默认值,则INSERT语句将被拒绝。

原文转自:http://hi.baidu.com/%CC%EC%C0%B6_bluesky/blog/item/ec04f0df67a2613e5882dd7f.html

没事您就随便看看吧