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

Cách bật / tắt quyền truy cập dữ liệu trong SQL Server (Ví dụ T-SQL)

SQL Server có tùy chọn cấu hình "truy cập dữ liệu" cho phép và vô hiệu hóa một máy chủ được liên kết để truy cập truy vấn phân tán.

Nếu bạn từng gặp lỗi “Máy chủ không được định cấu hình cho TRUY CẬP DỮ LIỆU”, bạn có thể cần bật quyền truy cập dữ liệu cho máy chủ được liên kết mà bạn đang cố gắng chạy truy vấn phân tán. Ngược lại, cũng có thể có những lúc bạn cần vô hiệu hóa quyền truy cập dữ liệu.

Để bật hoặc tắt quyền truy cập dữ liệu, hãy sử dụng sp_serveroption hệ thống lưu trữ thủ tục. Thực thi nó trên máy chủ mà bạn định chạy các truy vấn phân tán từ đó. Ví dụ sau minh họa cách thực hiện điều này.

Ví dụ 1 - Bật quyền truy cập dữ liệu

Dưới đây là cách bật quyền truy cập dữ liệu.

EXEC sp_serveroption
  @server = 'sqlserver007',
  @optname = 'DATA ACCESS',
  @optvalue = 'TRUE';

Trong trường hợp này, máy chủ được gọi là sqlserver007 và tôi đặt DATA ACCESS tùy chọn thành TRUE .

Dưới đây là một cách ngắn gọn hơn để làm điều tương tự:

sp_serveroption 'sqlserver007', 'DATA ACCESS', 'TRUE';

Chạy một trong hai cách đó sẽ cho phép truy cập dữ liệu trên máy chủ được liên kết được chỉ định.

Nhân tiện, máy chủ được liên kết được chỉ định có thể là máy chủ cục bộ nếu được yêu cầu. Nó không cần phải là một máy chủ từ xa.

Để kiểm tra cài đặt truy cập dữ liệu, hãy chạy truy vấn đối với sys.servers chế độ xem danh mục hệ thống.

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

Kết quả:

+--------------+--------------------------+
| name         | is_data_access_enabled   |
|--------------+--------------------------|
| sqlserver007 | 1                        |
| Homer        | 1                        |
+--------------+--------------------------+

Một lần nữa, bạn chạy điều này với máy chủ cục bộ - không phải máy chủ từ xa.

Ví dụ 2 - Tắt Quyền truy cập Dữ liệu

Để tắt quyền truy cập dữ liệu, chỉ cần đặt @optvalue thành FALSE .

EXEC sp_serveroption
  @server = 'sqlserver007',
  @optname = 'DATA ACCESS',
  @optvalue = 'FALSE';

Bây giờ hãy kiểm tra lại cài đặt.

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

Kết quả:

+--------------+--------------------------+
| name         | is_data_access_enabled   |
|--------------+--------------------------|
| sqlserver007 | 0                        |
| Homer        | 1                        |
+--------------+--------------------------+

Tôi chạy mã trên máy chủ nào?

Chạy mã trên máy chủ mà bạn định chạy các truy vấn phân tán từ đó.

Trong ví dụ của tôi, sqlserver007 là tên của máy chủ cục bộ và Homer là một máy chủ từ xa / được liên kết. Nếu tôi muốn chạy các truy vấn phân tán đối với Homer , Tôi sẽ chạy mã trên sqlserver007 .

Tôi không cần phải nhảy qua Homer để thay đổi cài đặt của nó. Trên thực tế, nó có thể có cài đặt khác với cài đặt mà tôi áp dụng cho sqlserver007 .

Để chứng minh điểm này, đây là những gì tôi nhận được nếu tôi so sánh kết quả máy chủ được liên kết với cài đặt thực tế trên máy chủ từ xa.

EXEC sp_serveroption
  @server = 'Homer',
  @optname = 'DATA ACCESS',
  @optvalue = 'TRUE';

SELECT 
  'From local',
  is_data_access_enabled 
FROM sys.servers
WHERE name = 'Homer'
UNION ALL
SELECT 
  'Remote setting',
  is_data_access_enabled 
FROM Homer.master.sys.servers
WHERE server_id = 0;

Kết quả:

+--------------------+--------------------------+
| (No column name)   | is_data_access_enabled   |
|--------------------+--------------------------|
| From local         | 1                        |
| Remote setting     | 0                        |
+--------------------+--------------------------+

Trong trường hợp này, máy chủ cục bộ có cài đặt khác với đối tác máy chủ được liên kết của nó.

Và thực tế là tôi có thể truy xuất thông tin này qua truy vấn phân tán chứng tỏ rằng chính cài đặt máy chủ của tôi đã kích hoạt truy vấn phân tán, không phải của máy chủ từ xa.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giới thiệu về Lệnh GO trong SQL Server

  2. Sao chép bảng vào cơ sở dữ liệu khác trên SQL Server khác

  3. Giải pháp cho:Cập nhật cửa hàng, chèn hoặc xóa câu lệnh ảnh hưởng đến một số hàng không mong muốn (0)

  4. Cách thực hiện CẬP NHẬT truy vấn chuyển qua trong SQL Server

  5. Hàm DECODE () trong SQL Server