sql以只读模式打开连接

Posted

技术标签:

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

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

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

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

【问题讨论】:

查看相关问题。 ***.com/questions/654656/…***.com/questions/10122745/… 根据他们的说法,没有办法通过连接字符串指定只读访问。实际上,您应该创建具有只读权限的 sql 用户或在软件的业务逻辑中设置权限层。 【参考方案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),否则效果仅适用于下一条语句,之后事务模式将恢复.

以上是关于sql以只读模式打开连接的主要内容,如果未能解决你的问题,请参考以下文章

java + sqlite:如何以只读方式打开数据库?

在 C# 中以只读方式打开 SQLITE

使用 Pandas HDFStore 以只读模式打开文件

8:文件读写

如何在 Oracle 中查找模式名称?当您使用只读用户在 sql 会话中连接时

PythonNotes