Tengo un usuario del servidor SQL que tiene la capacidad de eliminar cualquier base de datos. He estado ejecutando el código a continuación para verificar los derechos que tiene el usuario en SQL Server, pero no he podido identificar cómo el usuario tiene la capacidad de eliminar bases de datos. ¿Existe un script sql que pueda ayudarme a identificar cómo este usuario puede eliminar dbs? ¿Hay un comando para negarles que caigan alguna base de datos? (SSMS no muestra al usuario como parte de la función dbcreator)
select USER_NAME(p.grantee_principal_id) AS principal_name,
dp.type_desc AS principal_type_desc,
p.class_desc,
OBJECT_NAME(p.major_id) AS object_name,
p.permission_name,
p.state_desc AS permission_state_desc
from sys.database_permissions p
inner JOIN sys.database_principals dp
on p.grantee_principal_id = dp.principal_id
order by principal_name
El resultado de la consulta anterior proporciona los siguientes tres registros para el usuario si es útil.
clase_desc nombre_objeto nombre_permisión permiso_descripción_de_objeto OBJETO_COLUMNA xp_cmdshell EJECUTAR OTORGAR BASE DE DATOS NULL CONECTAR OTORGAR
BASE DE DATOS NULL CREAR BASE DE DATOS
fuente
Respuestas:
La consulta que tiene allí solo enumerará los permisos para la base de datos en la que la ejecuta. Una forma de obtener permiso para descartar una base de datos es ALTERAR CUALQUIER BASE DE DATOS, que es un permiso de nivel de servidor. Para verificarlos, intente esta consulta:
En otras palabras, el usuario podría estar obteniendo el permiso para eliminar bases de datos en el nivel de inicio de sesión del servidor en lugar del nivel de usuario de la base de datos.
fuente
Sugeriría ejecutar esta consulta en el maestro
Esto debería darle una idea bastante buena de los roles que tienen acceso a su base de datos maestra y ver el clima o no, el usuario tiene cualquiera de esos roles. También puede ejecutar esto en cualquiera de sus otras bases de datos para verificar los permisos del usuario en una base de datos por nivel de base de datos. Esta debería ser una herramienta importante para ayudar a rastrear esto.
fuente
Lo he usado varias veces con buenos resultados, la fuente del código a continuación se puede encontrar aquí :
En la documentación aquí , los requisitos de seguridad para que un usuario elimine una base de datos se establecen como:
Puede negar explícitamente el permiso a uno mencionado anteriormente, pero comprenda que el nivel en el que lo niega puede no tener efecto como cree. Recuerdo haber leído un documento técnico que explicaba cómo SQL Server valida los permisos de un usuario tras la conexión, pero no puede ubicarlo en este momento. Si recuerdo, puedo negarles la conexión a una base de datos, pero el hecho de que el usuario sea parte del
sysadmin
rol tiene prioridad.Vería la auditoría específicamente para que el
DROP DATABASE
comando sea seguro.fuente