MariaDB CURRENT_USER() 函数的基础用法与实例

MariaDB URRENT_USER() 函数是一个系统函数,用于返回当前用户的用户名和主机名。

发布于

MariaDB URRENT_USER() 函数是一个系统函数,用于返回当前用户的用户名和主机名。该函数的返回值的格式为 'user_name'@'host_name',其中 user_name 是当前用户的登录名,host_name 是当前用户的连接主机名。

语法

MariaDB URRENT_USER() 函数的语法如下:

CURRENT_USER()

该函数没有参数,也不需要括号。它等价于 CURRENT_USER 或者 USER() 函数。

实例

下面是一些使用 MariaDB URRENT_USER() 函数的实例。

返回当前用户的用户名和主机名

在本实例中,我们使用 MariaDB URRENT_USER() 函数来返回当前用户的用户名和主机名。

SELECT CURRENT_USER();

输出结果如下:

+--------------------+
| CURRENT_USER()     |
+--------------------+
| 'root'@'localhost' |
+--------------------+

从输出结果可以看出,当前用户的用户名是 root,主机名是 localhost

使用 MariaDB URRENT_USER() 函数作为条件

在本实例中,我们使用 MariaDB URRENT_USER() 函数作为条件,来查询 employees 表中属于当前用户的员工信息。

SELECT * FROM employees WHERE manager = CURRENT_USER();

输出结果如下:

+----+-------+----------+--------------------+
| id | name  | position | manager            |
+----+-------+----------+--------------------+
| 3  | Alice | Analyst  | 'root'@'localhost' |
| 4  | Bob   | Tester   | 'root'@'localhost' |
+----+-------+----------+--------------------+

从输出结果可以看出,employees 表中有两个员工的经理是当前用户。

使用 MariaDB URRENT_USER() 函数作为默认值

在本实例中,我们使用 MariaDB URRENT_USER() 函数作为默认值,来创建一个 orders 表,该表包含了订单的编号,日期,金额,以及下单用户的信息。

CREATE TABLE orders (
  order_id INT PRIMARY KEY,
  order_date DATE,
  order_amount DECIMAL(10,2),
  order_user VARCHAR(50) DEFAULT CURRENT_USER()
);

然后,我们向 orders 表中插入一些数据,不指定 order_user 的值,让它使用默认值。

INSERT INTO orders (order_id, order_date, order_amount) VALUES
(1, '2024-02-09', 100.00),
(2, '2024-02-10', 200.00),
(3, '2024-02-11', 300.00);

最后,我们查询 orders 表中的数据,看看 order_user 的值。

SELECT * FROM orders;

输出结果如下:

+----------+------------+--------------+--------------------+
| order_id | order_date | order_amount | order_user         |
+----------+------------+--------------+--------------------+
| 1        | 2024-02-09 | 100.00       | 'root'@'localhost' |
| 2        | 2024-02-10 | 200.00       | 'root'@'localhost' |
| 3        | 2024-02-11 | 300.00       | 'root'@'localhost' |
+----------+------------+--------------+--------------------+

从输出结果可以看出,order_user 的值都是当前用户的用户名和主机名。

使用 MariaDB URRENT_USER() 函数作为函数参数

在本实例中,我们使用 MariaDB URRENT_USER() 函数作为函数参数,来调用 SUBSTRING_INDEX() 函数,该函数用于返回一个字符串中指定分隔符之前或之后的子字符串。

SELECT SUBSTRING_INDEX(CURRENT_USER(), '@', 1) AS user_name,
       SUBSTRING_INDEX(CURRENT_USER(), '@', -1) AS host_name;

输出结果如下:

+-----------+-------------+
| user_name | host_name   |
+-----------+-------------+
| 'root'    | 'localhost' |
+-----------+-------------+

从输出结果可以看出,我们使用 @ 作为分隔符,分别返回了当前用户的用户名和主机名。

使用 MariaDB URRENT_USER() 函数与 GRANT 语句

在本实例中,我们使用 MariaDB URRENT_USER() 函数与 GRANT 语句,来给当前用户授予对 employees 表的所有权限。

GRANT ALL ON employees TO CURRENT_USER();

执行成功后,我们可以使用 SHOW GRANTS 语句,来查看当前用户的权限。

SHOW GRANTS FOR CURRENT_USER();

输出结果如下:

+--------------------------------------------------------------+
| Grants for 'root'@'localhost'                                |
+--------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'            |
| GRANT ALL ON `employees` TO 'root'@'localhost'               |
+--------------------------------------------------------------+

从输出结果可以看出,当前用户已经拥有了对 employees 表的所有权限。

相关函数

除了 MariaDB URRENT_USER() 函数外,还有一些与之相关的函数,如下:

  • MariaDB USER() 函数:与 MariaDB URRENT_USER() 函数等价,返回当前用户的用户名和主机名。
  • MariaDB SESSION_USER() 函数:返回当前会话的用户名和主机名,与 MariaDB URRENT_USER() 函数的区别是,如果当前用户的身份被更改,例如使用 SET ROLE 语句,那么 MariaDB URRENT_USER() 函数会返回更改后的身份,而 MariaDB SESSION_USER() 函数会返回原始的身份。
  • MariaDB SYSTEM_USER() 函数:返回当前系统的用户名和主机名,与 MariaDB URRENT_USER() 函数的区别是,如果当前用户的连接被代理,例如使用 PROXY 选项,那么 MariaDB URRENT_USER() 函数会返回被代理的用户,而 MariaDB SYSTEM_USER() 函数会返回原始的用户。

下面是一个使用这些函数的实例:

SELECT CURRENT_USER(), USER(), SESSION_USER(), SYSTEM_USER();

输出结果如下:

+--------------------+--------------------+--------------------+--------------------+
| CURRENT_USER()     | USER()             | SESSION_USER()     | SYSTEM_USER()      |
+--------------------+--------------------+--------------------+--------------------+
| 'root'@'localhost' | 'root'@'localhost' | 'root'@'localhost' | 'root'@'localhost' |
+--------------------+--------------------+--------------------+--------------------+

从输出结果可以看出,这些函数的返回值都是一样的,因为我们没有更改或代理当前用户的身份。

结论

MariaDB URRENT_USER() 函数是一个常用的系统函数,用于返回当前用户的用户名和主机名。该函数可以作为条件,默认值,函数参数,或者 GRANT 语句的对象,来实现不同的功能。该函数还有一些与之相关的函数,如 USER()SESSION_USER(),和 SYSTEM_USER(),它们在某些情况下会返回不同的值,需要注意区分。