sourcecode

SQL Server: 로그인은 성공했지만 "데이터베이스 [dbName]에 액세스할 수 없습니다. (Object Explorer)"

codebag 2023. 7. 12. 23:46
반응형

SQL Server: 로그인은 성공했지만 "데이터베이스 [dbName]에 액세스할 수 없습니다. (Object Explorer)"

윈도우즈 8.1 및 SQL 서버 2012를 사용하고 있습니다.

Windows 인증으로 SQL SERVER에 액세스하기 위해 OS 계정 "Manoj"를 사용하고 있었습니다.최근에 저는 OS의 사용자 계정 "Manoj"를 삭제하고 같은 이름의 계정 "Manoj"를 새로 만들었습니다.

하지만 시스템은 새로운 계정을 "Manoj_2"로 받아들였습니다.이 변경사항으로 인해 이전 데이터베이스에 액세스할 수 없습니다.

라고 쓰여 있습니다.

데이터베이스 [dbName]에 액세스할 수 없습니다. (Object Explorer)

이전에 만든 DB에 액세스하려고 할 때마다 선택합니다.

SQL Server에서 "Manoj_2"에 대한 새 로그인을 생성하고 기본 DB를 "master"로 설정했습니다.하지만 여전히 문제는 계속되고 있습니다.

DB를 분리할 수 없습니다.DB를 확장할 수 없습니다.

참고: OS에서 "Manoj" 계정에 대한 관리자 권한이 있습니다.

누가 나한테 어떻게 해야 하는지 말해줄래요?OS 또는 SQL Server를 사용하는 경우

이 경우 단일 사용자 모드에서 데이터베이스에 연결해야 합니다.

SQL Server를 단일 사용자 모드로 시작하면 시스템의 로컬 관리자 그룹 구성원이 sysadmin 고정 서버 역할의 구성원으로 SQL Server 인스턴스에 연결할 수 있습니다.

여기에서는 이 작업을 수행하기 위한 단계별 지침을 찾을 수 있습니다.

간단히 말해서 윈도우즈 인증으로 SQL Server Management Studio를 시작한 후 매개 변수 -m을 사용하여 sqlserver 인스턴스를 시작해야 합니다.

이제 sysadmin입니다. sysadmin 역할을 사용자에게 할당하고 -m 매개 변수를 종료한 후 제거한 후 sql 서버를 다시 시작합니다.

문제는 데이터베이스의 사용자가 "고아"라는 것입니다.즉, 사용자와 연결된 로그인 ID 또는 암호가 없습니다.이는 사용자와 일치하는 로그인 ID가 있더라도 일치해야 하는 GUID(Microsoft-speak에서는 SID라고 함)가 있기 때문입니다.

이전에는 이 문제를 해결해야 하는 번거로움이 있었지만, 현재 SQL Server 2000, SP3에서는 무거운 작업을 수행하는 저장 프로시저가 있습니다.

이러한 모든 지침은 복원된 데이터베이스를 선택한 상태에서 데이터베이스 관리자로 수행해야 합니다.

먼저, 이것이 문제인지 확인합니다.고아 사용자 목록이 표시됩니다.

EXEC sp_change_users_login 'Report'

이 사용자에 대한 로그인 ID와 암호가 이미 있는 경우 다음을 수행하여 수정합니다.

EXEC sp_change_users_login 'Auto_Fix', 'user'

이 사용자에 대한 새 로그인 ID와 암호를 만들려면 다음을 수행하여 수정합니다.

EXEC sp_change_users_login 'Auto_Fix', 'user', 'login', 'password'

이 텍스트는 Dez-13-2017의 http://www.fileformat.info/tip/microsoft/sql_orphan_user.htm 에서 얻었습니다.

정말 어리석은 해결책이지만 구글 검색에서 누군가가 여기에 올 경우를 대비해 여기에 추가하겠습니다.

방금 SQL 서비스를 다시 시작했는데 이 오류가 발생했습니다. 저의 경우 10분만 기다리면 충분했고 다시 문제가 없었습니다.이 오류는 이제 막 시작할 때 발생하는 오류인 것 같습니다.

Sql Management Studio를 사용하는 경우 관리자로 시작하면 됩니다.

마우스 오른쪽 버튼 클릭->관리자 권한으로 실행

이것이 제가 이 문제를 해결하게 된 계기입니다.

기존 사용자가 포함된 .bak 파일에서 다른 SQL 서버 인스턴스로 데이터베이스를 복원했습니다.

동일한 연결 문자열을 사용하지만 업데이트된 서버 인스턴스를 사용하여 정상적으로 내 앱에서 복원된 데이터베이스에 액세스하려고 했습니다.

수신 오류.

DB 소유자로 사용자를 삭제한 다음 동일한 자격 증명, 매핑, 로그인 등으로 다시 추가했습니다.

복원 후 사용자를 읽은 후 사용자로 로그인할 수 있습니다.

저는 두 명의 사용자가 있었습니다. 하나는 sysadmin 역할을 가진 사용자였고, 다른 하나는 그렇지 않았습니다.

그래서 다른 사용자(새 사용자를 생성할 수 있음)와 로그인하여 다음에서 'sysadmin' 확인란을 선택했습니다.보안 --> 로그인 --> SQL 사용자 이름을 마우스 오른쪽 단추로 클릭합니다. --> 속성 --> 서버 역할 --> sysadmin' 확인란에 확인 표시가 있는지 확인합니다.확인을 누르고 새로 선택한 사용자와 연결해 보십시오.

This is caused when the user's default database is set to a database they don't have permissions or its offline.

사용자를 다시 추가해 보십시오.여기도 한번 봐주세요.

