Không có cách nào để "ẩn" một máy chủ được liên kết hoặc ngăn người dùng trái phép cố gắng sử dụng nó. Tất cả những gì bạn có thể kiểm soát là liệu họ có thực sự có quyền truy cập ở phía bên kia hay không. Một máy chủ được liên kết trong và bản thân nó không phải là một đối tượng thực tế; giống như một từ đồng nghĩa, bạn không cấp quyền truy cập vào bí danh, chỉ cho điều mà nó tham chiếu.
Hãy dùng thử và bạn sẽ thấy rằng một số giả định của mình (ví dụ: "đăng nhập ... không thể thấy máy chủ được liên kết trong trình thám hiểm đối tượng") là sai. Tôi đã làm điều này:
- Tạo thông tin đăng nhập và không được cấp bất kỳ đặc quyền nào, chỉ cần KẾT NỐI / vai trò công khai.
- Tạo một máy chủ được liên kết và không thêm thông tin đăng nhập này vào danh sách đăng nhập.
- Đã mở một phiên bản mới của Management Studio, kết nối với thông tin đăng nhập này.
- Tôi đã có thể thấy tất cả các máy chủ được liên kết trong Đối tượng Máy chủ> Máy chủ được liên kết.
- Tôi cũng có thể truy vấn
sys.servers
để xem danh sách các máy chủ được liên kết.
Tôi đã có thể chạy truy vấn sau đây không có vấn đề:
SELECT name FROM [linked server].master.sys.objects;
Tuy nhiên, tôi không thể chạy các truy vấn đối với cơ sở dữ liệu phi hệ thống, vì tôi đã không được cấp quyền truy cập rõ ràng vào bất kỳ cơ sở dữ liệu phi hệ thống hoặc các đối tượng bên trong. Ví dụ:
SELECT SalesOrderID FROM [linked server].AdventureWorks2012.Sales.SalesOrderHeader;
Mang lại lỗi này:
Msg 7314, Cấp 16, Trạng thái 1, Dòng 1
Nhà cung cấp OLE DB "SQLNCLI11" cho máy chủ được liên kết "máy chủ được liên kết" không chứa bảng "" AdventureWorks2012 "." Bán hàng "." SalesOrderHeader "". Bảng không tồn tại hoặc người dùng hiện tại không có quyền trên bảng đó.
Tôi hy vọng rằng bạn có thể đạt được kết quả hạn chế hơn bằng cách từ chối rõ ràng quyền truy cập vào các đối tượng cụ thể trên máy chủ được liên kết (hoặc bằng cách DENY CONNECT SQL
đăng nhập đó hoàn toàn), nhưng điều này không giới hạn ảnh hưởng của nó đến máy chủ được liên kết; nó cũng ảnh hưởng đến các kết nối trực tiếp.
Trong mọi trường hợp, tôi không thấy được điểm mà bạn đang cố gắng thực hiện:
- Nếu người dùng không có quyền truy cập ở phía bên kia, tác hại của việc cho phép họ thử là gì? (Bạn có thể gặp may mắn hơn khi bảo họ đừng và kiểm tra họ hơn là cố gắng ngăn họ thử ngay từ đầu.)
- Nếu người dùng không có quyền truy cập ở phía bên kia, tại sao họ không thể sử dụng máy chủ được liên kết?