#sql-server #permissions
#sql-server #разрешения
Вопрос:
Я отозвал разрешения на выбор для пользователя в SQL Server и предоставил им доступ к одной таблице, но пользователь все равно может запрашивать все таблицы.
REVOKE SELECT ON "dbo"."TableName" FROM "Domainuser.name"
У меня есть двойная и тройная проверка всех разрешений как для входа, так и для пользователя. Может кто-нибудь, пожалуйста, направить меня в правильном направлении?
Ответ №1:
Чтобы определить все разрешения, которые кто-то может иметь в SQL, вы должны посмотреть:
- Логин SQL, настроенный для входа в их домен. Является ли он членом каких-либо групп на уровне сервера? Есть ли у него какие-либо разрешения на уровне сервера?
- К каким базам данных у него есть доступ?
- Какие разрешения у него есть в этих базах данных?
Я предполагаю, что вы уже это сделали. Следующий уровень:
- Определите все группы доменов, для которых были созданы логины SQL.
- Определите, к какой из этих групп принадлежит ваш пользователь. Выполните те же проверки, что и выше, например, что могут члены этой группы делать в этом экземпляре SQL.
- Обратите внимание, что группы доменов могут содержать группы доменов. В зависимости от того, насколько вы контролируете (или не контролируете) администраторов домена, у вас могут быть сумасшедшие уровни вложенности. И это находится в домене active directory, который у вас может быть или не быть достаточных прав доступа для подробного просмотра.
- Не забывайте о локальных (на этом компьютере) группах, которые часто настраиваются по умолчанию. Является ли пользователь членом локальной группы компьютеров с повышенными правами? Вы ничего не узнаете об этом на уровне домена.
Это, конечно, предполагает, что они используют только свой личный логин в домене, без псевдонимов, «Запуск от имени», логины с аутентификацией SQL, логины приложений и, возможно, некоторые еще более неясные вещи, о которых я сейчас не могу думать. (Вероятно, это не так, если только они вас не огорчают.)
Обратите внимание, что это было не в моей голове. Настройка безопасности SQL — это темное искусство; выяснение, кто был настроен с тем, что может быть кошмаром (и хуже при работе с приложениями, запущенными на системных учетных записях). Удачи!
Комментарии:
1. Пользователь является членом общедоступной группы как на уровне сервера, так и на уровне базы данных, но я не могу удалить их из нее. Должен ли я создать другую группу пользователей для пользователей с доступом к определенным таблицам?
2. Ага. Да, общедоступные роли попадают в ту корзину «неясные вещи», о которой я упоминал. Все логины являются членами общедоступной роли на уровне сервера, а все настроенные пользователи базы данных являются частью общедоступной роли базы данных, и это не может быть изменено. Проверьте, какие права доступа были предоставлены этим ролям, потому что все, у кого есть доступ к (серверу или базе данных), будут иметь эти разрешения.
3. Ваш первоначальный вопрос был «как у них теперь есть эти разрешения», и выяснить это очень важно. Как настроить общую безопасность для вашего сервера / баз данных / приложений (т. Е. Настройка групп доменов и т. Д.) Далеко, Далеко выходит за рамки этого вопроса. В Интернете есть много статей об этом, я рекомендую прочитать две или три, чтобы получить представление о доступных параметрах.
4. Спасибо за вашу помощь. Я ужесточил разрешения для общедоступной группы, создал некоторые роли на уровне сервера, чтобы не отнимать разрешения у других пользователей, а затем создал роль уровня базы данных и запретил операторы Select, чтобы ограничить доступ к определенным таблицам.. Я целый день искал по всему Интернету и все еще не мог найти ответа. Иногда даже точка в правильном направлении может помочь вам разобраться.