MySQL 具有 select 权限的用户仍然可以更新

MySQL User with select privileges can still update

我有一个带有 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' 因为它不是全局 select priv,只在一个模式上,所以我认为没问题。

当我运行

SHOW GRANTS FOR 'reports'@'%';

我明白了

GRANT USAGE ON . 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|...
|% |reviews|reports|Y |N |N |...

但是当我进入 Access,编辑一些数据,然后通过 ssh 进入数据库并查看数据库时,更新正在运行。

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

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