mysqlで現在のユーザー名を知る方法はありますか?


88

mysqlクエリがクエリを発行したユーザーのユーザー名を返す方法があるかどうか知りたいのですが。

これは可能ですか?

回答:


77

CURRENT_USER()関数を試してください。これにより、MySQLがクライアント接続の認証に使用したユーザー名が返されます。特権を決定するのはこのユーザー名です。

これは、クライアントによってMySQLに送信されたユーザー名とは異なる場合があります(たとえば、ユーザー名を送信した場合でも、MySQLは匿名アカウントを使用してクライアントを認証する場合があります)。接続時にクライアントがMySQLに送信するユーザー名が必要な場合は、USER()代わりに関数を使用してください。

この値は、サーバーへの接続時に指定したユーザー名と、接続元のクライアントホストを示します。値は、CURRENT_USER()の値とは異なる場合があります。

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


回答ありがとうございます。これを正しく読んでいると、USER()の代わりにCURRENT_USER()を使用する利点は、CURRENT_USER()が認証されたユーザーのみを返すことです。
user1090729 2013年

基本的に、クライアントは認証に使用するユーザーを指定できますが、その特定のユーザーはテーブルに対する付与権限を持っていない場合があります。それでも、テーブルの匿名の権利のために、アクセスが許可される場合があります。この関数は、クライアントによって指定されたユーザーではなく、ユーザーの認証に使用された(おそらく匿名の)付与権限のユーザーを返します。そこのドキュメントに良い例があります。
scotru 2013年

1
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
ユーザー

15
クエリでSELECTを覚えていますか。つまり、SELECT CURRENT_USER(); クエリを投稿してください。
scotru 2015年

1
私はこれをテストしようとしましたCURRENT_USER()が、「mysqlの現在のユーザー名を知る方法はありますか?」という質問には正しくありませんでした。答えは「USER()」でした。これは「現在のMySQLユーザーを返します」(dev.mysql.com/doc/refman/5.7/en/…)。あなたはより完全になるようにあなたの答えを更新するべきです、それはあまりにも短いです。
ジェームズウィルキンス

87

どちらかを実行してみてください

SELECT USER();

または

SELECT CURRENT_USER();

それは時々異なることができ、USER()は、それによってあなたが認証しようとしてログインを返しますCURRENT_USER()あなたが実際に認証を許可されたかを返します。


18

このクエリを使用します:

SELECT USER();

または

SELECT CURRENT_USER;


3

データベースを使用している現在のユーザーを印刷するには

select user();

または

select current_user();

3
私はあなたの答えがあまり好きではありません。それは以前に答えられたものに新しいものを追加しないだけでなく、あなたの答えは最も重要な部分、つまりこれら2つの機能の違いを見逃しています。
ジョナサン親レベスク

2
ストアドプログラムまたはビュー内で、CURRENT_USER()は、SQL SECURITY INVOKER特性で定義されていない限り、オブジェクトを定義したユーザーのアカウントを返します(DEFINER値で指定)。後者の場合、CURRENT_USER()はオブジェクトの呼び出し元を返します。トリガーとイベントにはSQLSECURITY特性を定義するオプションがないため、これらのオブジェクトの場合、CURRENT_USER()はオブジェクトを定義したユーザーのアカウントを返します。呼び出し元を返すには、USER()またはSESSION_USER()を使用します。 dev.mysql.com/doc/refman/5.5/en/string-functions.html
ジョナサン親レベスク

これらの関数のすべての履歴を読む時間はありません。また、これらの関数について説明を求める人もいませんでした。主な質問は、mysqlでユーザー名を見つける方法でした。彼は、これら2つのステートメントの違いを尋ねませんでした。そして、既存の回答者に新しいものを追加することは何もありません。それが唯一の回答であるため、回答することで、これが回答であるというユーザーの信頼を得ることができます。
Prashanthhh Kumarr 2017

2

次を使用することもできます:mysql> select user、host from 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                     |
+---------------+-------------------------------+

1

MySQLのCURRENT_USER()関数を使用して、現在のユーザー名を見つけることができます。

例: SELECT CURRENT_USER();

ただしCURRENT_USER()、ログインしたユーザーが常に返されるとは限りません。したがって、ログインユーザーが必要な場合は、SESSION_USER()代わりにを使用してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.