SQLServerにはHAS_DBACCESS()
があります ユーザーが指定されたデータベースにアクセスできるかどうかに関する情報を返す関数。
構文
構文は次のようになります:
HAS_DBACCESS ( 'database_name' )
この関数は1
を返します ユーザーがデータベースにアクセスできる場合は、0
ユーザーがデータベースにアクセスできない場合、およびNULL
データベース名が有効でない場合。
0
を返します データベースがオフラインまたは疑わしい場合、0
を返します データベースがシングルユーザーモードで、データベースが別のユーザーによって使用されている場合。
例
デモンストレーションの例を次に示します。
SELECT HAS_DBACCESS('KrankyKranes');
結果:
1
この場合、1
が返されました。これは、ユーザーがKrankyKranes
にアクセスできることを意味します。 データベース。
存在しないデータベース
データベースが存在しない場合、結果はNULL
になります :
SELECT HAS_DBACCESS('Oops');
結果:
NULL
すべてのデータベースを確認
次のクエリを使用して、SQLServerインスタンス内のすべてのデータベースへのアクセスを確認できます。
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 | +-----------------------+---------------+