![]()
madecapital.com
thefinancialtrading.com
grandesbodas.com
mundoface.com
goodtradings.com
good-trades.com
lasjugueterias.com
takenprofit.com
takesprofit.com
thetradingexperience.com
sqlenlinea.com
Hola gente ! hoy inauguramos un nueva tema en el foro el cual es la seguridad en sql server, espero les sea de utilidad !.

JuanPLG
Comentarios
Hola a todos ! necesito que me ayuden:
Existe algún perfil que se le pueda dar a alguien para leer TODO y SOLO crear, pero NO quiero que puedan modificar nada.
¿Es esto posible?
Gracias de antemano.
Marqui.
Hola como estas ! bueno te comento, según la version del dbms que estes usando es la solución, fijate y comentame.
PARA SQL2000
USE [BaseXQUERY]
GO
CREATE TABLE [dbo].[t1](
[c1] [varchar](255) NULL,
[c2] [int] NULL
) ON [PRIMARY]
GO
EXEC sp_grantdbaccess pepe,pepe
EXEC sp_addrolemember N'db_datareader', N'pepe';
GO
GRANT CREATE TABLE TO pepe;
GO
PRUEBA A REALIZAR
Te logueas como pepe.
create table #t2 (c1t char(10),c2t char(10))
insert into #t2 select * from t1
select * from #t2
drop table #t2
delete from t1
update t1 set c1 = null
SALIDA:
ab 1
cd 2
ef 3
(3 row(s) affected)
(3 row(s) affected)
Server: Msg 229, Level 14, State 5, Line 1
DELETE permission denied on object 't1', database 'BaseXQUERY', owner 'dbo'.
Server: Msg 229, Level 14, State 5, Line 1
UPDATE permission denied on object 't1', database 'BaseXQUERY', owner 'dbo'.
PARA SQL2005
USE [BaseXQUERY]
GO
EXEC sp_addrolemember N'db_datareader', N'pepe';
GO
GRANT ALTER ON SCHEMA::[dbo] TO [pepe];
GO
GRANT CREATE TABLE TO Pepe;
GO
PRUEBA
Te logueas como pepe.
create table #t2 (c1t char(10),c2t char(10))
insert into #t2 select * from t1
select * from #t2
drop table #t2
delete from t1
update t1 set c1 = null
SALIDA:
(3 row(s) affected)
c1t c2t
---------- ----------
AB 1
AC 2
ZZ 3
(3 row(s) affected)
Msg 229, Level 14, State 5, Line 5
The DELETE permission was denied on the object 't1', database 'BaseXQUERY', schema 'dbo'.
Msg 229, Level 14, State 5, Line 6
The UPDATE permission was denied on the object 't1', database 'BaseXQUERY', schema 'dbo'.
Exitos totales !!!!!!.
Prodriguez
Buenas noches a todos.
Quisiera saber como se puede restringir el acceso al motor de base de datos a los usuarios de la red, ni instalando el sql server en la terminal de trabajo ni ninguna otra aplicacion de acceso a bases de datos. Esto para evitar manipulacion indebida de la informacion almacenada.
Muchisimas gracias por su colaboracion...
Hola !, con respecto a la seguridad tenes tres niveles a tener en cuenta:
Nivel 1: Cerrar seguridad en la red
Nivel 2: Cerrar seguridad en el dbms, en este caso SQL Server
Nivel 3: Cerrar la seguridad en la aplicaciones.
Te detallo en rasgos generales cada nivel:
Nivel 1) Se refiere a la seguridad física (Sala de servidores) y seguridad lógica entre ellos configuración de firewall, encriptación de datos a través de los routers, no asignar privilegios adm a los usuarios finales en sus wks, etc.
Nivel 2) Se refiere a la configuración interna del SQL Server:
Solo autenticación trusted (AD de Windows).
Eliminar el grupo Builtin Administrators.
Generar un grupo global para asignación de usuarios como sysadmin del SQL.
Usuarios como dbowner de las bases, solo para las aplicaciones que explícitamente los necesiten.
Relacionado al punto anterior generar una cuenta aplicación en AD para que solo ella pueda acceder con esos privilegios a través de la APP.
Nivel 3) Se refiere al diseño de las aplicaciones.
Definir un usuario aplicación del tipo trusted (usuario windows) para acceso a la base. (Hereda todos las políticas aplicadas, por ej: política de complejidad de contraseña)
Acceder a los datos a través del usuario aplicación, mediante stored procedures y vistas.
Trabajar con roles de base de datos si es necesario.
Dbowner de las bases restringir lo máximo posible. (granularidad de permisos).
Tratar de revocar permisos sobre los stored procedures extendidos (xp_...).
Para todos los niveles, es recomendable guardar auditoria y realizar monitoreos mediante alertas (Por ej: SCOM o en su vieja version MOM).
Tenes un articulo muy bueno en ntro sitio al cual podes echar un vistazo.
http://www.todosql.com/hackers-pueden-atacar-sql-server
Un abrazo virtual !
Muchas gracias por la respuesta.. Tocara empezar a hacer las respectivas pruebas.
En el log de sql2005, me deja el siguiente texto si se borra una base de datos:
2009-10-07 11:25:13.06 spid54 SQL Server has encountered 2 occurrence(s) of cachestore flush for the 'Object Plans' cachestore (part of plan cache) due to some database maintenance or reconfigure operations.
2009-10-07 11:25:13.07 spid54 SQL Server has encountered 2 occurrence(s) of cachestore flush for the 'SQL Plans' cachestore (part of plan cache) due to some database maintenance or reconfigure operations.
2009-10-07 11:25:13.07 spid54 SQL Server has encountered 2 occurrence(s) of cachestore flush for the 'Bound Trees' cachestore (part of plan cache) due to some database maintenance or reconfigure operations.
Como puedo saber el nombre de la base de datos borrada???.
Muchas gracias, Paco
Hola Paco como estas !, bueno, seguramente utilizaste el wizard o ayudante de SQL Server para generar un plan de mantenimiento de base de datos, es por ello que cada vez que se elimina una base de datos, te queden jobs apuntando a la base borrada. Lo primero que haría es chequear la salida de todos los jobs agendados en el sql server, para ver errores y warning.
Con respecto a como saber cual es la base de datos borrada es muy sencillo:
1) Query para listar base de datos:
select dbid,dbname from sysdatabases;
2) Buscar por el errorlog de SQL server los siguientes string:
deleted database
drop database
removed database
3) Para determinar en tiempo de ejecución que aplicacion o usuario puede estar borrando una base de datos, levanta un Profiler de SQL Server y graba en una tabla o archivo para almacenar y luego realizar la búsqueda.
Abrazo virtual.
nalonso
Muchas gracias JLopez por tu ayuda. Voy a poner en marcha lo que me propones.
como puedo saber que usario elimino un registro de la DB
como puedo visualizar el log de esta
saludos
Victor C
Hola Victor como estas !, te comento, en versiones 2005 y superior lo podes encarar a través de DML TRIGGERS, para las operaciones de DELETE sobre la tabla afectada.
Para poder registrar y leer la actividad deberías crear una tabla en la misma base de datos o bien en otra tipo de auditoria, donde el trigger realice un insert a la misma, con los datos de usuario y registro.
Puedes utilizar las funciones SESSION_USER (Transact-SQL), USER_NAME,SUSER_SNAME para determinar el usuario y GETDATE() fecha y hora entre otras funciones.
Resumiendo:
TRIGGERS DML, FUNCIONES y TABLAS de auditoria.
Espero te sirva.
Abrazo Virtual.
nalonso
Que tal gente, como le puedo hacer para que una persona no pueda abrir dos veces el query analyzer con su mismo usuario y password... por seguridad ya corro una trace de actividad de consulta a tablas, pero no quiero que dos peronas puedan leer las tablas con el mismo usuario....
Gabriel GM
Hola Gabriel como estas !, te cuento que para solucionar tu duda, lo que te aconsejo es que utilices "Logon Triggers" que es una feature nueva a partir de SQL Server 2005 y por lógica aplicable en 2008.
Nosotros a la brevedad estaremos subiendo un articulo relacionado a tip de seguridad en sql server y tocaremos el tema "Logon Triggers"
Que versiòn de SQL estàs utilizando ?
Te paso un artìculo que te serà muy útil para que puedas realizar pruebas:
http://msdn.microsoft.com/en-us/library/bb326598(SQL.90).aspx
Contame como te fue.
nalonso
Gracias por responder, la version que utilizo es SQL 2000 y supongo que esta es una razon mas para emigrar al 2005.....
Gabriel GM
Hola tengo un problema, necesito los logins que ingresan a SQL Server en un 2005 y solo veo 'sa' y 'Loprete' que es mi usuario, saben que puede estar pasando ?, lo que estoy corriendo es:
sqlcmd -SServerDB06CC0001 -E -Q "select loginname from master.sys.syslogins"
Gracias !
Ok, como estas !, vamos por parte:
1) Si estas corriendo sobre un SQLServer 2005, deberías reemplazar el TSQL por:
"select name from sys.server_principals"
2) Solo ves 'sa' y 'loprete' pues te faltan permisos.
3) Para solucionar el problema y que te muestre todos los loguines te deben agregar al rol de servidor "Security Admin''.
Saludos,
nalonso
Compartir