在只读模式下打开SQL连接

38

假设用户拥有 MySQL 数据库的完全读写权限。是否存在一种方式(连接字符串中的某个参数)以相同的用户名和密码以只读模式连接到数据库?

我希望实现这一点而无需更改该用户的权限,因为在其他时间该用户可能还需要写入权限。如果可能的话,这将非常有用,可防止对数据库的意外修改。


请查看相关问题。 http://stackoverflow.com/questions/654656/odbc-5-1-connection-string-for-mysql-with-read-only-accesshttp://stackoverflow.com/questions/10122745/mvc3-read-only-mysql-connection-string - hgulyan
1
根据他们的说法,无法通过连接字符串指定只读访问权限。实际上,您应该创建具有只读权限的SQL用户或在软件业务逻辑中创建权限层。 - hgulyan
3个回答

18

最佳解决方案是在MySQL服务器上创建另一个带有只读权限的帐户,并使用该帐户进行连接。


我知道。但是我想知道是否有其他选项?谢谢。 - gtiwari333
很遗憾,不行。我考虑过像立即锁定数据库中所有表格以供读取之类的聪明做法,但是(a)这会对并发性造成噩梦,(b)如果你UNLOCK TABLES,那么它很容易被恶意破坏,(c)它会阻止你在查询中使用锁定(尽管只读会话可能不太可能使用它)。你比我们更了解目标系统,所以如果LOCK TABLES tablename READ对你有用,那太好了,否则是的,最好和“正确”的做法是有两个用户,其中一个是只读的。 - Jon Marnock

18

在第三项中,您提供的链接是针对MS SQL Server的。我不确定如何确保在MySQL中类似的访问是只读的。 - 700 Software
1
@GeorgeBailey 你是指在第二项关于在视图级别上授予权限吗?感谢你的提醒。我已经添加了一个MySQL的链接,看起来语法很相似。再次感谢! - hgulyan

10

这绝对是针对这个问题最有用的答案。 - mathieu
2
请注意,在使用SET方法时,您可能需要包括SESSION(即SET SESSION TRANSACTION READ ONLY),否则该效果仅适用于下一个语句,之后事务模式将被还原。 - Courtney Miles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接