php - 暂时禁用 MySQL 连接 session 与 PHP PDO 的写入(插入、更新等)?

标签 php mysql database pdo

普通 MySQL 用户(SELECT、INSERT、UPDATE)是否有任何方法可以在特定连接 session 中以暂时较少的权限(仅 SELECT)连接到服务器?

我问这是因为我们的服务器上有很多 MySQL 用户管理着数以千计的数据库。每个用户都将负责,例如50个数据库。现在他们需要创建 API 并发布对数据库的公共(public)访问权限,最好使用只有 SELECT 权限的 MySQL 用户来访问数据库。我们可以为此目的创建一个全局用户,然后它将有权访问所有数据库。

因此最好只使用 SELECT 权限来限制对某些数据库的访问。

有什么方法可以使用现有的 MySQL 用户,然后仅在连接基础上修改其权限(撤销 INSERT、UPDATE)?

更新

我知道如何撤销一般 MySQL 用户的权限,但我需要的是只撤销特定连接 session 中的权限,这样撤销不会影响同一用户的其他 MySQL 连接。

有什么想法吗?还是根本不可能?

最佳答案

https://dev.mysql.com/doc/refman/5.7/en/privilege-changes.html说:

A grant table reload affects privileges for each existing client connection as follows:

  • Table and column privilege changes take effect with the client's next request.

  • Database privilege changes take effect the next time the client executes a USE db_name statement.

  • Global privileges and passwords are unaffected for a connected client. These changes take effect only for subsequent connections.

换句话说,在每次请求时都会检查权限——即在每次查询之前。每个服务器的内存中只有一个权限副本,所有 session 都检查同一组加载的权限。该用户的不同 session 无法强制执行不同的权限。

在我之前开发的一个应用程序中,我们解决了一个与您描述的问题类似的问题。我们为每个应用程序创建了两个 MySQL 用户:一个对一个数据库具有完全权限,另一个对那个数据库具有只读权限。

应用程序将使用一组凭据或另一组凭据登录,该选择将决定它拥有哪些特权。

关于php - 暂时禁用 MySQL 连接 session 与 PHP PDO 的写入(插入、更新等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48180722/

相关文章:

php - Windows 7 上的 Zend PHP 上传文件权限

php - WooCommerce 订单操作 Metabox 下拉列表中缺少自定义操作

php - 无法从 mysql.proc 加载。该表可能已损坏 #1728

php - Android/PHP - 通过网络服务器发送 txt 文件?

php - 用PHP从mySQL数据库中获取一个值并保存为变量

.net - Oracle 更新挂起

mysql - 数据库将 CSV 加载到多个表中

php - MySQL查询和数据调试

javascript - 如何在php中将数据插入到现有的html表中?

database - 连接失败 - 错误 [HY000] [MySQL][ODBC 3.51 驱动程序]无法连接到 'localhost' (10061) 上的 MySQL 服务器