我的存储过程:
CREATE PROCEDURE [dbo].[uspUserIsInGroup]
@username varchar(30),
@groupname varchar(30),
@ReturnCount int OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ReturnCount = count(*)
FROM sys.database_role_members AS m
INNER JOIN sys.database_principals AS dp
ON m.member_principal_id = dp.principal_id
INNER JOIN sys.server_principals AS l
ON dp.[sid] = l.[sid]
INNER JOIN sys.database_principals AS r
ON m.role_principal_id = r.principal_id
WHERE 1=1
AND l.name = @username
AND r.name = @groupname
END
我的asp代码:
Set cn = CreateObject("ADODB.Connection")
Set cmd = CreateObject("ADODB.Command")
cn.Open db
Set cmd.ActiveConnection = cn
cmd.CommandText = "uspUserIsInGroup"
cmd.CommandType = 4 '4=adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter("@username", 203, 1, 100, "peds\pss_admin")
cmd.Parameters.Append cmd.CreateParameter("@groupname", 203, 1, 100, "rolePSS_admin")
cmd.Parameters.Append cmd.CreateParameter("@ReturnCount", 200, 2, 255)
cmd.Execute
response.write "value returned is: " & cmd.Parameters(2).Value & "<br />"
我试过了:
response.write "value returned is: " & cmd.Parameters(2).Value & "<br />"
response.write "value returned is: " & cmd.Parameters(2) & "<br />"
response.write "value returned is: " & cmd.Parameters("@ReturnCount").Value & "<br />"
response.write "value returned is: " & cmd.Parameters("@ReturnCount") & "<br />"
我尝试过'@'而没有。我已经检查了权限。在通话情况下,我得到'0',但值应为1.
在SQL上运行跟踪,这就是正在运行的内容:
declare @p3 int
set @p3=0
exec uspUserIsInGroup N'peds\pss_admin',N'rolePSS_admin',@p3 output
select @p3
结果为1。
我做错了什么,我错过了什么?当我从Trace运行代码时,结果有“(No column name)”这个事实是否有任何关系?
谢谢!
答案 0 :(得分:1)
如评论中所述,您的查询结果可能会根据登录用户的权限进行更改。
如果您不想直接授予asp帐户所需的权限,则可以使用procedure signing。
任何用户都可以看到自己的用户名,系统用户和固定用户 数据库角色。要查看其他用户,需要ALTER ANY USER或a 对用户的许可。要查看用户定义的角色,需要ALTER ANY 角色,或角色的成员。
任何用户都可以查看自己的角色成员资格。查看其他角色 成员资格需要db_securityadmin固定数据库的成员资格 角色或查看数据库的定义。
任何登录都可以看到自己的登录名,系统登录名和 固定服务器角色。要查看其他登录,需要ALTER ANY LOGIN或 登录权限。要查看用户定义的服务器角色,请参阅 更改任何服务器角色,或角色的成员资格。
答案 1 :(得分:0)
cmd.Parameters.Append cmd.CreateParameter(&#34; @ username&#34;,203,1,100,&#34; peds \ pss_admin&#34;) cmd.Parameters.Append cmd.CreateParameter(&#34; @ groupname&#34;,203,1,100,&#34; rolePSS_admin&#34;) cmd.Parameters.Append cmd.CreateParameter(&#34; @ ReturnCount&#34;,200,2,255)
- 应该是 -
cmd.Parameters.Append cmd.CreateParameter("@username", adVarChar, adParamInput, 30, "peds\pss_admin")
cmd.Parameters.Append cmd.CreateParameter("@groupname", adVarChar, adParamInput, 30, "rolePSS_admin")
cmd.Parameters.Append cmd.CreateParameter("@ReturnCount",adInteger,adParamOutput)
其中adInteger = 3,adParamOutput = 2,adVarChar = 200
所以使用硬编码数字的语句输出参数应为:
cmd.Parameters.Append cmd.CreateParameter("@ReturnCount", 3, 2)