AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 16215
Accepted
newbie14
newbie14
Asked: 2012-04-09 10:54:07 +0800 CST2012-04-09 10:54:07 +0800 CST 2012-04-09 10:54:07 +0800 CST

mysql用户被删除

  • 772

我在 5.1.52 中有一个带有 mysql 的新 centos 6.2。然后我看到了两个空的用户名,然后我删除了它,然后我看到 3 个 root 用户删除了它并创建了一个像这样的 CREATE USER 'root'@'%' IDENTIFIED BY ' ** ' ;。但是当我现在以 root 身份进入我的 phpMyAdmin 时,我无法创建新数据库。我在这里做错了什么?

mysql
  • 3 3 个回答
  • 15125 Views

3 个回答

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2012-04-10T10:00:31+08:002012-04-10T10:00:31+08:00

    您的问题源于首先删除所有root用户。

    当您使用创建用户时CREATE USER,它只需在 mysql.user 表中输入一个 rwo。之后您需要立即发出此命令:

    CREATE USER root@localhost;
    GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'whatever';
    

    如果您不立即发出 GRANT,则所有 db 权限都将被禁用(即在 mysql.user 表中,update_priv='N'、delete_priv='N' 等)

    如果你有 root@localhost 并且仍然无法访问它,你可能不得不像这样侵入它:

    STEP 01) 像这样重启mysql

    service mysql restart --skip-grant-tables --skip-networking
    

    STEP 02)从命令行输入mysql(此时不需要密码)

    # mysql
    

    步骤 03) 做desc mysql.user

    • 您将看到 MySQL 4.1 的 17 行
    • 您将看到 MySQL 5.0 的 37 行
    • 您将看到 MySQL 5.1 的 39 行
    • 您将看到 MySQL 5.5 的 42 行

    您将不得不调整每个权限,因为 GRANT 命令不起作用将skip-grant-tables被启用

    例子

    对于 MySQL 5.1,您可以输入一个新的 root@localhost,其密码为“whatever”,如下所示:

    DELETE FROM mysql.user WHERE user='root' AND host='localhost';
    INSERT INTO mysql.user SET
                      Host = 'localhost',
                      User = 'root',
                  Password = PASSWORD('whatever'),
               Select_priv = 'Y',
               Insert_priv = 'Y',
               Update_priv = 'Y',
               Delete_priv = 'Y',
               Create_priv = 'Y',
                 Drop_priv = 'Y',
               Reload_priv = 'Y',
             Shutdown_priv = 'Y',
              Process_priv = 'Y',
                 File_priv = 'Y',
                Grant_priv = 'Y',
           References_priv = 'Y',
                Index_priv = 'Y',
                Alter_priv = 'Y',
              Show_db_priv = 'Y',
                Super_priv = 'Y',
     Create_tmp_table_priv = 'Y',
          Lock_tables_priv = 'Y',
              Execute_priv = 'Y',
           Repl_slave_priv = 'Y',
          Repl_client_priv = 'Y',
          Create_view_priv = 'Y',
            Show_view_priv = 'Y',
       Create_routine_priv = 'Y',
        Alter_routine_priv = 'Y',
          Create_user_priv = 'Y',
                Event_priv = 'Y',
              Trigger_priv = 'Y',
                  ssl_type = '',
                  ssl_cipher = '',
                 x509_issuer = '',
                x509_subject = '',
               max_questions = 0,
                 max_updates = 0;
    

    STEP 04) 重启mysql

    service mysql restart 
    

    您可以使用密码“whatever”从此处以 root@localhost 身份登录。

    随意用您想要的密码替换任何内容。

    试试看 !!!

    更新 2012-04-10 11:28 EDT

    当您进行全新安装时,您将在 mysql.user 表中看到匿名用户。匿名用户是空白的用户。立即删除它们,因为这可能会带来安全风险!

    原因如下:匿名用户可以访问前 4 个字母为的任何数据库test。您可以在测试数据库中执行大量 CRUD 密集型操作。您可能还想将测试数据库重命名为完全不同的名称。请阅读这些链接,因为我之前在 DBA StackExchange 中已经解决了这个问题。

    • 无法从 mysql.user 中删除匿名用户

    • 这是一组正常的 MySQL 权限吗?

    要确认是否需要这样做,请注意MySQL 5.0 认证学习指南在第 498 页第 6 段的要点中所说的内容:

    在 Unix 上,MySQL 带有一个 mysql_secure_installation 脚本,它可以在您的安装中执行一些有用的与安全相关的操作。该脚本具有以下功能:

    • 为 root 帐户设置密码
    • 删除任何可远程访问的根帐户。
    • 删除匿名用户帐户。这提高了安全性,因为它可以防止任何人以 root 身份从远程主机连接到 MySQL 服务器。结果是任何想要以 root 身份连接的人都必须首先能够登录服务器主机,这提供了额外的攻击屏障。
    • 删除测试数据库(如果您删除匿名帐户,您可能还想删除他们有权访问的测试数据库)。

    更新 2012-04-10 12:50 EDT

    在全新安装上,您只需运行mysql_secure_installation。如果您已经加载了用户,您可以自己运行项目符号(假设您想将它们设置为 myckrit。如果您不确定 mysql_secure_installation 在做什么,只需运行这些命令):

    UPDATE mysql.user SET password=password('myckrit') WHERE user='root' AND password='';
    DELETE FROM mysql.user WHERE host='%';
    DELETE FROM mysql.user WHERE user='';
    DELETE FROM mysql.db WHERE LEFT(db,4) = 'test';
    FLUSH PRIVILEGES;
    
    • 4
  2. Derek Downey
    2012-04-09T16:56:14+08:002012-04-09T16:56:14+08:00

    要恢复 root 访问权限,请停止您的服务器并使用该--skip-grant-tables选项启动它。

    如果 phpMyAdmin 允许您登录(无需密码),或者您有命令行访问权限,请连接并发出 ( mysql -uroot -h127.0.0.1):

    CREATE USER root@localhost IDENTIFIED BY 'xxx';
    UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root' AND Host='localhost';
    FLUSH PRIVILEGES;
    

    注销,然后以 root@localhost ( mysql -uroot -hlocalhost -p) 身份连接,输入您的密码并

    GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost`;
    DROP USER root@`%`;
    FLUSH PRIVILEGES;
    

    你不想在任何主机上root!此外,如果您仍然启用网络,您将希望尽快执行此操作。

    • 2
  3. dabest1
    2012-04-10T09:45:17+08:002012-04-10T09:45:17+08:00

    您需要为 root 帐户授予适当的权限,而不仅仅是创建它。MySQL 自己并不知道您想要一个超级用户帐户。

    CREATE USER 'root'@'%' IDENTIFIED BY '*';
    GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
    

    You should use the appropriate @'host'option appropriate for your situation. 如果你不需要远程管理这个数据库,那么你应该使用@'localhost'.

    更新

    如果您没有足够的权限来授予新权限,您可以尝试几个选项。

    1. 尝试按照 Rolando 的说明进行操作,但要替换一些步骤。看起来他有关于 Windows 的说明,显示如何重新启动 MySQL 服务。代替 Rolando 的步骤 1,执行以下操作:停止 MySQL。然后使用这些选项启动 MySQL /usr/bin/mysqld_safe --skip-grant-tables --skip-networking --defaults-file=/etc/my.cnf &> /dev/null &(根据您的环境需要替换路径和文件名)。

    2. 用您拥有完全超级用户权限的另一个 MySQL 实例中的相同文件替换 mysql 目录和所有文件 - 该目录包含 MySQL 系统表,例如 user、host、db、tables_priv 等。在执行此操作之前,请确保备份您的数据库如果它包含任何重要数据。如果你有一个备份副本,你可能会替换 mysql 目录。

    • 2

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve