Как разобрать ошибки 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, а форумная ветка использована только как обезличенный сигнал боли.
Источники и проверка
- Microsoft Learn — MSSQLSERVER_916 проверено 2026-07-31
- Microsoft Learn — Microsoft Entra authentication for Azure SQL проверено 2026-07-31
- Microsoft Learn — Troubleshoot common Azure SQL connection issues проверено 2026-07-31
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.