Máy chủ được liên kết có sẵn cho người dùng mà không có quyền


9

Tôi có người dùng nhìn thấy một máy chủ được liên kết mà họ không được phép nhìn thấy.

Máy chủ được liên kết được xác định để chỉ tôi mới có quyền truy cập vào nó, nhưng mọi người đều có thể xem và sử dụng nó.

Tôi đã tạo máy chủ được liên kết mới bằng các bước sau:

  1. Kết nối SSMS Object Explorer với phiên bản SQL Server
  2. Mở rộng Server Objects, nhấp chuột phải Linked Serversvà nhấp chuột tráiNew Linked Server...
  3. Dưới Generaltab chọn SQL Servercho Server typevà ghi rõ họ tên của máy chủ
  4. Dưới Securitytab trong phần nhấp chuột trên Add, chọn "sa" là Local Login, nhập Remote Usertên vàRemote Password
  5. Trong Securitytab ở phần dưới (bên dưới For a login not defined in the list above, connections will:) chọn tùy chọn đầu tiên:Not be made
  6. Nhấp OKvà bắt đầu thử nghiệm

Bây giờ người duy nhất được xem máy chủ được liên kết là tôi ("sa"), nhưng bằng cách nào đó, những người dùng khác có thể thấy và sử dụng nó.

Lưu ý 1: Người dùng có thể sử dụng máy chủ được liên kết có quyền trên máy chủ từ xa, họ không thấy dữ liệu mà họ không nên xem, họ chỉ có thể truy cập nó từ máy chủ được liên kết khi không thể.

Lưu ý 2: Tôi là người duy nhất sysadmintrên cả hai trường hợp.


1
Chà, bạn thực sự không thể ẩn máy chủ được liên kết, nhưng khi họ cố gắng sử dụng nó, nếu bối cảnh đăng nhập hiện tại của họ không có bất kỳ quyền nào ở đầu kia ...
Aaron Bertrand

@AaronBertrand Bạn có thể ẩn một máy chủ được liên kết chỉ bằng cách không cung cấp quyền truy cập vào nó. Một đăng nhập không được xác định trong danh sách đăng nhập được phép và không phải là một sysadmin không thể thấy máy chủ được liên kết trong trình thám hiểm đối tượng.
Roi Gavish

@AaronBertrand Nếu bối cảnh đăng nhập hiện tại của họ không có quyền ở đầu kia, họ vẫn không được phép kết nối qua máy chủ được liên kết nếu không được phép.
Roi Gavish

1
Không, bạn không thể ẩn máy chủ được liên kết theo cách đó. Bạn đã thử điều này?
Aaron Bertrand

Câu trả lời:


7

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:

  1. 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.
  2. 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.
  3. Đã 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.
  4. 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.
  5. 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:

  1. 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.)
  2. 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?

2

Bạn có thể sử dụng tùy chọn đầu tiên "Không được thực hiện" với ánh xạ đăng nhập như bên dưới:

nhập mô tả hình ảnh ở đây

Đây là kết quả với thông tin đăng nhập được ánh xạ:

nhập mô tả hình ảnh ở đây

Và đây là những gì xảy ra với một tài khoản khác

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.