SUSER_SNAME (Transact-SQL)

适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库 是Azure SQL 托管实例 是Azure Synapse Analytics 是并行数据仓库

返回与安全标识号 (SID) 关联的登录名。

主题链接图标 Transact-SQL 语法约定

语法

SUSER_SNAME ( [ server_user_sid ] )   

备注

若要查看 SQL Server 2014 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

server_user_sid
适用于:SQL Server 2008 及更高版本

可选的登录安全标识号。 server_user_sid 为 varbinary(85)。 server_user_sid 可以是任何 SQL Server 登录或 Microsoft Windows 用户或组的安全标识号。 如果未指定 server_user_sid,则返回有关当前用户的信息。 如果此参数包含词 NULL,将返回 NULL。

返回类型

nvarchar(128)

注解

SUSER_SNAME 在 ALTER TABLE 或 CREATE TABLE 中可用作 DEFAULT 约束。 SUSER_SNAME 可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用。 SUSER_SNAME 必须始终后跟括号,即使在未指定参数的情况下也是如此。

在无参数的情况下调用时,SUSER_SNAME 返回当前安全上下文的名称。 当通过使用 EXECUTE AS 切换上下文的批中无参数调用 SUSER_SNAME 时,将返回模拟上下文的名称。 从模拟上下文中调用时,ORIGINAL_LOGIN 将返回原始上下文的名称。

Azure SQL 数据库 注释

SUSER_NAME 始终返回当前安全上下文的登录名。

SUSER_SNAME 语句不支持通过 EXECUTE AS 使用模拟安全上下文执行。

示例

A. 使用 SUSER_SNAME

下面的示例返回当前安全上下文的登录名。

SELECT SUSER_SNAME();  
GO  

B. 使用带 Windows 用户安全 ID 的 SUSER_SNAME

以下示例返回与 Windows 安全标识号关联的登录名。

适用于:SQL Server 2008 及更高版本

SELECT SUSER_SNAME(0x010500000000000515000000a065cf7e784b9b5fe77c87705a2e0000);  
GO  

C. 将 SUSER_SNAME 用作 DEFAULT 约束

下面的示例在 SUSER_SNAME 语句中使用 DEFAULT 作为 CREATE TABLE 约束。

USE AdventureWorks2012;  
GO  
CREATE TABLE sname_example  
(  
login_sname sysname DEFAULT SUSER_SNAME(),  
employee_id uniqueidentifier DEFAULT NEWID(),  
login_date  datetime DEFAULT GETDATE()  
);   
GO  
INSERT sname_example DEFAULT VALUES;  
GO  

D. 与 EXECUTE AS 一起调用 SUSER_SNAME

该示例显示了从模拟上下文调用时的 SUSER_SNAME 的行为。

适用于:SQL Server 2008 及更高版本

SELECT SUSER_SNAME();  
GO  
EXECUTE AS LOGIN = 'WanidaBenShoof';  
SELECT SUSER_SNAME();  
REVERT;  
GO  
SELECT SUSER_SNAME();  
GO 

下面是结果。

sa  
WanidaBenShoof  
sa

示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

E. 使用 SUSER_SNAME

以下示例返回值为 0x01 的安全标识号的登录名。

SELECT SUSER_SNAME(0x01);  
GO  

F. 返回当前登录名

以下示例返回当前登录的登录名称。

SELECT SUSER_SNAME() AS CurrentLogin;  
GO  

另请参阅

SUSER_SID (Transact-SQL)
主体(数据库引擎)
sys.server_principals (Transact-SQL)
EXECUTE AS (Transact-SQL)