SQL Server memiliki HAS_DBACCESS()
fungsi yang mengembalikan informasi tentang apakah pengguna memiliki akses ke database tertentu.
Sintaks
Sintaksnya seperti ini:
HAS_DBACCESS ( 'database_name' )
Fungsi mengembalikan 1
jika pengguna memiliki akses ke database, 0
jika pengguna tidak memiliki akses ke database, dan NULL
jika nama database tidak valid.
Ini mengembalikan 0
jika database offline atau dicurigai, dan mengembalikan 0
jika database dalam mode single-user dan database sedang digunakan oleh pengguna lain.
Contoh
Berikut ini contoh untuk didemonstrasikan:
SELECT HAS_DBACCESS('KrankyKranes');
Hasil:
1
Dalam hal ini, 1
dikembalikan, yang berarti bahwa pengguna memiliki akses ke KrankyKranes
basis data.
Basis Data Tidak Ada
Jika database tidak ada, hasilnya adalah NULL
:
SELECT HAS_DBACCESS('Oops');
Hasil:
NULL
Periksa Semua Basis Data
Kita dapat menggunakan query berikut untuk memeriksa akses ke semua database dalam contoh SQL Server:
SELECT
name AS DB,
HAS_DBACCESS(name) AS HasDBAccess
FROM sys.databases;
Hasil:
+-----------------------+---------------+ | 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 | +-----------------------+---------------+
Dalam hal ini, saya memiliki akses ke semua database.
Inilah yang terjadi ketika saya menjalankan kueri sebagai pengguna dengan akses ke lebih sedikit database:
SELECT
name AS DB,
HAS_DBACCESS(name) AS HasDBAccess
FROM sys.databases;
Hasil:
+-----------------------+---------------+ | 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 | +-----------------------+---------------+