USER_NAME (Transact-SQL)

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库

根据指定的标识号返回数据库用户名或当前用户名。

Transact-SQL 语法约定

语法

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