이 경우 관리자 자격 증명이 있는 SQL Server Management Studio를 열고 데이터베이스를 마우스 오른쪽 버튼으로 클릭하여 "온라인으로 이동"을 선택했을 때 작동했습니다.

이 스크립트를 사용해 보십시오.이 스크립트는 데이터베이스의 활성 세션을 살펴보고 데이터베이스를 다시 온라인으로 전환할 수 있도록 해당 세션을 종료합니다.

 CREATE TABLE #temp_sp_who2
        (
          SPID INT,
          Status VARCHAR(1000) NULL,
          Login SYSNAME NULL,
          HostName SYSNAME NULL,
          BlkBy SYSNAME NULL,
          DBName SYSNAME NULL,
          Command VARCHAR(1000) NULL,
          CPUTime INT NULL,
          DiskIO INT NULL,
          LastBatch VARCHAR(1000) NULL,
          ProgramName VARCHAR(1000) NULL,
          SPID2 INT
          , rEQUESTID INT NULL --comment out for SQL 2000 databases

        )


    INSERT  INTO #temp_sp_who2
    EXEC sp_who2


    declare @kill nvarchar(max)= ''
    SELECT  @kill = @kill+ 'kill '+convert(varchar,spid) +';'
    FROM    #temp_sp_who2
    WHERE   DBName = 'databasename'

    exec sp_executesql @kill


  ALTER DATABASE DATABASENAME SET ONLINE WITH IMMEDIATE ROLLBACK

저의 경우, 모든 것에 액세스하기 위해 "관리자 권한으로 실행"으로 응용프로그램을 시작하기만 하면 되었습니다.그렇지 않으면 당신이 말한 오류가 발생할 것입니다.

다음 단계에서 이 오류를 가져옵니다.

  1. "오프라인 가져오기"를 실행합니다.
  2. "오프라인으로 이동"이 너무 오래 실행되어 이 창을 닫았습니다.
  3. 그리고 나서 저는 이 오류를 얻었습니다.

해결 단계:

  1. 활동 모니터로 이동한 후 이 DB에 대한 모든 연결을 삭제합니다.그 후 DB는 정말 오프라인이 되었고 모든 것이 괜찮습니다.

이것이 저를 위해 해결했습니다.

Use [dbName]
GO

EXEC sp_change_users_login 'Auto_Fix','Manoj', null, 'Manojspassword'
GO

저의 경우 SQL Server Service를 다시 시작하면 문제를 해결할 수 있었습니다.

SSMS에 로그인하고 있는 사용자와 별도의 시스템에서 Python 스크립트를 통해 대량 삽입 작업을 몇 번 실행한 후에도 비슷한 문제가 발생했습니다.

대량 삽입 작업 중에 Python 커널(또는 다른 연결)이 제대로 '정리'되지 않고 중단되면 SQL Server 측에서 사용자 자격 증명 및 잠금과 관련된 일종의 중단이 발생할 수 있습니다.서비스를 다시 시작하지도, 전체 기계를 다시 시작하지도 못했습니다.

제 경우 해결책은 DB를 오프라인과 온라인으로 전환하는 것이었습니다.SQL Server Management Studio에서 DB > tasks > take offline을 마우스 오른쪽 버튼으로 클릭한 다음 DB > tasks > bring online을 마우스 오른쪽 버튼으로 클릭합니다.

MS SQL 서버 서비스를 다시 시작하는 것으로 문제가 해결되었습니다.

저도 비슷한 문제가 있었습니다. 저는 필요한 이름을 가진 새 사용자를 만들어야 했습니다. 당신의 경우 다음과 같은 사용자를 만들어야 합니다.

USE [master]

GO

/****** Object:  Login [Manoj_2]    Script Date: 9/5/2019 12:16:14 PM ******/
CREATE LOGIN [Manoj_2] FROM WINDOWS WITH DEFAULT_DATABASE=[master],
DEFAULT_LANGUAGE=[us_english]

GO

ALTER SERVER ROLE [sysadmin] ADD MEMBER [Manoj_2]
GO

다음 문장을 실행합니다.

EXEC rdsadmin.dbo.rds_set_database_online dbname

저의 경우, 저는 거대한 DB를 복원하고 있었고, 즉시 그것에 연결하려고 했습니다.저는 30분 정도 기다렸고 이것을 작동시켰습니다.

enter image description here

저는 다음 단계를 수행했고 효과가 있었습니다.

SQL Server에 연결 ->보안 ->로그인 ->특정 사용자 검색 ->속성 ->서버 역할 ->"sys admin" 사용 확인란

방금 SQL Server(MSSQLSERVER)를 다시 시작했는데, 이때 SQL Server 에이전트(MSSQLSERVER)도 다시 시작되었습니다.이제 로그인을 통해 SSMS를 통해 SQL SERVER 2008 R2 데이터베이스 인스턴스에 액세스할 수 있습니다.

문제: 데이터베이스 [dbName]에 액세스할 수 없습니다. 데이터베이스를 확장할 때 오류가 발생했습니다.

솔루션:데이터베이스 연결 해제 > 드롭 옵션 mssql 데이터 폴더 아래 mdf 파일로 데이터베이스를 다시 연결합니다.

에 가다

보안 >> 로그인 >> 사용자 우클릭 >> 속성 >>

왼쪽 탐색에서 >> 사용자 매핑 >> 데이터베이스를 확인하고 "Database role membership for: <>"에서 문제가 발생한 사용자에 대해 "db_owner"를 확인합니다.

문제 해결...

언급URL : https://stackoverflow.com/questions/26200697/sql-server-login-success-but-the-database-dbname-is-not-accessible-object

반응형