为什么GRANT不在MySQL中工作?

时间:2010-10-07 23:41:51

标签: mysql grant

我正在摸不着头脑,因为我看到大量的帮助网站显示如何创建MySQL用户并授予权限,但由于某种原因它只对我不起作用。我试用了安装了最新MySQL版本的WinXP和MacBook Pro笔记本电脑。

以下是我使用WordPress时的一个示例。实际的数据库是不同但相同的问题。

以下是步骤:

mysql> mysql -uroot -p<password>
mysql> CREATE DATABASE wwordpress;
mysql> CREATE USER 'www'@'localhost' IDENTIFIED BY 'basic';

查询正常,0行受影响(0.14秒)

mysql> GRANT INSERT ON wordpress.* TO 'www'@'localhost' IDENTIFIED BY 'basic';

查询OK,0行受影响(0.00秒)

mysql> FLUSH PRIVILEGES;

查询正常,0行受影响(0.03秒)

mysql> SELECT * FROM mysql.user WHERE User='www' \G
*************************** 1. row ***************************
                 Host: localhost
                 User: www
             Password: *E85C94AF0F09C892339D31CF7570A970BCDC5805
          Select_priv: N
          Insert_priv: N
          Update_priv: N
          Delete_priv: N
          Create_priv: N
            Drop_priv: N
          Reload_priv: N
        Shutdown_priv: N
         Process_priv: N
            File_priv: N
           Grant_priv: N
      References_priv: N
           Index_priv: N
           Alter_priv: N
         Show_db_priv: N
           Super_priv: N
Create_tmp_table_priv: N
     Lock_tables_priv: N
         Execute_priv: N
      Repl_slave_priv: N
     Repl_client_priv: N
     Create_view_priv: N
       Show_view_priv: N
  Create_routine_priv: N
   Alter_routine_priv: N
     Create_user_priv: N
           Event_priv: N
         Trigger_priv: N
             ssl_type:
           ssl_cipher:
          x509_issuer:
         x509_subject:
        max_questions: 0
          max_updates: 0
      max_connections: 0
 max_user_connections: 0
1 row in set (0.00 sec)

mysql>

如您所见,“Insert_priv:N”应为“Y”。

有什么建议吗?

提前致谢。

4 个答案:

答案 0 :(得分:39)

您选择的是全局特权。 但是你给了数据库(和主机,但这并不重要)特定的权限。

GRANT INSERT ON wordpress .* TO 'www'@'localhost' IDENTIFIED BY 'basic';

theese权限存储在db表中。

只是为了指出正确的方向:

SHOW GRANTS FOR 'www'@'localhost'

http://dev.mysql.com/doc/refman/5.0/en/show-grants.html

答案 1 :(得分:11)

这不是存储大多数用户GRANTed权限的地方 - 尝试

SHOW GRANTS FOR 'www'@'localhost'

以查看特定于数据库的权限。 (如果适用于所有数据库,授权只会显示在用户表中。)

这是MySQL中how permissions are stored的一个(相当古老的)循序渐进的细节 - 我认为事情没有太大变化。

答案 2 :(得分:2)

这应该有效:

GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';

答案 3 :(得分:1)

如果你试图对用户可以编辑或插入或删除的页面进行一些限制,你需要选择Y或N,你需要查看mysql.db或mysql.tables_priv表...这个表使用Ys和Ns自动更新,因为它们仅用于显示用户对表或列的特权,而不是mysql.user,其目的是显示某个用户可以登录(创建连接)到数据库中。