【问题标题】:sql open connection in read only modesql以只读模式打开连接
【发布时间】:2012-05-01 17:22:27
【问题描述】:

这个问题是出于好奇。我在谷歌上搜索过,但没有得到任何线索。

假设用户对 MySQL 数据库具有完全的读/写权限。我想知道,有没有办法(连接字符串中的一些参数)以只读模式通过相同的用户名和密码连接到数据库?

我希望这个更改此用户的权限,因为同一用户可能在其他时间也需要写入权限。这对于防止意外修改数据库很有用(如果可能的话)。

【问题讨论】:

标签: mysql database-connection database-permissions


【解决方案1】:

你的问题的答案是

不,无法在连接字符串中指定只读访问权限。

替代品是

1.创建具有读取权限的sql用户

MVC3 Read-Only MySql Connection String

2.创建带有权限检查逻辑的视图或存储过程

MS SQL Grant permission to only a view

MySQLGrant a user permission to only view a mysql view

3.在您的业务逻辑中实施权限层

祝你好运!

【讨论】:

  • 关于第 3 项,您提供的链接适用于 MS SQL Server。我不确定如何确保 MySQL 中的类似访问是只读的。
  • @GeorgeBailey 您的意思是关于授予视图级别权限的第 2 项?谢谢你的收获。我为 MySQL 添加了一个链接,看起来语法看起来很相似。再次感谢!
【解决方案2】:

这里最好的解决方案是在 mysql 服务器上创建另一个具有只读权限的帐户,然后使用该帐户进行连接。

【讨论】:

  • 我知道。但我想知道没有这个是否有任何选择?谢谢。
  • 很遗憾,不是。我考虑过做一些聪明的事情,比如立即锁定数据库中的所有表以供读取,但是(a)这会导致并发的噩梦,并且(b)如果你解锁表很容易恶意破解,并且(c)它会阻止你避免在查询中使用锁定(尽管只读会话可能不太可能使用它。)您比我们更了解目标系统,所以如果 LOCK TABLES 表名 READ 对您有用,万岁,否则是的,最好和〜正确〜的事情是有两个用户,一个是只读的。
【解决方案3】:

根据您的用例和您拥有的控制权,您可以在连接后立即让代码调用“设置事务只读”,或者在连接时使用 --init-command 参数。这适用于我们的测试用例,

这里是设置的事务文档:https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html,同样你也可以将它设置为会话变量,如果这会有所不同https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_transaction_read_only

【讨论】:

  • 这是迄今为止对这个问题最有用的答案。
  • 请注意,当使用SET 方法时,您可能需要包含SESSION(即SET SESSION TRANSACTION READ ONLY),否则效果仅适用于下一条语句,之后事务模式将恢复.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多