【问题标题】:Is there a way to know your current username in mysql?有没有办法知道你在mysql中的当前用户名?
【发布时间】:2013-10-13 21:05:08
【问题描述】:

我想知道 mysql 查询是否有办法返回发出查询的用户的用户名。

这可能吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    尝试运行任一

    SELECT USER();
    

    SELECT CURRENT_USER();
    

    有时可能会有所不同,USER() 将返回您尝试进行身份验证的登录名,CURRENT_USER() 将返回您实际被允许进行身份验证的方式。

    【讨论】:

      【解决方案2】:

      试试CURRENT_USER() 函数。这将返回 MySQL 用于验证您的客户端连接的用户名。正是这个用户名决定了您的权限。

      这可能与客户端发送给 MySQL 的用户名不同(例如,即使您发送了用户名,MySQL 也可能使用匿名帐户来验证您的客户端)。如果您想要客户端在连接时发送到 MySQL 的用户名,请改用 USER() 函数。

      该值表示您在连接到服务器时指定的用户名,以及您连接的客户端主机。该值可以与 CURRENT_USER() 的值不同。

      http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_current-user

      【讨论】:

      • 感谢您的回答,如果我没看错的话,使用 CURRENT_USER() 而不是 USER() 的好处是 CURRENT_USER() 只会返回经过身份验证的用户?
      • 基本上,客户端可以指定用于身份验证的用户——但该特定用户可能没有表的授权权限。然而,由于对表的匿名权限,仍然可以授予访问权限。此函数返回用于验证用户(可能是匿名)而不是客户端指定的用户的授予权限中的用户。那里的文档中有一个很好的例子。
      • ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_USER()' at line 1
      • 你记得查询中的SELECT吗,即:SELECT CURRENT_USER();发布您的查询。
      • 我试过这个来测试,CURRENT_USER() 对于“有没有办法知道 *your* mysql 中的当前用户名?”这个问题不正确。答案是“USER()”,它“返回当前 MySQL 用户”(dev.mysql.com/doc/refman/5.7/en/…)。您应该更新您的答案以更完整,它太短了。
      【解决方案3】:

      使用这个查询:

      SELECT USER();
      

      或者

      SELECT CURRENT_USER;
      

      【讨论】:

        【解决方案4】:

        您可以在 MySQL 中使用 CURRENT_USER() 函数找到当前用户名。

        例如: SELECT CURRENT_USER();

        但是CURRENT_USER() 不会总是返回登录的用户。因此,如果您想拥有已登录的用户,请改用SESSION_USER()

        【讨论】:

          【解决方案5】:

          打印当前正在使用数据库的用户

          select user();
          

          select current_user();
          

          【讨论】:

          • 我不太喜欢你的回答,不仅没有为之前回答的内容添加任何新内容,而且你的回答错过了最重要的部分:这两个函数之间的区别。
          • 在存储的程序或视图中,CURRENT_USER() 返回定义对象的用户的帐户(由其 DEFINER 值给出),除非使用 SQL SECURITY INVOKER 特性定义。在后一种情况下,CURRENT_USER() 返回对象的调用者。触发器和事件没有定义 SQL SECURITY 特性的选项,因此对于这些对象,CURRENT_USER() 返回定义对象的用户的帐户。要返回调用者,请使用 USER() 或 SESSION_USER()。 dev.mysql.com/doc/refman/5.5/en/string-functions.html
          • 没有人有时间阅读这些函数的所有历史,也没有人问你对这些函数的解释,主要问题是如何在 mysql 中找到用户名,他没有问 wat 的区别这两个陈述。并且没有什么可以添加到现有的回答者中,因为它是唯一的答案,通过回答它可以让用户相信这是答案。
          【解决方案6】:

          你可以使用:

          SELECT USER();
          

          SELECT CURRENT_USER();
          

          在此处查看更多信息http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_current-user

          【讨论】:

            【解决方案7】:

            您还可以使用: mysql> 从 mysql.user 中选择用户、主机;

            +---------------+-------------------------------+
            | user          | host                          |
            +---------------+-------------------------------+
            | fkernel       | %                             |
            | nagios        | %                             |
            | readonly      | %                             |
            | replicant     | %                             |
            | reporting     | %                             |
            | reporting_ro  | %                             |
            | nagios        | xx.xx.xx.xx                 |
            | haproxy_root  | xx.xx.xx.xx
            | root          | 127.0.0.1                     |
            | nagios        | localhost                     |
            | root          | localhost                     |
            +---------------+-------------------------------+
            

            【讨论】:

              【解决方案8】:

              我需要这样的功能并且我使用了 CURRENT_USER() 但这给了我全局管理员用户,即使我在连接到数据库时更改了查询用户名,它对于每个查询都是相同的。 显然,这在我正在寻找的用例中是没有用的。 然后我使用了 USER() 它给了我启动查询的连接字符串的用户名。 如果我理解了这个问题,这就是这个人用简单的语言想要的。就我而言,我在触发器中使用它来跟踪对事务表中的行所做的更改。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-07-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多