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

Khắc phục “Máy chủ SQL bị chặn truy cập vào STATEMENT‘ OpenRowset / OpenDatasource ’của thành phần‘ Truy vấn phân tán Ad Hoc ”

Nếu bạn gặp lỗi Msg 15281, Cấp 16 trong SQL Server, rất có thể bạn đang cố chạy truy vấn phân phối đặc biệt, nhưng bạn chưa bật truy vấn phân phối đặc biệt.

Điều này có thể được khắc phục dễ dàng bằng cách bật các truy vấn phân tán đặc biệt.

Ví dụ về lỗi

Dưới đây là một ví dụ về mã tạo ra lỗi.

SELECT * FROM OPENROWSET(
    'SQLNCLI', 
    'Server=Homer;Trusted_Connection=yes;', 
    'SELECT * FROM Music.dbo.vAlbums');

Kết quả:

Msg 15281, Level 16, State 1, Line 1
SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', search for 'Ad Hoc Distributed Queries' in SQL Server Books Online.

Khi thông báo lỗi nêu rõ, quản trị viên hệ thống có thể kích hoạt các truy vấn phân tán đặc biệt bằng cách sử dụng sp_configure hệ thống lưu trữ thủ tục.

Giải pháp

Chạy mã sau để khắc phục sự cố.

EXEC sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE WITH OVERRIDE
GO

Phần đầu tiên cho phép hiển thị các tùy chọn nâng cao, hiển thị sp_configure hệ thống lưu trữ các tùy chọn nâng cao thủ tục. Nếu điều này không được bật, bạn sẽ gặp một lỗi khác (có thể là lỗi trong tin nhắn 15123), cho biết rằng tùy chọn cấu hình không tồn tại hoặc nó có thể là một tùy chọn nâng cao.

Phần thứ hai sử dụng sp_configure để bật tùy chọn truy vấn phân tán đặc biệt.

Sau khi chạy mã đó, bạn sẽ có thể chạy các truy vấn phân tán đặc biệt.

Ẩn các tùy chọn nâng cao

Khi bạn đã bật truy vấn phân phối đặc biệt, bạn có thể nên ẩn lại các tùy chọn nâng cao hiển thị.

EXEC sp_configure 'show advanced options', 0;  
GO
RECONFIGURE;  
GO

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để bạn sao chép bản ghi trong bảng SQL nhưng hoán đổi id duy nhất của hàng mới?

  2. Ví dụ về CTE và đệ quy của SQL Server

  3. T-SQL lấy số ngày làm việc giữa 2 ngày

  4. lấy một chuỗi được phân tách bằng dấu phẩy từ các hàng

  5. Làm cách nào để thoát khỏi một trích dẫn duy nhất trong SQL Server?