USER_NAME (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库
根据指定的标识号返回数据库用户名或当前用户名。
语法
USER_NAME ( [ ID ] )
参数
ID
与数据库用户关联的标识号,如 sys.database_principals 中所列。 ID 的数据类型为 int。需要使用括号。
返回类型
nvarchar(128)
注解
省略 ID 时,则假定为当前上下文中的当前用户。 如果此参数包含 NULL
一词,USER_NAME
将返回 NULL
。 如果在 EXECUTE AS
语句之后调用 USER_NAME
,但不指定 ID,则 USER_NAME
将返回模拟用户的名称。 如果 Windows 主体通过某组中的成员身份访问数据库,则 USER_NAME
将返回 Windows 主体的名称,而不是该组的名称。
尽管 Azure SQL 数据库支持 USER_NAME()
函数,但 Azure SQL 数据库不支持使用 EXECUTE AS USER = USER_NAME(n)
。
示例
A. 使用 USER_NAME() 标识用户 ID
以下示例返回用户 ID 13
的用户名,如 sys.database_principals 中所列。
SELECT USER_NAME(13);
GO
B. 使用不指定 ID 的 USER_NAME
以下示例在不指定 ID 的情况下查找当前用户的名称。
SELECT USER_NAME();
GO
下面是为属于 sysadmin 固定服务器角色成员的用户返回的结果集。
dbo
C. 在 WHERE 子句中使用 USER_NAME
以下示例在 sys.database_principals
中查找行,该行的名称与将 USER_NAME
系统函数应用于用户标识号 1
而得出的结果相同。
SELECT name FROM sys.database_principals WHERE name = USER_NAME(1);
GO
结果集如下。
name
------------------------------
dbo
(1 row(s) affected)
D. 在使用 EXECUTE AS 的模拟过程中调用 USER_NAME
以下示例显示模拟过程中 USER_NAME
的行为方式。
EXECUTE AS
目前在 Microsoft Fabric 中不受支持。
注意
使用 EXECUTE AS
进行测试时,始终编写要遵循的 REVERT
脚本。
SELECT USER_NAME();
GO
EXECUTE AS USER = 'Zelig';
GO
SELECT USER_NAME();
GO
REVERT;
GO
SELECT USER_NAME();
GO
结果集如下。
-------------
dbo
-------------
Zelig
-------------
dbo
示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)
E. 使用不指定 ID 的 USER_NAME
以下示例在不指定 ID 的情况下查找当前用户的名称。
SELECT USER_NAME();
下面是当前登录用户的结果集。
User7
F. 在 WHERE 子句中使用 USER_NAME
以下示例在 sysusers
中查找行,该行的名称与将 USER_NAME
系统函数应用于用户标识号 1
而得出的结果相同。
SELECT name FROM sysusers WHERE name = USER_NAME(1);
结果集如下。
name
------------------------------
User7