0

以下は、SQL Server 2005 では問題なく動作する SQL クエリですが、SQL Server 2008 ではエラーがスローされます。

sp_Security エラー: SQLDMO サーバー オブジェクトを作成できません

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 +'","'+@login+'","'+@login+'")'

   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 +'","'+@login+'","'+'")'

     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
4

1 に答える 1

1

hardmath からのコメントで参照されているように、Microsoft は SQL SMO を優先して SQL Server 2008 で SQL-DMO ライブラリを配布しなくなりました。それでも、'Microsoft SQL Server 2005 Backward Compatibility Components' を介して SQL-DMO をインストールすることができます (このページでそのパッケージのダウンロード リンクを見つけることができます)。

SQL-DMO を使用しない SQL Server ログインを有効にする別の方法を次に示します。

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

上記のコードは、SQL Server 2008 より前のバージョンの SQL Server では機能しないと思われます。

于 2012-07-07T13:55:32.400 に答える