SUSER_SID(Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Microsoft Fabric 预览版中的 SQL 数据库

返回指定登录名的安全标识号 (SID)。

Transact-SQL 语法约定

语法

SUSER_SID ( [ 'login' ] [ , Param2 ] )

参数

'* login *'

适用于:SQL Server 2008 (10.0.x) 及更高版本

用户的登录名。 login 为 sysname。 login 作为可选项,可以为 SQL Server 登录名或 Microsoft Windows 用户或组。 如果未指定 login,则返回有关当前安全上下文的信息。 如果参数包含 NULLSUSER_SIDNULL返回 。

Param2

适用于:SQL Server 2012 (11.x) 及更高版本

指定是否验证登录名。 Param2 的类型为 int,并且可选。 在 Param2 为 0 时,不验证登录名。 在 Param2 未指定为 0 时,对 Windows 登录名进行验证,以便确认是否与在 SQL Server 中存储的登录名完全相同

返回类型

varbinary(85)

注解

SUSER_SID可以用作任ALTER TABLEDEFAULT约束,也可以CREATE TABLE用作约束。 SUSER_SID 可以在选择列表中、子句和 WHERE 允许表达式的任何位置使用。 SUSER_SID 必须始终后跟括号,即使未指定任何参数。

在没有参数的情况下调用时, SUSER_SID 返回当前安全上下文的 SID。 在使用 EXECUTE AS转换上下文的批处理中在没有参数的情况下调用时, SUSER_SID 返回模拟上下文的 SID。 从模拟上下文调用时, SUSER_SID(ORIGINAL_LOGIN()) 返回原始上下文的 SID。

当 SQL Server 排序规则和 Windows 排序规则不同时,当 SQL Server 和 Windows 以不同的格式存储登录名时, SUSER_SID 可能会失败。 例如,如果 Windows 计算机 TestComputer 具有登录名 User ,并且 SQL Server 将登录名存储为 TESTCOMPUTER\User,则查找 TestComputer\User 登录名可能无法正确解析登录名。 若要跳过此登录名的验证,请使用 Param2。 不同的排序规则通常是 SQL Server 错误 15401 的原因: Windows NT user or group '%s' not found. Check the name again.

Azure SQL 数据库、Fabric 中的 SQL 数据库备注

SUSER_SID 始终返回当前安全上下文的登录 SID。 使用 sys.database_principals 获取不同登录名的 SID。

SUSER_SID 语句不支持通过 EXECUTE AS模拟的安全上下文执行。

示例

A. 使用SUSER_SID

下面的示例返回当前安全上下文的安全标识号 (SID)。

SELECT SUSER_SID();

B. 将SUSER_SID与特定登录名配合使用

适用于:SQL Server 2012 (11.x) 及更高版本

下面的示例返回 SQL Server sa 登录名的安全标识号。

SELECT SUSER_SID('sa');
GO

C. 将SUSER_SID与 Windows 用户名配合使用

适用于:SQL Server 2012 (11.x) 及更高版本

以下示例返回 Windows 用户 London\Workstation1 的安全标识号。

SELECT SUSER_SID('London\Workstation1');
GO

D. 使用SUSER_SID作为 DEFAULT 约束

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

USE AdventureWorks2022;
GO
CREATE TABLE sid_example
(
login_sid   VARBINARY(85) DEFAULT SUSER_SID(),
login_name  VARCHAR(30) DEFAULT SYSTEM_USER,
login_dept  VARCHAR(10) DEFAULT 'SALES',
login_date  DATETIME DEFAULT GETDATE()
);  
GO
INSERT sid_example DEFAULT VALUES;
GO

E. 将 Windows 登录名与 SQL Server 中存储的登录名进行比较

适用于:SQL Server 2012 (11.x) 及更高版本

下面的示例演示如何使用 Param2 从 Windows 获取 SID 并使用该 SID 作为对 函数的输入SUSER_SNAME。 该示例以在 Windows 中存储的格式 (TestComputer\User) 提供登录名,并且以在 SQL Server (TESTCOMPUTER\User) 中存储的格式返回登录名。

SELECT SUSER_SNAME(SUSER_SID('TestComputer\User', 0));