【问题标题】:MySQL User with select privileges can still update具有选择权限的 MySQL 用户仍然可以更新
【发布时间】:2015-03-15 10:41:36
【问题描述】:

我有一个带有 MySQL 数据库的 OpenShift 应用程序,我为其配置了 ODBC 连接,这样用户就可以将 Access 用作表的只读前端。我创建了这样一个用户,但他们能够从 Access 前端更新数据并反映在数据库中。这是我所做的:

我创建了一个名为“reports”的用户,被授予对一个模式“reviews”的只读访问权限。

GRANT SELECT ON reviews.* TO reports@'%' IDENTIFIED BY `password`;

当我跑步时

SELECT * FROM mysql.user WHERE user = 'reports';

我得到了所有的 N 和 0。我知道“Select_priv”没有“Y”,因为它不是全局选择 priv,仅在一个架构上,所以我认为没关系。

当我跑步时

SHOW GRANTS FOR 'reports'@'%';

我明白了

上授予使用权限。 TO 'reports'@'%' IDENTIFIED BY PASSWORD 'stringstringstring'
GRANT SELECT ON 'reviews'.* TO 'reports'@'%';

正如我所料。

SELECT * FROM db where User = 'reports';

|Host|Db |User |Select_priv|Insert_priv|Update_priv|...
|% |评论|报告|Y |N |N |...

但是当我进入 Access,编辑一些数据,然后 ssh 进入数据库并查看数据库时,UPDATES 正在工作。

我在 Access 中连接之前使用rhc port-forward -a applicationname,并使用rhc ssh applicationname 从服务器查看 MySQL。

【问题讨论】:

  • 您可能希望查看 mysqld 上还有哪些其他用户名可用。您可能还希望确保您的 ODBC dsn 指的是正确的用户名。我从经验中知道,这是非常容易出错的。连接您的 ODBC 用户,然后执行SHOW FULL PROCESSLIST
  • 我的 DSN 指的是正确的名称,但在我决定切换到只读帐户之前,Access 仍然(成功地)使用我最初设置 Access DB 的所有权限管理员帐户。似乎一旦你给它一个数据源,你就不能在不创建新的 Access DB 的情况下切换它。

标签: mysql sql ssh permissions odbc


【解决方案1】:

Access 中存在一个错误,如果您向其提供数据源,然后尝试更改它,它实际上不会放弃您的初始数据源,即使它已经出现。我最初使用 All Privileges 帐户设置了我的 Access DB,然后将数据源更改为只读帐户,但它继续在幕后使用我的 All Access 帐户。使用 odbcad32.exe 删除数据源证明了这一点,因为我刚刚遇到连接错误,即使它说我是通过我的有效只读帐户连接的。我从一开始就使用只读数据源创建了一个新的 Access DB,它按预期工作。

【讨论】:

    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多