SQL Server има HAS_DBACCESS()
функция, която връща информация за това дали потребителят има достъп до определена база данни.
Синтаксис
Синтаксисът е така:
HAS_DBACCESS ( 'database_name' )
Функцията връща 1
ако потребителят има достъп до базата данни, 0
ако потребителят няма достъп до базата данни, и NULL
ако името на базата данни не е валидно.
Връща 0
ако базата данни е офлайн или подозрителна и връща 0
ако базата данни е в режим на един потребител и базата данни се използва от друг потребител.
Пример
Ето пример за демонстрация:
SELECT HAS_DBACCESS('KrankyKranes');
Резултат:
1
В този случай 1
беше върнат, което означава, че потребителят има достъп до KrankyKranes
база данни.
Несъществуваща база данни
Ако базата данни не съществува, резултатът е NULL
:
SELECT HAS_DBACCESS('Oops');
Резултат:
NULL
Проверете всички бази данни
Можем да използваме следната заявка, за да проверим достъпа до всички бази данни в екземпляра на SQL Server:
SELECT
name AS DB,
HAS_DBACCESS(name) AS HasDBAccess
FROM sys.databases;
Резултат:
+-----------------------+---------------+ | DB | HasDBAccess | |-----------------------+---------------| | master | 1 | | tempdb | 1 | | model | 1 | | msdb | 1 | | Music | 1 | | KrankyKranes | 1 | | Test | 1 | | WideWorldImporters | 1 | | World | 1 | | DomainDispute | 1 | | PetHotel | 1 | | StereoSystems | 1 | | NarrowNationExporters | 1 | +-----------------------+---------------+
В този случай имах достъп до всички бази данни.
Ето какво се случва, когато стартирам заявката като потребител с достъп до по-малко бази данни:
SELECT
name AS DB,
HAS_DBACCESS(name) AS HasDBAccess
FROM sys.databases;
Резултат:
+-----------------------+---------------+ | DB | HasDBAccess | |-----------------------+---------------| | master | 1 | | tempdb | 1 | | model | 0 | | msdb | 1 | | Music | 0 | | KrankyKranes | 0 | | Test | 1 | | WideWorldImporters | 0 | | World | 0 | | DomainDispute | 0 | | PetHotel | 0 | | StereoSystems | 0 | | NarrowNationExporters | 0 | +-----------------------+---------------+