返回用户名和用户 ID 的函数

有几个系统函数可返回用户名和用户 ID。若要了解这些函数的参数和输出,必须了解 SQL Server 2005 中使用的名称和 ID 类型。

登录到 SQL Server 的每一个用户在 SQL Server 中都有以下两个级别的名称,每个名称都与一个唯一的 ID 相关联:

  • 登录名
    授权登录到 SQL Server 的每个用户都有一个登录名,该登录名将授予他们访问 SQL Server 实例的权限。有两种类型的登录名:
    • Microsoft Windows 帐户名
      通过使用 sp_grantloginsysadminsecurityadmin 固定服务器角色的成员可以授权各个用户或 Windows 组的 Windows 帐户登录到 SQL Server 实例。然后,Windows 帐户标识的用户或 Windows 组中的任何用户可以使用 Windows 身份验证连接到 SQL Server 实例。每个 Windows 帐户或组名称都存储在 sys.server_principals 中。Windows 帐户或组的 Windows 安全标识符存储在 sys.server_principals.sid 中。
    • SQL Server 登录名
      这些名称将在用户使用 SQL Server 身份验证登录时使用。SQL Server 登录名由 sysadminsecurityadmin 固定服务器角色的成员使用 sp_addlogin 来定义的。每个 SQL Server 登录名都存储在 master.dbo.syslogins.loginname 中。SQL Server 将生成一个用作安全标识符的 GUID 并将其存储在 sys.server_principals.sid 中。
      SQL Server 使用 sys.server_principals.sid 作为登录名的 security_identifier
  • 数据库用户名
    每个 Windows 帐户或 SQL Server 登录都必须与已授权用户对其进行访问的每个数据库中的用户名相关联,或者该数据库必须已启用 guest 访问。数据库用户名由 db_ownerdb_accessadmin 固定数据库角色的成员来定义,并存储在每个数据库的 sysusers 表中。每个数据库用户名都与存储在 sys.database_principals.uid 中的一个数据库用户 ID 相关联。
    每个用户的security identifier都存储在 sys.database_principals.sid 中,因此可将用户映射回其关联登录名。如果使用同一数据库用户名作为 SQL Server 登录名或 Windows 帐户名,则可以减少混淆;但是,不要求一定这样做。

连接到 SQL Server 实例时,可以使用下列函数获取登录帐户或 ID:

  • SUSER_SNAME,以获取与security identifier关联的 SQL Server 登录名或 Windows 帐户。
  • SUSER_SID,以获取与 SQL Server 登录名或 Windows 帐户关联的security identifier
  • SUSER_SID()(指定 SUSER_SID 时不带 login_account 参数),以获取当前连接的security identifier,不管使用的是 SQL Server 身份验证还是 Windows 身份验证。
  • SQL-92 函数 SYSTEM_USER,以获取用于 Windows 身份验证连接的 Windows 帐户,或用于 SQL Server 身份验证连接的 SQL Server 登录名。在 Transact-SQL 中,SYSTEM_USER 作为 SUSER_SNAME()(指定 SUSER_SNAME 时不带 security_identifier 参数)的同义词来实现。

在 SQL Server 中,返回登录名或帐户的函数按照以下方式进行操作:

  • SUSER_SNAME(security_identifier)
    SUSER_SNAME 可以使用以下参数:
    • 用于 Windows 帐户或组的 security_identifier,在这种情况下,该函数将返回 Windows 帐户名或组名。
    • 为 SQL Server 登录名生成的伪 security_identifier,在这种情况下,该函数将返回 SQL Server 登录名。
    如果没有为使用 Windows 身份验证建立的连接指定 security_identifier,SUSER_SNAME 将返回与该连接关联的 Windows 帐户名。如果是使用 SQL Server 身份验证进行的连接,SUSER_SNAME 将返回与该连接关联的 SQL Server 登录。
  • SYSTEM_USER
    在 Transact-SQL-92 中,此函数实现为 SUSER_SNAME() 的同义词。(指定 SUSER_SNAME 时不带 security_identifier 参数。)

连接到 SQL Server 2005 实例时,可以使用下列函数获取用户名或用户 ID:

  • USER_ID,以获取与数据库用户名关联的数据库用户 ID。
  • USER_ID(),以获取与当前连接关联的数据库用户 ID。
  • USER_NAME,以获取与数据库用户 ID 关联的数据库用户名。
  • SQL-92 CURRENT_USER 或 SESSION_USER 函数,都是用来获取与当前连接关联的数据库用户名。在 Transact-SQL 中,这些函数实施为 USER_NAME() 的同义词。(指定 USER_NAME 时不带 database_user_ID 参数。)Transact-SQL 函数 USER 也实现为 USER_NAME() 的同义词。
    SQL-92 允许在 SQL 模块中对 SQL 语句进行编码,该模块的授权标识符与已连接到 SQL 数据库的用户的授权标识符可以相互独立。SQL-92 指定 SESSION_USER 总是返回进行连接的用户的授权标识符。对于从 SQL 模块中执行的任何语句,CURRENT_USER 都将返回 SQL 模块的授权标识符;如果 SQL 语句不是从 SQL 模块中执行的,则返回进行连接的用户的授权标识符。如果 SQL 模块没有单独的授权标识符,SQL-92 将指定 CURRENT_USER 返回与 SESSION_USER 相同的值。而 SQL Server 针对 SQL 模块没有单独的授权标识符,因此 CURRENT_USER 和 SESSION_USER 的值将始终相同。USER 函数是由 SQL-92 为向后兼容性而定义的函数,用于为早期版本的标准所编写的应用程序。USER 被指定为与 CURRENT_USER 返回相同的值。

在 SQL Server 中,返回登录名或帐户的函数按照以下方式进行操作:

  • USER_ID('database_user_name')
    USER_ID 将返回与指定数据库用户名关联的数据库用户 ID。如果未指定 database_user_name,USER_ID 将返回与当前连接关联的数据库用户 ID。
  • USER_NAME(database_user_ID)
    USER_NAME 返回与指定的数据库用户 ID 关联的数据库用户名。如果未指定 database_user_ID,USER_NAME 将返回与当前连接关联的数据库用户名。
  • CURRENT_USER、SESSION_USER、USER
    这些函数是 USER_NAME() 的同义词。(指定 USER NAME 时不带 database_user_ID 参数。)
posted on 2010-04-09 14:15  沉默的心  阅读(6406)  评论(1编辑  收藏  举报