【问题标题】:Why is GRANT not working in MySQL?为什么 GRANT 在 MySQL 中不起作用?
【发布时间】:2011-04-22 15:37:45
【问题描述】:

我在这个问题上摸不着头脑,因为我看到大量的帮助网站展示了如何创建 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';

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

mysql> FLUSH PRIVILEGES;

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

mysql> SELECT * FROM mysql.user WHERE User='www' \G
****************************** 1. 行 ************************ ******* 主机:本地主机 用户:www 密码:*E85C94AF0F09C892339D31CF7570A970BCDC5805 Select_priv:N 插入隐私:N 更新隐私:N 删除隐私: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 超级隐私:N 创建_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 创建用户隐私:N Event_priv:N Trigger_priv:N ssl_type: ssl_cipher: x509_issuer: x509_主题: 最大问题:0 最大更新:0 最大连接数:0 最大用户连接数:0 一组中的 1 行(0.00 秒) mysql>

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

有什么建议吗?

提前致谢。

【问题讨论】:

    标签: mysql grant


    【解决方案1】:

    是的,我同意我创建了 2 个用户并授予他们对数据库的所有权限,但不知何故,只有一个用户将获得升级的权限,无论我做什么,第二个用户都不会获得权限,尽管我尝试过以与第一个用户完全相同的方式向用户授予权限,然后我刷新了权限

    【讨论】:

      【解决方案2】:

      您选择的是全局权限。 但是,您正在授予数据库(和主机,但这无关紧要)特定权限。

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

      这些权限存储在db 表中。

      只是为了给你指明正确的方向:

      SHOW GRANTS FOR 'www'@'localhost'
      

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

      【讨论】:

        【解决方案3】:

        这应该可行:

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

        【讨论】:

        • 我知道这是一个例子,但它应该是database\_name。您需要转义下划线,因为数据库名称是模式匹配。
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          这不是存储最多用户授予权限的地方 - 试试

          SHOW GRANTS FOR 'www'@'localhost'
          

          改为查看特定于数据库的权限。 (如果授权是针对所有数据库的,它只会出现在用户表中。)

          这是 MySQL 中how permissions are stored 的(相当陈旧的)分步详细信息 - 我认为情况没有太大变化。

          【讨论】:

          猜你喜欢
          • 2021-09-03
          • 1970-01-01
          • 2017-12-17
          • 2017-11-06
          • 2013-05-03
          • 1970-01-01
          • 2012-05-21
          • 2018-01-29
          • 1970-01-01
          相关资源
          最近更新 更多