在 SQl SERVER 2005中调用当前用户ID

来源:互联网 发布:淘宝被投诉假冒商品 编辑:程序博客网 时间:2024/04/29 03:11

问题:
我现在内容都调用出来了  就是唯一的一个问题  我要调当前用户ID 我用的PHPCMS {$r[userid]}这个变量 在SqlServer上调用不到 

$sql="SELECT CustomerID, Carid, TotolPoints, TakePoints, LeavingPoints, CarType,Activation,Consumption 
FROM dbo.CardTable WHERE (CustomerID = id)";

id要是个变量


回答:

SUSER_SID()(不带 login_account 参数的指定 SUSER_SID),用于获得当前连接的 security_identifier,不管是否使用 SQL Server 身份验证或 Windows 身份验证。
这是获得当前连接的安全ID

 

Sql Server 中,当前连接到数据库的用户ID是用函数获得的

 

返回用户名和用户 ID 的函数_学院频道_school.it168.com

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

有几个系统函数可返回用户名和用户 ID。要理解这些函数的参数和输出结果,首先必须理解 Microsoft® SQL Server™ 2000 中使用的名称和 ID 的类型。

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

  • 登录名。

    被授权登录到 SQL Server 的每个用户都有一个登录名,使他们得以访问 SQL Server 实例。有两种类型的登录名:

    • Microsoft Windows® 帐户名。

      sysadminsecurityadmin 固定服务器角色成员可以使用 sp_grantlogin 对 Windows 组或 Windows 帐户的个别用户授权,使其可登录到 SQL Server 实例。于是,Windows 帐户所标识的用户或 Windows 组中的任何组员都可以使用 Windows 身份验证连接 SQL Server 实例。master.dbo.syslogins.loginname 中存储了所有 Windows 帐户名或组名。用于 Windows 帐户或组的 Windows security_identifier 存储在 syslogins.sid 中。

    • SQL Server 登录名。

      使用 SQL Server 身份验证登录时将用到这些登录名。SQL Server 登录名由 sysadminsecurityadmin 固定服务器角色的成员使用 sp_addlogin 进行定义。所有 SQL Server 登录名都存储在 master.dbo.syslogins.loginname 中。SQL Server 生成用作 security_identifier 的 GUID 并将其存储在 syslogins.sid 中。

    SQL Server 2000 将 master.dbo.syslogins.sid 作为登录名的 security_identifier

  • 数据库用户名。

    所有 Windows 帐户或 SQL Server 登录都必须与已授权用户访问的每个数据库中的用户名相关联,或者该数据库必须已启用客户访问。数据库用户名由 db_ownerdb_accessadmin 固定数据库角色的成员来定义,并存储在每个数据库所建的 sysusers 表中。每个数据库用户名都与存储在 sysusers.uid 中的一个数据库用户 ID 相关联。

    每个用户的 security_identifier 都存储在 sysusers.sid 中;因此,可将用户映射回他们相应的登录。如果使用同一数据库用户名作为 SQL Server 登录名或 Windows 帐户名,则可减少混淆;但是,不要求一定这样做。

有关登录和数据库用户帐户的更多信息,请参见登录、用户、角色和组。

获得登录帐户或 ID

连接到 SQL Server 2000 后,使用:

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

在 SQL Server 2000 中,返回登录名或帐户的函数以下面的方式操作:

  • 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

    此 SQL-92 函数在 Transact-SQL 中实现为 SUSER_SNAME()(不指定 security_identifier 参数的 SUSER_SNAME)的同义词。

获得数据库用户名或用户 ID

连接到 SQL Server 2000 后,使用:

  • USER_ID,用来获得与数据库用户名关联的数据库用户 ID。
  • USER_ID(),用来获得与当前连接关联的数据库用户 ID。
  • USER_NAME,用来获得与数据库用户 ID 关联的数据库用户名。
  • SQL-92 CURRENT_USER 或 SESSION_USER 函数,都是用来获得与当前连接关联的数据库用户名。在 Transact-SQL 中,这些函数实现为 USER_NAME()(不指定 database_user_ID 参数的 USER_NAME)的同义词。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 相同的值。Microsoft 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()(不指定 database_user_ID 参数的 USER NAME)的同义词。

 

--------------摘抄自http://school.it168.com/special/manual/sqlserver/ac_8_con_11_0h6b.htm

把上面的SQL语句换成如下:
$sql="SELECT CustomerID, Carid, TotolPoints, TakePoints, LeavingPoints, CarType,Activation,Consumption 
FROM dbo.CardTable WHERE (CustomerID = USER_ID('Custom_name') )";

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

USER_ID('database_user_name')
USER_ID 返回与指定数据库用户名关联的数据库用户 ID。如果未指定 database_user_name,则 USER_ID 返回与当前连接关联的数据库用户 ID。

 
直接用CustomerID=USER_ID() í
如果未指定 database_user_name,则 USER_ID 返回与当前连接关联的数据库用户 ID。
 SQL 语句再次修改如下:

$sql="SELECT CustomerID, Carid, TotolPoints, TakePoints, LeavingPoints, CarType,Activation,Consumption 
FROM dbo.CardTable WHERE (CustomerID = USER_ID() )";

 

--------------------至此问题解决

 

原创粉丝点击