mysql用户被删除

new*_*e14 5 mysql

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

Rol*_*DBA 4

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

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

CREATE USER root@localhost;
GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'whatever';
Run Code Online (Sandbox Code Playgroud)

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

如果你有 root@localhost 但仍然无法访问它,你可能必须像这样侵入它:

步骤01)像这样重新启动mysql

service mysql restart --skip-grant-tables --skip-networking
Run Code Online (Sandbox Code Playgroud)

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

# mysql
Run Code Online (Sandbox Code Playgroud)

步骤 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;
Run Code Online (Sandbox Code Playgroud)

步骤04)重新启动mysql

service mysql restart 
Run Code Online (Sandbox Code Playgroud)

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

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

试一试 !!!

更新 2012-04-10 11:28 美国东部时间

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

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

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

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

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

更新 2012-04-10 12:50 美国东部时间

在全新安装中,您只需运行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;
Run Code Online (Sandbox Code Playgroud)