Почему встроенная функция MySQL 'current_user ()' возвращает имя хоста, содержащее символ "%"? - PullRequest
5 голосов
/ 06 января 2011

Имеет ли MySQL встроенную функцию для получения имени хоста?

Аналогично

select user(); //this returns  user@userip

Редактировать:

select current_user(); //returns user@10.0.3.%

Последний символ % -почему?

Ответы [ 7 ]

7 голосов
/ 21 октября 2011

SELECT @@ hostname;

- у mysql 4.1 такого не было.

3 голосов
/ 09 января 2013

Если вы хотите, чтобы имя хоста базы данных сервер , вы можете использовать SHOW VARIABLES:

mysql> SHOW VARIABLES LIKE 'hostname';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| hostname      | munda |
+---------------+-------+
1 row in set (0.00 sec)

Это не встроенная функция, поэтому ее нельзя использовать в операторе SELECT.

3 голосов
/ 06 января 2011
select current_user(); returns user@10.0.3.% last simbol is % why ??

% - это запись в mysql.user, которая соответствует вашему текущему логину

который может быть получен из

select concat(user, '@', host) from mysql.user;

% определяется значением хоста.

3 голосов
/ 06 января 2011

не его работа?

выберите substring_index (user (), '@', -1) в качестве имени хоста;

Вышеприведенное неверно, оно возвращает IP пользователя, а не хоста. Я был обманут тестированием на локальном компьютере. Извините за это.


Полагаю, это возвращает имя хоста, но это было бы бесполезно, если вы не готовы к grep, pipe и cut Просто к вашему сведению:

C:\>mysqladmin -u username -pmypassword -h dev.naishelabs.com version

mysqladmin  Ver 8.41 Distrib 5.0.22, for Win32 on ia32
Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Server version          5.0.77
Protocol version        10
Connection              dev.naishelabs.com via TCP/IP
TCP port                3306
Uptime:                 73 days 5 hours 7 min 45 sec
2 голосов
/ 06 января 2011

Вы можете использовать функции user() и current_user().Если вы хотите, чтобы только имя хоста делало что-то вроде select substr(current_user(),LOCATE('@', current_user())+1) AS localhost;
Подробности вы можете найти здесь

2 голосов
/ 06 января 2011

Вы ищете функцию CURRENT_USER .

Возвращает имя пользователя и имя хоста. комбинация для учетной записи MySQL, сервер, используемый для аутентификации текущий клиент. Этот аккаунт определяет ваши права доступа.

Значение CURRENT_USER () может отличаться от значения USER ().

1 голос
/ 03 декабря 2013

Переменная @@hostname содержит системное имя хоста:

$ cat /etc/hostname
bruno

$ hostname
bruno

$ mysql
mysql> SELECT @@hostname;
+------------+
| @@hostname |
+------------+
| bruno      |
+------------+

Обратите внимание, что это можно комбинировать и использовать в других запросах:

mysql> SELECT name, @@hostname FROM people;
+-------+-------------+
| name  | @@hostname  |
+-------+-------------+
| Dotan | bruno       |
+-------+-------------+

mysql> SELECT CONCAT('I am on server ', @@hostname);
+---------------------------------------+
| CONCAT('I am on server ', @@hostname) |
+---------------------------------------+
| I am on server bruno                  |
+---------------------------------------+
...