USER_NAME (Transact-SQL)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Управляемый экземпляр SQL Azure Конечная точка аналитики аналитики Synapse Analytics Analytics (PDW)SQL Analyticsв Microsoft FabricХранилище в Microsoft Fabric

Возвращает имя пользователя базы данных из указанного идентификатора или текущего имени пользователя.

Соглашения о синтаксисе Transact-SQL

Синтаксис

USER_NAME ( [ ID ] )

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

ИД

Идентификационный номер, связанный с пользователем базы данных, как указано в sys.database_principals. Идентификатор int. Скобки обязательны.

Типы возвращаемых данных

nvarchar(128)

Замечания

Если идентификатор опущен, предполагается, что текущий пользователь в текущем контексте. Если параметр содержит слово NULL, USER_NAME возвращается NULL. При USER_NAME вызове без указания идентификатора после EXECUTE AS инструкции USER_NAME возвращает имя олицетворенного пользователя. Если субъект Windows обращается к базе данных путем членства в группе, USER_NAME возвращает имя субъекта Windows вместо группы.

USER_NAME() Хотя функция поддерживается в База данных SQL Azure, использование EXECUTE AS USER = USER_NAME(n) не поддерживается в База данных SQL Azure.

Примеры

А. Используйте USER_NAME() для идентификации идентификатора пользователя

В следующем примере возвращается имя пользователя для идентификатора 13пользователя, как указано в sys.database_principals.

SELECT USER_NAME(13);  
GO  

B. Использование USER_NAME без идентификатора

Следующий пример демонстрирует поиск имени текущего пользователя без указания его идентификатора.

SELECT USER_NAME();  
GO  

Далее приведен результирующий набор для пользователя, который является членом предопределенной роли сервера sysadmin.

dbo  

C. Использование USER_NAME в предложении WHERE

Следующий пример находит строку в 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. Вызов USER_NAME во время олицетворения с помощью EXECUTE AS

Следующий пример показывает, как 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 и система платформы аналитики (PDW)

Д. Использование USER_NAME без идентификатора

Следующий пример демонстрирует поиск имени текущего пользователя без указания его идентификатора.

SELECT USER_NAME();  

Ниже приведен результирующий набор для пользователя, вошедшего в систему.

User7                              

F. Использование USER_NAME в предложении WHERE

Следующий пример иллюстрирует поиск в таблице sysusers строки, имя которой равняется результату работы системной функции USER_NAME для пользователя с идентификационным номером, равным 1.

SELECT name FROM sysusers WHERE name = USER_NAME(1);  

Результирующий набор:

name                             
------------------------------   
User7