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()
函数:与 MariaDBURRENT_USER()
函数等价,返回当前用户的用户名和主机名。MariaDB SESSION_USER()
函数:返回当前会话的用户名和主机名,与 MariaDBURRENT_USER()
函数的区别是,如果当前用户的身份被更改,例如使用SET ROLE
语句,那么 MariaDBURRENT_USER()
函数会返回更改后的身份,而MariaDB SESSION_USER()
函数会返回原始的身份。MariaDB SYSTEM_USER()
函数:返回当前系统的用户名和主机名,与 MariaDBURRENT_USER()
函数的区别是,如果当前用户的连接被代理,例如使用PROXY
选项,那么 MariaDBURRENT_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()
,它们在某些情况下会返回不同的值,需要注意区分。