Trong bài viết này, tôi tạo thông tin đăng nhập cho một máy chủ được liên kết trong SQL Server. Trong trường hợp này, tôi sử dụng Transact-SQL (thay vì sử dụng GUI như SSMS).
Để tạo thông tin đăng nhập cho máy chủ được liên kết, hãy sử dụng sp_addlinkedsrvlogin
hệ thống lưu trữ thủ tục.
Cú pháp
Cú pháp như sau:
sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname' [ , [ @useself = ] { 'TRUE' | 'FALSE' | NULL } ] [ , [ @locallogin = ] 'locallogin' ] [ , [ @rmtuser = ] 'rmtuser' ] [ , [ @rmtpassword = ] 'rmtpassword' ]
Ví dụ sau minh họa cách thức hoạt động của điều này. Để có giải thích chi tiết hơn về từng đối số, hãy xem tài liệu chính thức của Microsoft.
Ví dụ 1 - Thêm thông tin đăng nhập cho máy chủ được liên kết
Dưới đây là ví dụ về cách thêm thông tin đăng nhập Máy chủ SQL có tên Maggie cho máy chủ được liên kết có tên Homer:
EXEC sp_addlinkedsrvlogin @rmtsrvname=N'Homer', @useself=N'FALSE', @locallogin=NULL, @rmtuser=N'Maggie', @rmtpassword=N'BigStrong#Passw0rd';
Chạy điều này trên máy chủ cục bộ sau khi bạn đã tạo máy chủ được liên kết. Bạn sẽ cần thông tin đăng nhập tương ứng với cùng thông tin đăng nhập trên máy chủ từ xa thực tế.
Ví dụ 2 - Bao gồm Máy chủ được Liên kết
Vì lợi ích của sự hoàn chỉnh, đây là một lần nữa, nhưng lần này tôi tạo máy chủ được liên kết trước:
EXEC sp_addlinkedserver @server=N'Homer', @srvproduct=N'', @provider=N'MSOLEDBSQL', @datasrc=N'172.17.0.2', @catalog='Music'; EXEC sp_addlinkedsrvlogin @rmtsrvname=N'Homer', @useself=N'FALSE', @locallogin=NULL, @rmtuser=N'Maggie', @rmtpassword=N'BigStrong#Passw0rd';
Miễn là máy chủ được liên kết thực tế (từ xa) có thông tin đăng nhập với cùng thông tin xác thực, máy chủ cục bộ sẽ có thể đăng nhập vào máy chủ được liên kết.
Ví dụ 3 - Thêm Đăng nhập / Người dùng trên Máy chủ Từ xa
Như đã đề cập, bạn cần đảm bảo có thông tin đăng nhập tương ứng trên máy chủ từ xa. Bạn cũng sẽ cần đảm bảo rằng thông tin đăng nhập này ánh xạ tới người dùng cơ sở dữ liệu với các quyền thích hợp.
Vì vậy, trong trường hợp này, chúng tôi có thể tạo thông tin đăng nhập trên máy chủ từ xa bằng cách chuyển sang máy chủ từ xa và chạy:
CREATE LOGIN Maggie WITH PASSWORD = 'BigStrong#Passw0rd'; USE Music; CREATE USER Maggie FOR LOGIN Maggie; GRANT SELECT ON DATABASE::Music TO Maggie;
Điều này tạo ra một thông tin đăng nhập có tên là Maggie và một người dùng cơ sở dữ liệu tương ứng được gọi là Maggie. Nó cũng cấp SELECT
quyền đối với Maggie đối với cơ sở dữ liệu Âm nhạc.
Bây giờ tôi đã làm điều đó, bất kỳ truy vấn phân tán nào sử dụng thông tin đăng nhập này sẽ bị giới hạn trong cơ sở dữ liệu Âm nhạc.
Một giải pháp thay thế cho việc sử dụng GRANT SELECT ON DATABASE
, là thêm người dùng vào db_datareader vai trò cơ sở dữ liệu cố định hoặc có thể là vai trò tùy chỉnh.
Nếu bạn đã tạo máy chủ được liên kết trước khi tạo thông tin đăng nhập và người dùng cơ sở dữ liệu trên máy chủ từ xa, bạn có thể cần phải xóa máy chủ được liên kết và tạo lại. Nếu vậy, bạn có thể thả nó như thế này:
EXEC sp_dropserver 'Homer', 'droplogins';
Sau khi bị loại bỏ, bạn có thể tạo máy chủ được liên kết và đăng nhập lại máy chủ được liên kết.
Tôi có thực sự cần đăng nhập vào máy chủ được liên kết không?
Có thể bạn thậm chí không cần thêm thông tin đăng nhập như trong ví dụ trên.
Khi bạn lần đầu tiên tạo một máy chủ được liên kết trong SQL Server, ánh xạ mặc định giữa tất cả thông tin đăng nhập trên máy chủ cục bộ và thông tin đăng nhập từ xa trên máy chủ được liên kết sẽ tự động được tạo. SQL Server sử dụng thông tin đăng nhập cục bộ khi kết nối với máy chủ được liên kết thay mặt cho đăng nhập.
Vì vậy, nếu thông tin đăng nhập cục bộ của bạn có thông tin đăng nhập tương ứng trên máy chủ được liên kết, có cùng thông tin xác thực và có các quyền thích hợp, thì bạn đã sẵn sàng. Không cần thêm thông tin đăng nhập cho máy chủ được liên kết.
Đã nói rằng, bạn có thể có những lý do khác để thêm một thông tin đăng nhập riêng, chẳng hạn như thêm nó cho những người dùng khác.
Bạn cũng có thể muốn tạo ánh xạ đăng nhập cho một người dùng cục bộ, trong trường hợp này, bạn có thể sử dụng @locallogin
đối số để chỉ định thông tin đăng nhập cục bộ sẽ được ánh xạ.
Xem Cách đăng nhập hoạt động trên máy chủ được liên kết để biết ví dụ về các thông tin đăng nhập cục bộ khác nhau đang cố gắng truy cập thông tin đăng nhập máy chủ được liên kết trong các tình huống khác nhau.