Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

HAS_DBACCESS () - Khám phá xem người dùng có thể truy cập cơ sở dữ liệu trong SQL Server không

SQL Server có HAS_DBACCESS() hàm trả về thông tin về việc người dùng có quyền truy cập vào cơ sở dữ liệu được chỉ định hay không.

Cú pháp

Cú pháp như sau:

HAS_DBACCESS ( 'database_name' )

Hàm trả về 1 nếu người dùng có quyền truy cập vào cơ sở dữ liệu, 0 nếu người dùng không có quyền truy cập vào cơ sở dữ liệu và NULL nếu tên cơ sở dữ liệu không hợp lệ.

Nó trả về 0 nếu cơ sở dữ liệu ngoại tuyến hoặc nghi ngờ và nó trả về 0 nếu cơ sở dữ liệu ở chế độ một người dùng và cơ sở dữ liệu đang được người dùng khác sử dụng.

Ví dụ

Dưới đây là một ví dụ để chứng minh:

SELECT HAS_DBACCESS('KrankyKranes');

Kết quả:

1

Trong trường hợp này, 1 đã được trả lại, có nghĩa là người dùng có quyền truy cập vào KrankyKranes cơ sở dữ liệu.

Cơ sở dữ liệu không tồn tại

Nếu cơ sở dữ liệu không tồn tại, kết quả là NULL :

SELECT HAS_DBACCESS('Oops');

Kết quả:

NULL

Kiểm tra tất cả cơ sở dữ liệu

Chúng tôi có thể sử dụng truy vấn sau để kiểm tra quyền truy cập vào tất cả cơ sở dữ liệu trong phiên bản SQL Server:

SELECT 
    name AS DB,
    HAS_DBACCESS(name) AS HasDBAccess
FROM sys.databases;

Kết quả:

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

Trong trường hợp đó, tôi có quyền truy cập vào tất cả cơ sở dữ liệu.

Đây là những gì sẽ xảy ra khi tôi chạy truy vấn với tư cách là người dùng có quyền truy cập vào ít cơ sở dữ liệu hơn:

SELECT 
    name AS DB,
    HAS_DBACCESS(name) AS HasDBAccess
FROM sys.databases;

Kết quả:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. So sánh phần thời gian bỏ qua DATETIME và DATE

  2. Giới thiệu tính năng mới - Phân tích bế tắc

  3. Khắc phục sự cố sao chép giao dịch SQL Server

  4. ExecuteScalar so với ExecuteNonQuery khi trả về giá trị nhận dạng

  5. Làm cách nào để thay đổi ràng buộc khóa chính bằng cú pháp SQL?