Trong SQL Server, làm cách nào để tạo thông tin đăng nhập cho người dùng hiện tại?


17

Tôi đã khôi phục cơ sở dữ liệu từ một phiên bản SQL Server sang phiên bản SQL Server khác. Cơ sở dữ liệu đã có người dùng thêm vào nó. Nhưng họ không có Đăng nhập cho phiên bản SQL Server mới.

Tôi biết cách tạo thông tin đăng nhập mới cho người dùng mới, nhưng làm cách nào để tạo Đăng nhập cho người dùng hiện tại?

Câu trả lời:


9

Vấn đề là việc khôi phục mang lại cho người dùng db từ phiên bản máy chủ ban đầu nhưng phiên bản mới thường không biết gì về những lần đăng nhập của người dùng đó. Bạn sẽ thấy chúng trong Bảo mật ở cấp db, nhưng chúng không có thông tin đăng nhập cấp máy chủ tương ứng.

Bạn cần gắn lại người dùng cơ sở dữ liệu bằng thông tin đăng nhập máy chủ trong trường hợp bạn đã khôi phục cơ sở dữ liệu.

Có một vài cách để làm điều đó:

  1. Tạo thông tin đăng nhập mới cho họ trong trường hợp mới. Sau đó, bạn sẽ phải xóa chúng dưới dạng người dùng cơ sở dữ liệu trên phiên bản mới và thêm thông tin đăng nhập mới của họ. Điều này có vẻ kỳ lạ khi bạn có thể tạo cùng tên đăng nhập, nhưng SID (định danh bảo mật) sẽ khác và đó là những gì SQL sử dụng để nhận dạng người dùng. Điều này là đủ dễ dàng cho một hoặc hai lần đăng nhập.

  2. Nếu bạn muốn duy trì cùng một người dùng, giữ cùng một SID, trong các trường hợp, sau đó sử dụng thủ tục được lưu trữ sp_help_Vvlogin . Sao chép mã từ liên kết sẽ tạo các thủ tục được lưu trữ cần thiết và chạy nó trên máy chủ mà bạn muốn sao chép người dùng từ đó. Nó sẽ tạo một tập lệnh SQL mà bạn có thể chạy trên máy chủ mục tiêu của mình để tạo cùng một người dùng mang theo SID, mật khẩu, mọi thứ. Đây là cách để đi nếu bạn có nhiều người dùng cơ sở dữ liệu, bạn cần kết nối lại với thể hiện đích hoặc nếu bạn không biết mật khẩu cho một hoặc nhiều Đăng nhập SQL trên ví dụ nguồn.


10

Tôi luôn chạy lệnh sp_change_usftimelogin với hành động 'Update_One' để liên kết lại người dùng cơ sở dữ liệu với thông tin đăng nhập máy chủ:

sp_change_users_login 'Update_One', 'database user', 'server login'


Thật tuyệt, tôi đã sử dụng cái này: EXEC sp_change_users_login 'Auto_Fix', 'User', NULL, 'password';thay vào đó. :)
user2173353 22/05/2015

Điều này chỉ có thể làm được nếu bạn có cả người dùng cơ sở dữ liệu và đăng nhập máy chủ nhưng liên kết giữa chúng bị hỏng?
wenzzzel

2

Đây là những gì tôi tìm thấy.

Khi squillman hết hạn, người dùng sẽ được sao chép với cơ sở dữ liệu, nhưng thông tin đăng nhập thì không. Có một procdure cửa hàng được gọi là sp_change_usftimelogin bạn có thể sử dụng để giải quyết vấn đề. Các bước để làm như vậy được chi tiết trong tài liệu này . Chi tiết về việc sử dụng procdure cửa hàng có thể được tìm thấy trên trang này .


2

Kể từ SQL Server 2012, có lệnh T-SQL để gán người dùng hiện tại cho thông tin đăng nhập mới. Tạo thông tin đăng nhập, nhưng đừng cố thực hiện Ánh xạ người dùng (nó sẽ thất bại). Sau đó thực hiện:

use <existing_database>;
alter user <existing_database_user> with login = <newly_created_login>;

Điều này sẽ ánh xạ đăng nhập hiện có cho người dùng mới. Tài liệu SQL tại đây: https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-2017

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.