programing

로그인 없이 생성된 사용자에게 로그인 할당(SQL Server)

subpage 2023. 8. 7. 22:33
반응형

로그인 없이 생성된 사용자에게 로그인 할당(SQL Server)

데이터베이스에 연결된 로그인이 없는 사용자가 있습니다.로그인하지 않고 생성된 것 같습니다.

이 사용자와 데이터베이스에 연결할 때마다 다음 오류가 발생합니다.

Msg 916, Level 14, State 1, Line 1
The server principal "UserName" is not able to access the database 
"DatabaseName" under the current security context.

데이터베이스에 액세스하는 데 실제로 사용할 수 있도록 이 사용자에 대한 로그인을 지정하려고 합니다.사용자와 로그인을 연결하기 위해 다음 스크립트를 시도했습니다.

USE [DatabaseName]
ALTER USER [UserName]
WITH LOGIN = [UserName]

그러나 이로 인해 다음과 같은 오류가 발생합니다.

Msg 33016, Level 16, State 1, Line 2
The user cannot be remapped to a login. Remapping can only be done for users 
that were mapped to Windows or SQL logins.

이 사용자에게 로그인을 할당할 수 있는 방법이 있습니까?이 사용자는 다시 설정해야 하는 권한이 많기 때문에 처음부터 다시 시작할 필요가 없습니다.

편집: Philip Kelley의 질문에 대한 답변으로, 제가 실행할 때 얻는 것은 다음과 같습니다.select * from sys.database_principals where name = 'username'.

SQL User

이미지 크기에 대해 죄송합니다. 제대로 보려면 새 탭에서 열어야 합니다.

편집 2:

알겠습니다, gbn에서 제안한 대로 기존 LOGIN을 삭제했고, 다음 스크립트를 사용하여 사용자와 동일한 SID로 새 LOGIN을 생성하고 있습니다.

CREATE LOGIN [UserName] 
WITH PASSWORD=N'Password1', 
DEFAULT_DATABASE=[DatabaseName], 
CHECK_EXPIRATION=OFF, 
CHECK_POLICY=OFF, 
SID=0x0105000000000009030000001139F53436663A4CA5B9D5D067A02390

이제 다음 오류 메시지가 표시됩니다. LOGIN의 SID 필드에 대해 SID가 너무 깁니다.

Msg 15419, Level 16, State 1, Line 1
Supplied parameter sid should be binary(16).

내가 노 없이 강 상류에 있습니까?

sp_change_users_login사용되지 않습니다.

훨씬 더 쉬운 것은:

ALTER USER usr1 WITH LOGIN = login1;

저는 이 질문이 여전히 관련이 있지만 제 경우에는 명확하게 대답하지 않았다는 것을 알았습니다.

고립된 SQL_USER와 함께 SQL Server 2012를 사용하는 것이 해결책이었습니다.

USE databasename                      -- The database I had recently attached
EXEC sp_change_users_login 'Report'   -- Display orphaned users
EXEC sp_change_users_login 'Auto_Fix', 'UserName', NULL, 'Password'

고립된 사용자가 있으며 매핑할 로그인이 없기 때문에 ALTER USER(아직)로 다시 매핑할 수 없습니다.따라서 먼저 CREATE LOGIN을 실행해야 합니다.

데이터베이스 수준 사용자가

  • Windows 로그인, 매핑은 AD SID를 통해 자동으로 수정됩니다.
  • sys.database_principals의 "sid"를 사용하여 로그인합니다.

그런 다음 ALTER USER 실행

편집, 주석 및 업데이트 후

sys.database_principals의 sid는 윈도우즈 로그인을 위한 것입니다.

따라서 SQL 로그인을 만들고 다시 매핑하려고 하면 실패합니다.

Windows 로그인을 가져오려면 이 작업을 수행합니다.

SELECT SUSER_SNAME(0x0105000000000009030000001139F53436663A4CA5B9D5D067A02390)

시행착오를 통해 사용자가 원래 "로그인 없이" 생성된 것으로 보이며, 그러면 이 쿼리가 생성됩니다.

select * from sys.database_principals

authentication_type = 0(NONE)을 표시합니다.

다음 명령을 사용하기 때문에 이러한 사용자를 로그인(기존 또는 새 SQL 또는 Windows)에 다시 연결할 수 없습니다.

alter user [TempUser] with login [TempLogin]

는 질문에 표시된 리맵 오류 "Msg 33016"으로 응답합니다.

또한 이러한 사용자는 고전적(중용되지 않음) SP 보고서에 표시되지 않습니다.

exec sp_change_users_login 'Report'

이 문제를 해결하는 방법이나 authentication_type을 변경하는 방법을 아는 사람이 있다면 댓글을 달아주시기 바랍니다.

어떤 종류의 데이터베이스 사용자입니까? 실행select * from sys.database_principalstype그리고.type_desc 그때에 때문에.nameWindows 또는 SQL 사용자인 경우 @gbn의 답변을 따르지만, 오류 메시지를 기반으로 한 검증되지 않은 추측일 경우에는 다른 문제가 발생합니다.


편집

SQL 인증 로그인입니다.우가사던시절하용리시▁we절'▁back▁when던d하.sp_change_users_login이러한 로그인을 수정합니다.SQL 2008에는 "사용하지 않음, 더 이상 사용하지 않음"으로 표시됩니다. 즉, ALTER USER 명령으로 충분해야 합니다.하지만 이 경우에는 시도해 볼 가치가 있을지도 모릅니다.제대로 사용하면(오랜만에) 사용자의 SID가 로그인의 SID와 일치하도록 업데이트된다고 생각합니다.

사용자에 대한 로그인 만들기

생성한 로그인을 사용하여 사용자를 삭제하고 다시 만듭니다.

사용자의 권한을 복제하는 방법에 대해 설명하는 다른 항목이 있습니다.이러한 권한을 역할에 정의하고 sp_addrole 멤버를 호출하여 사용자를 역할에 추가하는 것이 좋습니다.

언급URL : https://stackoverflow.com/questions/6468813/assign-a-login-to-a-user-created-without-login-sql-server

반응형