2012-07-07 86 views
0

以下是我的SQL查詢的SQL Server 2005上運行正常,但是SQL Server 2008上,它拋出的錯誤:SQL查詢錯誤:SQLDMO

sp_Security error: Unable to create SQLDMO Server object

SQL查詢:

DECLARE @object int 
DECLARE @hr int 
DECLARE @hack smallint 
DECLARE @return varchar(255) 
DECLARE @Results nvarchar(255) 
DECLARE @server sysname 
DECLARE @login sysname 
DECLARE @tsql varchar(1500) 

set @server = 'YOGESH\SQLEXPRESS' 

EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT 

IF @hr < 0 
BEGIN 
    RAISERROR('sp_Security error: Unable to create SQLDMO Server object', 0, 1) 
    RETURN 
END 

EXEC @hr = sp_OASetProperty @object,'LoginSecure', 'False' 

IF @hr < 0 
BEGIN 
    RAISERROR('sp_Security error: Unable to set LoginSecure', 0, 1) 
    GOTO ExitProc 
END 

Print ' Security Audit for Server : ' + @server 

set @tsql = 'DECLARE login_cursor CURSOR FOR SELECT loginname FROM master.dbo.syslogins order by loginname' 

exec (@tsql) 

OPEN login_cursor 

FETCH NEXT FROM login_cursor 
INTO @login 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    set @hack = 0 
    set @Results = 'Connect("' + @server +'","'[email protected]+'","'[email protected]+'")' 

    EXEC @hr = sp_OAMethod @object, @Results 

    IF @hr = 0 
    begin 
     print 'login : ' + @login + ' security problem with password ' + @login 
     EXEC @hr = sp_OAMethod @object, 'Disconnect' 

     set @hack = 1 
    end 

    IF (@hack = 0) 
    begin 
    set @Results = 'Connect("' + @server +'","'[email protected]+'","'+'")' 

    EXEC @hr = sp_OAMethod @object, @Results 

    IF @hr = 0 
    begin 
     print 'login : ' + @login + ' security problem with password NULL' 

     EXEC @hr = sp_OAMethod @object, 'Disconnect' 

     set @hack = 1 
    end 
    end 
+0

可能的重複:[在SqlServer 2008中的SQLDMO類似的問題](http://stackoverflow.com/questions/2875145/sql-server-2008-alternative-for-sql-dmo)在2010年發佈(和回答) 。請參見[服務器管理對象](http://msdn.microsoft.com/zh-cn/library/ms162169.aspx)。 – hardmath 2012-07-07 13:31:35

回答

1

正如hardmath的評論中所述,Microsoft不再使用SQL Server 2008分發SQL-DMO庫,轉而使用SQL SMO。即便如此,您仍然可以通過「Microsoft SQL Server 2005向後兼容性組件」安裝SQL-DMO(您可以在this page上找到該軟件包的下載鏈接)。

這是一種替代方法,以使SQL Server登錄不使用SQL-DMO:

USE [master] 
GO 
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', REG_DWORD, 2 
GO 

我懷疑上面的代碼將無法在版本的SQL Server之前到SQL Server 2008工作

+0

不錯,你已經收集了一些有用的花絮在一個答案! – hardmath 2012-07-07 21:06:30