T-SQL: SUSER_SNAME vs SUSER_NAME?

前端 未结 2 1979
一整个雨季
一整个雨季 2021-01-17 07:15

The MSDN documentation says for SUSER_SNAME function:

Returns the login identification name from a user\'s security identification number (SID).

<
相关标签:
2条回答
  • 2021-01-17 07:57

    SUSER_NAME() will return the name associated with an sid that exists in sys.server_principals. The sid must exist in sys.server_principals.

    SUSER_SNAME() can do that but also can return the sid of a login if the login is a member of an active directory group

    So if you have [CONTOSO\MyGroup] in Active Directory and that group has one user [CONTOSO\MyUser]

    And you add that group to SQL Server: CREATE LOGIN [CONTOSO\MyGroup] FROM WINDOWS;

    SELECT SUSER_ID('CONTOSO\MyUser'), SUSER_SID('CONTOSO\MyUser')

    will give you NULL, CONTOSO\MyUser because CONTOSO\MyUser is not in sys.server_principals but is in A/D

    0 讨论(0)
  • 2021-01-17 08:07

    If you call the function without an argument they will both return the same value. But they do take different arguments:

    • SUSER_SNAME() takes the varbinary(85) SID of a login as argument
    • SUSER_NAME() takes the integer principal_id of a login

    You can verify this like:

    select  suser_name(principal_id)
    ,       suser_name(sid)
    ,       suser_sname(principal_id)
    ,       suser_sname(sid)
    from    sys.server_principals 
    where   name = suser_name()
    

    Only the first and last column will return non-null values.

    0 讨论(0)
提交回复
热议问题