David Emerson
davide at dalyn.co.nz
Mon Jul 5 14:43:36 CDT 2004
Because openquery requires a string (see BOL). David At 5/07/2004, you wrote: >Why do you have pairs of quotes around the 'exec master..xp_logininfo' >argument? That may be the problem. > >Arthur > >-----Original Message----- >From: dba-sqlserver-bounces at databaseadvisors.com >[mailto:dba-sqlserver-bounces at databaseadvisors.com] On Behalf Of David >Emerson >Sent: Sunday, July 04, 2004 7:26 PM >To: dba-sqlserver at databaseadvisors.com >Subject: RE: [dba-SQLServer] Finding current login group > > >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 > > > > >_______________________________________________ >dba-SQLServer mailing list >dba-SQLServer at databaseadvisors.com >http://databaseadvisors.com/mailman/listinfo/dba-sqlserver >http://www.databaseadvisors.com > >_______________________________________________ >dba-SQLServer mailing list >dba-SQLServer at databaseadvisors.com >http://databaseadvisors.com/mailman/listinfo/dba-sqlserver >http://www.databaseadvisors.com