К обсуждениям

Azure SQL выдаёт error 916 при least privilege: матрица principal × database

Редакция VOne Технологии

Как разобрать ошибки 916 и 18456 в Azure SQL Database, когда admin входит, а SQL user или managed identity нет: principal, target database, CONNECT и граница Azure RBAC.

Разделите authentication и доступ к базе

Ошибка 18456 относится к неуспешному входу, а сообщение 916 указывает, что server principal не может получить доступ к названной database в текущем security context. Запишите оба номера, state при наличии, target server, target database и выбранный authentication mode. Не прикладывайте пароль, access token или полную connection string. То, что SQL admin подключается, подтверждает доступность endpoint и его собственные полномочия, но ничего не доказывает о principal приложения. Сравнивать нужно одну и ту же identity с явно заданной базой, а не admin и приложение как эквивалентные тесты.

Постройте матрицу principal × database

Строки матрицы — SQL user, system-assigned или user-assigned managed identity и admin только как контроль. Колонки — virtual master, целевая database, наличие соответствующего database principal и минимальное разрешённое действие. Microsoft объясняет, что Microsoft Entra authentication для Azure SQL не интегрируется с Azure RBAC для выполнения SQL-запросов: identity должна быть создана как principal в нужной базе. Поэтому роль Contributor на Azure-ресурсе не заменяет `CREATE USER ... FROM EXTERNAL PROVIDER` и database permissions.

Проверьте target database до выдачи ролей

Клиент может по умолчанию пытаться открыть master, хотя пользователь создан только в рабочей базе. В официальной диагностике Microsoft для такого случая предлагается явно выбрать доступную target database. Сначала задайте её в безопасном тесте и подтвердите текущую identity функцией или metadata query, разрешённой вашей политикой. Затем проверьте наличие principal в `sys.database_principals` и только нужное действие. Не добавляйте db_owner ради проверки: широкая роль скрывает, отсутствовал ли CONNECT, сам user или объектное разрешение.

Эскалируйте минимальный воспроизводимый набор

Проведите два теста одной identity: подключение к явно указанной базе и выполнение безвредного запроса, согласованного владельцем данных. Сохраните UTC-время, driver и authentication mode, server и database в обезличенном виде, client request ID и ошибки 18456/916. Если user существует и CONNECT разрешён, но результат зависит от базы или клиента, не меняйте firewall и роли одновременно. Критерий остановки — principal подтверждён в целевой базе, target database задана явно, а ошибка воспроизводится с минимальной командой. Такой пакет достаточен для DBA или поддержки без секрета.

Материал подготовлен редакцией VOne с применением ИИ для структурирования; факты вручную сверены с официальной документацией Microsoft, а форумная ветка использована только как обезличенный сигнал боли.

Источники и проверка

Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.

Ответы

0 опубликовано
Ответов пока нет. Вы можете начать обсуждение.

Ваш ответ

Добавьте свой опыт или уточнение по теме.

Вы публикуете как Аноним Аватар отличает разговоры, но не раскрывает личные данные.

Ответ появится сразу. Не публикуйте личные данные, ключи и приватные ссылки.