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
    • 最新
    • 标签
主页 / server / 问题 / 1168128
Accepted
tilkov
tilkov
Asked: 2024-11-25 17:35:57 +0800 CST2024-11-25 17:35:57 +0800 CST 2024-11-25 17:35:57 +0800 CST

使用错误的用户执行的 MySQL 查询

  • 772

我正在使用用户“feedbackdev”连接到 MySQL,但查询是使用“feedback”执行的,它是同一服务器上的另一个用户。

root@board:~# mysql -u feedbackdev -p feedbackdev
Enter password: 

mysql> select user();
+-----------------------+
| user()                |
+-----------------------+
| feedbackdev@localhost | 
+-----------------------+


mysql> select rating, COUNT(*) AS rating_count from order_feedback_view where feedback_created_at >= '2024-10-26 09:01:29' group by rating;
ERROR 1143 (42000): SELECT command denied to user 'feedback'@'localhost' for column 'source_id' in table 'orders'

以下是用户可获得的赠款

mysql> show grants for 'feedbackdev'@'localhost';
+----------------------------------------------------------------------+
| Grants for feedbackdev@localhost                                     |
+----------------------------------------------------------------------+
| GRANT PROCESS, SUPER ON *.* TO `feedbackdev`@`localhost`             |
| GRANT SET_USER_ID ON *.* TO `feedbackdev`@`localhost`                |
| GRANT ALL PRIVILEGES ON `feedbackdev`.* TO `feedbackdev`@`localhost` |
+----------------------------------------------------------------------+
3 rows in set (0.00 sec)

mysql> show grants for 'feedback'@'localhost';
+---------------------------------------------------------------------------+
| Grants for feedback@localhost                                             |
+---------------------------------------------------------------------------+
| GRANT PROCESS, SUPER, REPLICATION CLIENT ON *.* TO `feedback`@`localhost` |
| GRANT FLUSH_TABLES ON *.* TO `feedback`@`localhost`                       |
| GRANT ALL PRIVILEGES ON `feedback`.* TO `feedback`@`localhost`            |
+---------------------------------------------------------------------------+
3 rows in set (0.00 sec)

MySQL 版本 8.0.40

mysql
  • 1 1 个回答
  • 48 Views

1 个回答

  • Voted
  1. Best Answer
    Nikita Kipriyanov
    2024-11-26T17:32:45+08:002024-11-26T17:32:45+08:00

    MySQL(以及其他 RDBMS)中的视图可用于对数据进行有限的访问,否则访问视图的用户将无法访问这些数据。为此,定义SQL SECURITY中有一个子句,可以将其设置为并将其设置为除打算从视图中选择的用户之外的某个用户。然后,必须仔细构建视图查询,以免泄露任何敏感信息,然后对其返回的数据的访问由视图本身上设置的权限控制。(它与存储过程和函数的工作方式相同,用于类似的目的。)DEFINER

    当您通过 导出 VIEW 时,有一个注意事项mysqldump:它会导出定义中存储的实际DEFINER值,并在重新加载时恢复该值,即使它是作为另一个用户加载的,或加载到属于另一个用户的数据库中。这就是您的情况,旧的定义者无权访问属于新用户的数据,因此当您尝试调用视图时,其访问被拒绝。

    有两种方法可以解决这个问题。第一种方法是不使用 转储定义器mysqldump,而是使用选项。然而,在重新加载转储期间,定义--skip-definer器将被重新设置给重新加载它的用户。

    第二种方法是使用 重新定义视图SQL SECURITY INVOKER,在这种情况下,视图的查询将始终以调用视图本身的用户的权限执行。对于这种情况,这将是更干净的解决方案,因为从逻辑上讲,这个视图似乎不应该用于提供对受保护信息的有限访问,它一开始就不应该用定义者安全性来定义。

    • 3

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve