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 | +-----------------------+---------------+