尝试授予特权时,拒绝用户'root'@'localhost'的访问如何授予特权?

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 尝试授予特权时,拒绝用户'root'@'localhost'的访问如何授予特权?

如何解决尝试授予特权时,拒绝用户'root'@'localhost'的访问如何授予特权??
注意输出

SHOW GRANTS FOR 'root'@'localhost';
没有说“ ALL PRIVILEGES”,而是不得不说出root @ localhost的含义。

授予所有特权将失败,因为用户无法授予他/她没有的特权,并且服务器似乎认为这里不存在某些东西…

现在,接下来缺少什么呢?

在我的系统上,我得到以下信息:

MysqL> select version();
version()
5.5.21-log

1 row in set (0.00 sec)

MysqL> SHOW GRANTS FOR 'root'@'localhost';
Grants for root@localhost
GRANT ALL PRIVILEGES ON . TO 'root'@'localhost' WITH GRANT OPTION
GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION

2 rows in set (0.00 sec)
MysqL> SELECT * FROM MysqL.user WHERE User='root' and Host='localhost'\G
1. row **

              Host: localhost
              User: root
          Password: 
       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

Create_tablespace_priv: Y <----------------------------- new column in 5.5

          ssl_type: 
        ssl_cipher: 
       x509_issuer: 
      x509_subject: 
     max_questions: 0
       max_updates: 0
   max_connections: 0

max_user_connections: 0

            plugin: <------------------------------- new column in 5.5

authentication_string: <------------------------------- new column in 5.5
1 row in set (0.00 sec)
5.5中还有一些新表,例如MysqL.proxies_user:确保您拥有它们。

安装全新的MysqL服务器实例时,安装脚本将创建具有适当结构的所有MysqL。*表。

从旧版本升级时,请确保使用正确的升级过程(MysqL_upgrade),它将添加缺少的表/列。

这只是一个猜测,但似乎该实例的MysqL_upgrade未完成,导致出现了这种现象。

解决方法
我看过许多类似的问题,因此表明我已经检查了基础知识。当然,这并不意味着我没有错过任何显而易见的东西。:-)

我的问题是:为什么我拒绝具有特权的用户访问权限,而我却已经在其中输入密码并被授予访问权限?(为了完整起见,我尝试输入错误的密码只是为了确保MySQL客户端在程序启动时拒绝我访问。)

背景:

通过ssh登录到运行MySQL服务器的计算机的外壳,我以root用户身份登录:

[myname@host ~]$ mysql -u root -p -hlocalhost
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 62396
Server version: 5.5.18-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
太棒了 我对类似问题的答案的阅读表明,我应该确保特权与授予表中的权限保持最新

mysql> FLUSH PRIVILEGES;
Query OK,0 rows affected (0.00 sec)
mysql>
接下来,请确保我是我认为的我:

mysql> SELECT user();
user()
root@localhost

1 row in set (0.00 sec)
…真的 真的很 确定:

mysql> SELECT current_user();
current_user()
root@localhost

1 row in set (0.00 sec)
mysql>
到目前为止,一切都很好。现在我有什么特权?

mysql> SHOW GRANTS FOR 'root'@'localhost';
Grants for root@localhost
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,RELOAD,SHUTDOWN,PROCESS,FILE,REFERENCES,INDEX,ALTER,SHOW DATABASES,SUPER,CREATE TEMPORARY TABLES,LOCK TABLES,EXECUTE,REPLICATION SLAVE,REPLICATION CLIENT,CREATE VIEW,SHOW VIEW,CREATE ROUTINE,ALTER ROUTINE,CREATE USER,EVENT,TRIGGER ON . TO 'root'@'localhost' IDENTIFIED BY PASSWORD '[OBSCURED]' WITH GRANT OPTION

1 row in set (0.00 sec)
现在有点难以理解,所以让我们尝试这种方式(您还将看到有一个非本地“ root”用户):

mysql> SELECT * FROM mysql.user WHERE User='root'\G
1. row **

             Host: localhost
             User: root
         Password: *[OBSCURED]
      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
  max_connections: 0

max_user_connections: 0
2. row **

             Host: [HOSTNAME].com
             User: root
         Password: *[OBSCURED]
      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
  max_connections: 0

max_user_connections: 0
2 rows in set (0.00 sec)
太棒了!MySQL认为我是root @ localhost,而root @ localhost拥有所有这些特权。这意味着我应该能够做我想做的事,对不对?

mysql> GRANT ALL PRIVILEGES ON . TO 'steves'@'[hostname].com' IDENTIFIED BY '[OBSCURED]' WITH GRANT OPTION;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
我怎么能搞砸这个基本的东西?

旁注:对于任何想建议我没有名为root的用户都具有所有特权的用户,这很好,一旦我可以给另一个用户一些特权,我将考虑做一些事情。

谢谢!

声明:地推任务网所有作品(图片、文字)均由用户自行上传分享,仅供网友学习交流。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 Shell Linux
用户和用户组
本文介绍了Linux系统中的用户账户和组的基本概念,包括普通用户和超级用户(root)的定义和区别,以及组的概念和作用。文章还详细描述了用户账户和组的相关文件(如/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow)的结构和内容,并提供了创建和删除用户账户及组的基本命令和选项。
101 1
|
6月前
|
Linux 数据处理 数据库
深入解析Linux命令id:理解用户身份与权限
`id`命令在Linux中用于显示用户身份(UID, GID和附加组)。它查看系统用户数据库获取信息。参数如`-u`显示UID,`-g`显示GID,`-G`显示附加组,结合`-n`显示名称而非ID。用于确认命令执行者身份,确保权限正确。在脚本中使用时注意权限管理,遵循最小权限原则。
|
7月前
|
Shell Linux 数据安全/隐私保护
用户,用户组相关操作
用户,用户组相关操作
62 0
|
Linux 编译器 数据安全/隐私保护
【Linux】下的权限管理/关于root用户和普通用户的区别/不同用户的访问权限有什么不同?/到底什么是粘滞位?
1.Linux下用户的分类 Linux下有两种用户:超级用户(root)、普通用户。 超级用户:可以再linux系统下做任何事情,不受限制 普通用户:在linux下做有限的事情。 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
|
监控 NoSQL 安全
|
关系型数据库 MySQL 测试技术
MySQL 授予普通用户PROCESS权限
在MySQL中如何给普通用户授予查看所有用户线程/连接的权限,当然,默认情况下show processlist是可以查看当前用户的线程/连接的。     mysql> grant process on MyDB.
1646 0
|
Shell Linux 数据安全/隐私保护
|
Shell 数据安全/隐私保护 Linux