У меня есть пользователь сервера sql, который может удалить любую базу данных. Я запускаю приведенный ниже код, чтобы проверить права, которые пользователь имеет в SQL Server, но не смог определить, как пользователь имеет возможность удалять базы данных. Есть ли сценарий SQL, который может помочь мне определить, как этот пользователь может отбрасывать БД? Есть ли команда, чтобы запретить им сбросить какие-либо базы данных? (SSMS не показывает пользователя как часть роли 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
Вывод запроса выше предоставляет следующие три записи для пользователя, если это полезно
class_desc object_name PERMISSION_NAME permission_state_desc OBJECT_OR_COLUMN xp_cmdshell ВЫПОЛНИТЬ GRANT DATABASE NULL CONNECT GRANT
DATABASE NULL CREATE DATABASE ГРАНТ
sql-server-2008
permissions
комковатый
источник
источник
Ответы:
Полученный вами запрос будет содержать список разрешений только для той базы данных, с которой вы его выполняете. Одним из способов получить разрешение на удаление базы данных является ALTER ANY DATABASE, которая представляет собой разрешение на уровне сервера. Чтобы проверить это, попробуйте этот запрос:
Другими словами, пользователь может получать разрешение на удаление баз данных на уровне входа в систему сервера, а не на уровне пользователя базы данных.
источник
Я бы предложил запустить этот запрос на мастере
Это должно дать вам довольно хорошее представление о ролях, которые имеют доступ к вашей основной базе данных и видят погоду или нет, у пользователя есть какие-либо из этих ролей. Вы также можете запустить это для любой другой базы данных, чтобы проверить разрешения пользователя для базы данных по уровню базы данных. Это должно быть важным инструментом, чтобы помочь отследить это.
источник
Я использовал это несколько раз с некоторыми хорошими результатами, источник кода ниже можно найти здесь :
Переходя к документации здесь , требования безопасности для пользователя для удаления базы данных сформулированы как:
Вы можете явно отказать в разрешении одному из упомянутых выше, но понимаете, что уровень, на котором вы это отрицаете, может не повлиять так, как вы думаете. Я помню, как читал технический документ, в котором рассказывалось, как SQL Server проверяет разрешения пользователя при подключении, но не может найти его прямо сейчас. Если я вспоминаю, я могу отказать им в подключении к базе данных, но тот факт, что пользователь является частью
sysadmin
роли, имеет приоритет.Я бы посмотрел на одитинг специально, чтобы
DROP DATABASE
команда была в безопасности.источник