Lỗi SQL Server 2008 R2: 15023, người dùng, nhóm hoặc vai trò đã tồn tại


16

Tôi có một cơ sở dữ liệu thử nghiệm mà tôi gặp vấn đề về quyền.
Tôi không thể truy cập cơ sở dữ liệu báo cáo và tài liệu trợ giúp của ứng dụng nói phải làm như sau:

Resolution: 

1. Launch the SQL Server Management Studio and connect to the database server(s) hosting   the Vision and Reporting Server databases. 
2. Expand the security folder. 
3. Select logins and right click on the <username> user and choose properties. 
4. Click the User Mapping tab 
5.Make sure the following databases are selected in the Users mapped to this Login:

    ReportServer
    ReportServerTempDB
    Your Vision databases
    This maps the login/user to the respective databases.
6. As you select each database (including your Vision database), select the db_owner role in the Database role membership for: section. You must select this option for each database.

Khi tôi làm điều này, tôi nhận được lỗi sau:

"Create failed for user '<servername>\<username>'.  User, group, or role '<servername>\<username>' already exists in the current database. (Microsoft SQL Server, Error: 15023)"

Tôi đã khắc phục lỗi này và đã thử lệnh sau trên mỗi cơ sở dữ liệu:

 ALTER USER [<username>] WITH LOGIN = [<username>] 

Thông báo chỉ ra rằng các lệnh đã hoàn thành thành công nhưng tôi vẫn gặp lỗi ở trên khi tôi cố gắng ánh xạ từng cơ sở dữ liệu theo hướng dẫn ở trên.

Tôi đang thiếu gì?

Theo nhận xét của Kin (cảm ơn) Tôi đã thử điều này: - Tôi nhấp chuột phải vào người dùng và chọn: Đăng nhập tập lệnh dưới dạng> Thả và tạo vào> Cửa sổ truy vấn mới. - Tôi đã chạy truy vấn kết quả và cố gắng ánh xạ vai trò người dùng bằng cách chọn lại hai cơ sở dữ liệu và db_owner khác nhưng tôi vẫn nhận được thông báo lỗi như trên.

Suy nghĩ ??

Câu trả lời:


12

Có một số điều bạn có thể thử, và sự thành công của mỗi thứ có thể sẽ phụ thuộc vào vai trò máy chủ của bạn.

Đối với người mới bắt đầu, nếu chỉ là một hoặc hai người dùng, cách dễ nhất là bỏ người dùng cơ sở dữ liệu khỏi cơ sở dữ liệu được khôi phục và cung cấp thông tin đăng nhập máy chủ hiện có, hãy ánh xạ lại người dùng cơ sở dữ liệu vào thông tin đăng nhập máy chủ bằng SSMS. Nếu đăng nhập máy chủ không tồn tại thì chỉ cần tạo nó, ánh xạ người dùng và thế là xong! Xa ta đi.

Tùy chọn tiếp theo: Nếu bạn đang di chuyển một số lượng lớn người dùng, hãy sử dụng sp_help_Vvlogin. sp_help_Vvlogin là một quy trình được lưu trữ do Microsoft cung cấp sẽ giúp di chuyển thông tin đăng nhập từ máy chủ này sang máy chủ khác, bao gồm cả mật khẩu và SID. Đây là một bài viết hay về nó SP_HELP_REVLOGIN


Xem support.microsoft.com/en-us/kb/918992 Cách chuyển thông tin đăng nhập và mật khẩu giữa các phiên bản của SQL Server
James Jenkins

3

Tôi sử dụng Auto_Fix với sp_change_users_logintrong môi trường dev của mình để khắc phục các sự cố như vậy (Lỗi 15023). Tránh sử dụng Auto_Fix trong các tình huống nhạy cảm về bảo mật.

Auto_Fix: Liên kết mục nhập của người dùng trong chế độ xem danh mục hệ thống sys.database_principals trong cơ sở dữ liệu hiện tại với thông tin đăng nhập SQL Server cùng tên. Nếu đăng nhập có cùng tên không tồn tại, một thông tin sẽ được tạo. Kiểm tra kết quả từ câu lệnh Auto_Fix để xác nhận rằng liên kết chính xác trên thực tế đã được thực hiện. Tránh sử dụng Auto_Fix trong các tình huống nhạy cảm về bảo mật.

sp_change_users_login 'AUTO_FIX', 'myuser'

Ngoài ra, lưu ý rằng tính năng này có thể bị xóa trong phiên bản Microsoft SQL Server trong tương lai.

Tài liệu tham khảo khác:

  1. Người dùng, nhóm hoặc vai trò SQL Server 2008 đã tồn tại trong cơ sở dữ liệu hiện tại
  2. CỐ ĐỊNH: Lỗi 15023: Người dùng đã tồn tại trong cơ sở dữ liệu hiện tại
  3. Bản đồ SQL đăng nhập vào người dùng hiện có

0
ALTER USER [<username>] WITH LOGIN=[<username>]

Là cách tiếp cận đúng đắn.

Nếu không, hãy đi đến:

Bảo mật> Đăng nhập> (tên người dùng của bạn)> Thuộc tính> Ánh xạ người dùng

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

và ánh xạ lại người dùng đó vào cơ sở dữ liệu bạn muốn.

Bạn có thể sử dụng truy vấn sau trong ngữ cảnh cơ sở dữ liệu của mình để kiểm tra trẻ mồ côi:

select
    dp.name [user_name]
    ,dp.type_desc [user_type]
    ,isnull(sp.name,'Orhphaned!') [login_name]
    ,sp.type_desc [login_type]
from   
    sys.database_principals dp
    left join sys.server_principals sp on (dp.sid = sp.sid)
where
    dp.type in ('S','U','G')
    and dp.principal_id >4
order by sp.name

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.