0

在我的 MySQL 数据库中,我有两种用户

  1. MySQL 用户,用于直接从客户端(例如 MySQL 工作台或任何 ODBC 编辑器)连接和访问数据库。
  2. ASP.NET 会员用户 + 角色:用于为我的网站提供登录。

我的情况

当我使用 ASP.NET 用户凭据通过网页登录时。我想创建一个临时的随机 MySQL 用户(分配权限、设置密码等)并将其提供给当前登录的用户(asp.net 用户)以获得对 MySQL 数据库的临时访问权限。

我知道,如果 ASP.NET 用户具有创建用户的 root 访问权限,他也可以完全访问数据库。我的问题是,我必须提供用户名和密码,这样他才能从另一个客户端连接并直接访问数据库。(我不想给他 root 访问权限或永久访问权限)

说了他可以从另一个客户端访问,我想根据他在我的网页中的登录状态来限制这个。就像当他退出我的网页时,新创建的 MySQL 用户被标记为过期或删除。

我认为这应该很有可能,但我想不出任何起点。有人可以帮我吗?

亲切的问候

克里什

4

1 回答 1

1

这个有可能。您可以使用create user and grant语法来创建您的用户并授予他们权限。

但是,您需要维护一个单独的表来映射具有到期日期的 MySQL 用户。

您是否考虑过不同的解决方案?

要完成的工作要多得多,但从长远来看,这可能是一个更稳定/可靠和可扩展的解决方案。

也许使用 NET.NCP 为 MySQL 创建您自己的 WCF 代理,然后您可以拥有由您管理的本地用户帐户/临时帐户,这些帐户授权您的 WCF 服务而不是直接访问数据库,代理将反过来直接连接到您的数据库。此解决方案也适用于 3rd 方应用程序。

使用自定义代理将为您提供更大的控制权,例如:

  • 能够为特定用户记录 SQL 清理或限制任何
  • 您不想在数据库上执行的特定命令 没有
  • 您的 MySQL 服务器可在 Internet 上直接联系
  • 横向扩展时将读写拆分到不同的服务器或集群

编辑1:根据以下评论:

我不建议在会话结束时依赖事件,因为这并不总是被触发。我建议您创建另一个表来管理用户及其到期时间。例如,包含用户 ID 或用户名和主机以及到期时间的表。根据您的要求,这可以是日期时间/整数(纪元)。然后,您需要调用一个查询来识别该表中所有已过期的帐户,然后您可以从 MySQL 中删除用户帐户。

根据您的 MySQL 版本,您可以将大量逻辑包装到一些存储过程中,这将使查询和维护开销更容易

于 2013-02-19T11:06:33.843 回答