Могу ли я безопасно подтвердить, что у меня нет доступа к базе данных? - PullRequest
1 голос
/ 09 октября 2019

Фон

У меня есть приложение, которое охватывает несколько баз данных на Microsoft SQL Server, назовем их PROD и ARCHIVE. В целях аудита, когда пользователь обращается к базам данных через приложение, их учетные данные используются в базе данных.

В некоторых установках этого приложения ARCHIVE не существует, и имеется код для обработки, отсутствующий в sys.databases. Но когда ARCHIVE существует, у всех есть доступ к PROD и ARCHIVE.

Проблема

Мы хотели бы иметь возможность фрагментировать приложение так, чтобы все пользователи сохраняли доступ к PROD, но некоторые пользователине могут получить доступ к АРХИВУ. В этих случаях я хотел бы использовать ветвление, которое мы должны проверить, существует ли ARCHIVE и имеет ли текущий логин какой-либо доступ к нему.

Не так уж плохо, за исключением того, что я должен иметь возможность запуститьзапрос, который находит его только с доступом к PROD, и большая часть того, что я могу найти в Интернете, дает мне запросы для запуска с ARCHIVE.sys.database_permissions.

Есть ли запрос, который я могу запустить, чтобы проверитьчто я не могу получить доступ к АРХИВУ, когда у меня есть только доступ к PROD?

1 Ответ

2 голосов
/ 09 октября 2019

HAS_DBACCESS

Немного больше поиска привело меня к этому:

HAS_DBACCESS возвращает 1, если пользователь имеет доступ к базе данных, 0, если пользователь не имеет доступа к базе данныхи NULL, если имя базы данных недопустимо.

(через MSDN)

Итак, что мне было нужно в этом случае, оказалось довольно простым:

select cast (ISNULL(HAS_DBACCESS('ARCHIVE'), 0) as bit);

, который отлично работает на PROD. Я не уверен на 100% в этом, потому что он также вернет false, если база данных была переведена в автономный режим, что, возможно, на самом деле мне нужно, чтобы на стороне пользователя была видимость, но с этим позже придется разобраться при разработке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...