Каковы эффективные методы предоставления разрешений базы данных для подключения к веб-службе? - PullRequest
0 голосов
/ 07 июня 2019

Я искал статьи и примеры сценариев SQL, которые продемонстрировали бы, как безопасно и удобно решать один из самых распространенных сценариев - подключение веб-приложения на основе .Net Core Entity Framework к базе данных SQL.

Но почему-то я не смог найти последовательного пошагового руководства из авторитетного источника.

Давайте предположим следующее:

  • Я не могу использовать встроенную аутентификацию Windows в строке подключения и должен использовать аутентификацию на основе имени пользователя и пароля (поскольку хостинг на сервере Linux, а БД находится на другом сервере Windows)

  • веб-сервису потребуется ваш обычный минимальный набор разрешений - подключаться к базе данных, читать данные, записывать данные, удалять данные, выполнять хранимые процедуры

Читая много учебников, я обнаружил, что есть несколько способов управления разрешениями на подключение. Чтобы этот вопрос не был слишком широким, я перечислю свои текущие варианты, как я их понимаю (пожалуйста, исправьте меня, если я что-то упустил).

Пользователи и логины:

  • создать логин и пользователя для базы данных
  • создать пользователя только для базы данных без имени входа (не уверен, применимо ли это к веб-приложению и строке подключения, но, тем не менее, эта функция, которую я видел, используется)

Назначение разрешений:

  • назначить пользователю некоторую фиксированную роль SQL (db_datareader, db_datawriter И также должен будет предоставить разрешение EXECUTE)
  • предоставить все фиксированные разрешения
  • создать пользовательскую роль (скажем, db_web_apps) с необходимыми разрешениями

Какие варианты лучше (безопаснее и проще для управления в целом) и рекомендованы администраторами SQL?

Я думаю, что у каждого администратора базы данных должен быть удобный шаблонный скрипт для быстрого добавления нового пользователя с минимальными необходимыми разрешениями каждый раз, когда разработчики запрашивают новое соединение для своего нового блестящего веб-приложения.

Если вы знаете хороший, надежный учебник или пример GitHub / Gist, который объясняет, что и почему выполняется таким образом, или сценарий, который вы сами использовали в течение многих лет без каких-либо проблем в производственных средах, я буду очень признателен, если вы мог бы поделиться этим.

1 Ответ

1 голос
/ 07 июня 2019

Создать роль в базе данных и назначить ей необходимые привилегии.Не используйте фиксированные роли базы данных.Вместо этого предоставьте разрешения непосредственно объектам, схемам или всей базе данных, если это необходимо.Например:

create role trusted_app_role
grant select, insert, update, delete, execute 
  on schema::dbo to trusted_app_role

Это предоставит роли полные разрешения DML для всех объектов в схеме dbo по умолчанию.Поэтому, если у вас есть какие-либо таблицы или процедуры, к которым у приложения нет доступа, просто создайте их в другой схеме, скажем, admin.Таким образом, вам никогда не придется возиться с разрешениями при добавлении объектов.Фиксированные роли базы данных предшествуют разрешениям на основе схемы и больше не нужны.

Для удостоверения вашего приложения добавьте в эту роль удостоверения Active Directory или Azure Active Directory (Azure SQL) или, если выневозможно, добавьте пользователей SQL к роли.

Если вы используете Azure SQL, обычно вы должны использовать пользователя базы данных без имени входа.На SQL Server вы можете добавлять «пользователей автономной базы данных» только в том случае, если вы включили Частичная защита базы данных .Что вы можете сделать, но несовместимо с отслеживанием изменений и сбором данных изменений, так что это компромисс.

Так что обычно для SQL Server вы по-прежнему создаете имя входа и сопоставляете пользователя с именем входа.EG:

create login web_service_user with password = '5X+jeuAB6kmhw85R/AxAg'
create user web_service_user for login web_service_user

А затем добавить этого пользователя в свою роль

alter role trusted_app_role add member web_service_user
...