无需登录即可获取 MySQL 数据库列表

Posted

技术标签:

【中文标题】无需登录即可获取 MySQL 数据库列表【英文标题】:Getting list of MySQL Databases without logging in 【发布时间】:2012-05-18 20:20:27 【问题描述】:

我正在开发一个使用 mysql 数据库的 Qt/C++ 开源项目。一个类将在初始配置(第一次运行)期间使用,用户将能够选择一个数据库。有没有办法在不登录并执行 SHOW DATABASES; 事务的情况下提供主机上所有数据库的列表?我想获取主机上的 所有 数据库列表,而不仅仅是特定用户拥有的数据库。我知道这样做的唯一方法是在特定主机上以 root 身份执行 SHOW DATABASES;,但我不想要求用户具有 root 访问权限,除非在某些情况下它是绝对有必要。

这个想法是有一个对话框,让用户选择他们想要在后续会话期间使用的默认数据库,并提供与之配套的用户/密码。如果我也能获得每个数据库的所有者,则可以加分。 (例如,让程序显示数据库 foo 归 johndoe 所有,而数据库 foo2 归 janesmith 所有)一旦用户做出选择,对话框将写入该信息将在正常启动时读取该用户的程序配置文件。

这是否可以完成,或者我是否必须找到一些解决方法,例如让用户首先提供登录名/密码并显示该帐户拥有的数据库列表?这将相对繁琐但容易。

【问题讨论】:

【参考方案1】:

不能在不登录的情况下执行 MySql 查询。也就是说,可以创建一个权限非常低的用户。

您可以创建一个具有足够权限的用户来显示数据库列表并以该用户身份运行查询,然后在用户登录后更改连接字符串。

有一个 SHOW DATABASES 授权允许这样做:http://dev.mysql.com/doc/refman/5.0/en/privileges-provided.html#priv_show-databases

【讨论】:

【参考方案2】:

通常,您为应用程序定义一个具有只读权限的用户,并在获取所需信息后将其呈现给用户,然后询问他的凭据。我只是过于简单化了,并没有详细说明这是如何完成的。

【讨论】:

以上是关于无需登录即可获取 MySQL 数据库列表的主要内容,如果未能解决你的问题,请参考以下文章

无需访问 localhost/phpmyadmin 即可获取数据库

无需用户登录即可获取特定页面的公共帖子

获取网站访问者的IP地址,让他们无需登录即可访问网站

node.js + mysql + ejs 数据插入后无需重新加载页面即可更新屏幕信息

无需登录即可以 JSON 格式获取 Google Drive 文件夹的内容

iOS 应用程序中的 Twitter 提要 - 我如何仅从我自己的帐户获取列表提要 [无需应用用户登录 Twitter]