SUSER_SID (Transact-SQL)

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

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

语法

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

参数

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

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

返回类型

varbinary(85)

注释

SUSER_SID 在 ALTER TABLE 或 CREATE TABLE 中可用作 DEFAULT 约束。 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.

示例

A.使用 SUSER_SID

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

SELECT SUSER_SID('sa');
GO

B.对 Windows 用户名使用 SUSER_SID

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

SELECT SUSER_SID('London\Workstation1');
GO

C.将 SUSER_SID 用作 DEFAULT 约束

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

USE AdventureWorks2012;
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

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

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

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

请参阅

参考

ORIGINAL_LOGIN (Transact-SQL)

CREATE TABLE (Transact-SQL)

binary 和 varbinary (Transact-SQL)

系统函数 (Transact-SQL)