David Emerson
davide at dalyn.co.nz
Sun Jul 4 18:26:28 CDT 2004
More testing - I have written the following sproc -
declare @qs nvarchar(4000)
DELETE FROM ttmpTemporary
SELECT @qs = ' INSERT INTO ttmpTemporary (F1)
SELECT Privilege
FROM openquery(localServer, ''exec master..xp_logininfo'')'
EXEC (@qs)
When run from query analyzer I get the following message -
Server: Msg 7357, Level 16, State 2, Line 1
Could not process object 'exec master..xp_logininfo'. The OLE DB provider
'SQLOLEDB' indicates that the object has no columns.
OLE DB error trace [Non-interface error: OLE DB provider unable to process
object, since the object has no columnsProviderName='SQLOLEDB', Query=exec
master..xp_logininfo'].
Yet when I run "EXEC master..xp_logininfo" in Query Analyzer I get a result
set with the columns expected in BOL.
This is starting to get urgent.
David
At 5/07/2004, you wrote:
>OK - getting closer.
>
>I have a procedure in my FE like this -
>
> Dim cmd As ADODB.Command, strCurrentUser As String, rst As
> ADODB.Recordset
>
> 'This returns the user (eg egas\david)
> Set cmd = basGetCommand("dbo.spGetCurrentUser", adCmdStoredProc)
> cmd.Parameters.Append cmd.CreateParameter("@CurrUser", adVarChar,
> adParamOutput, 100)
> cmd.Execute
> strCurrentUser = cmd.Parameters("@CurrUser")
>
> Set cmd = basGetCommand("master..xp_logininfo", adCmdStoredProc)
> cmd.Parameters.Append cmd.CreateParameter("@acctname", adVarChar,
> adParamInput, 100, strCurrentUser)
> Set rst = cmd.Execute
> basGetCurrentRole = ""
> If Not (rst.BOF Or rst.EOF) Then 'Record exist <= Error
> occurs here
> rst.MoveFirst
> While Not rst.EOF
> 'Users should only belong to 1 login group
> If Not IsNull(rst![Permission Path]) Then basGetCurrentRole =
> rst![Permission Path]
> rst.MoveNext
> Wend
> End If
>
>When this is run I get an error on the line above where indicated. The
>number is 3704 - Operation is not allowed when object is closed. Why
>should it be closed when I have just opened it?
>
>Billy's code below works ok if run from Query Analyzer. I have given the
>users permissions to execute master..xp_logininfo.
>
>David
>
>At 4/07/2004, you wrote:
>>xp_logininfo sproc is in master db... so try...
>>
>>/* -- cut here */
>>DECLARE @sys_usr varchar(100)
>>SET @sys_usr = SYSTEM_USER
>>SELECT @sys_usr
>>EXEC master..xp_logininfo @sys_usr
>>/* -- cut here */
>>
>>be aware of the execute permissions of this sproc...from bol, it reads:
>>
>>Execute permissions for xp_logininfo default to members of the db_owner
>>fixed database role in the master database and members of the sysadmin
>>fixed server role, but can be granted to other users.
>>
>>HTH
>>
>>Billy
>
>_______________________________________________
>dba-SQLServer mailing list
>dba-SQLServer at databaseadvisors.com
>http://databaseadvisors.com/mailman/listinfo/dba-sqlserver
>http://www.databaseadvisors.com
>
>