web-dev-qa-db-ja.com

SQL Server:ログインは成功しましたが、「データベース[dbName]にアクセスできません。(ObjectExplorer)」

Windows 8.1とSQL Server 2012を使用しています。

Windows認証でSQL SERVERにアクセスするためにOSアカウント「Manoj」を使用していました。最近、OSのユーザーアカウント「Manoj」を削除し、同じ名前「Manoj」で新しいアカウントを作成しました。

しかし、システムは新しいアカウントを「Manoj_2」として取得しました。この変更により、私が作成した古いデータベースにアクセスできなくなりました。

と言う

データベース[dbName]にアクセスできません。 (ObjectExplorer)

作成した以前のDBにアクセスしようとするたびに。

「Manoj_2」用にSQL Serverに新しいログインを作成し、デフォルトのDBは「master」として使用していました。しかし、それでも問題は解決しません。

DBをデタッチできません。 DBを拡張できません。

注:OSでは、「Manoj」アカウントの管理者権限があります。

誰か教えてください、何をすべきですか? OSまたはSQL Serverのいずれかを使用

38
Manoj Maximum

この場合、データベースに シングルユーザーモード で接続する必要があります。

SQL Serverをシングルユーザーモードで起動すると、コンピューターのローカルAdministratorsグループの任意のメンバーが、固定サーバーロールsysadminのメンバーとしてSQL Serverのインスタンスに接続できます。

ここで step-by-step instruction を見つけることができます。

要するに、Windows認証でSql Server Management Studioを起動した後、パラメーター-mでsqlserverインスタンスを起動する必要があります。

これで、sysadminになり、sysadminロールをユーザーに割り当て、終了して-mパラメーターを削除し、SQLサーバーを再起動します。

30
Max

問題は、データベース内のユーザーが「孤立」していることです。これは、ユーザーに関連付けられたログイン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'

このテキストは http://www.fileformat.info/tip/Microsoft/sql_Orphan_user.htm Dez-13-2017で取得されました

9
dellasavia

本当にばかげたソリューションですが、Google検索から誰かがここに来た場合に備えて、ここに追加します。

SQLサービスを再起動したところ、このエラーが発生していました。私の場合は、10分間待つだけで十分で、再び問題ありませんでした。これは、起動直後に発生するエラーのようです。

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

ユーザーを再度追加してみてください。Pleaeの外観も here です。

2
Avinash Babu

これが私をこの問題に導き、どのように修正したかです:

既存のユーザーを含む.bakファイルからデータベースを別のSQLサーバーインスタンスに復元しました。

同じ接続文字列を使用して、更新されたサーバーインスタンスを使用して、通常どおりアプリから復元されたデータベースにアクセスしようとしました。

エラーを受け取りました。

DBownerとしてユーザーを削除してから、まったく同じ資格情報、マッピング、ログインなどで再度追加しました。

復元後にユーザーを再読み込みした後、ユーザーとしてログインできました。

2
Rachael

これは私のためにそれを修正しました:

Use [dbName]
GO

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

に行く

セキュリティ>>ログイン>>ユーザーを右クリック>>プロパティ>>

左側のナビゲーションで>>ユーザーマッピング>>データベースを確認し、「<>のデータベースロールメンバーシップ」で、問題が発生しているユーザーの「db_owner」を確認します。

問題が解決しました...

1
ingpedrorr

SSMSにログインしているのとは別のマシンと別のユーザーでPythonスクリプトを使用して一括挿入のいくつかのジョブを実行した後、同様の問題が発生しました。

混乱を適切に「クリーンアップ」せずに一括挿入ジョブの途中でPythonカーネル(またはその他の接続)が中断された場合、ユーザー資格情報とロックに関連する何らかのハングが発生する可能性がありますSQL Server側で発生します。サービスもマシン全体も再起動しませんでした。

私の場合の解決策は、DBをオフラインおよびオンラインにすることでした。 SQL Server Management Studioでは、[DB]> [タスク]を右クリックしてオフラインにし、[DB]> [タスク]を右クリックしてオンラインにします。

1
Kocas

2人のユーザーがいました。1人はsysadminロールを持ち、もう1人(問題のあるユーザー)は持っていませんでした。

だから私は他のユーザーでログインし(新しいユーザーを作成することができます)、cksysボックス「sysadmin」をチェックしました:セキュリティ->ログイン-> SQLユーザー名を右クリック->プロパティ->サーバーロール->「sysadmin」チェックボックスにチェックマークが付いていることを確認します。 [OK]を押して、新しくチェックしたユーザーとの接続を試みます。

0
laviki

Sql Management Studioを使用している場合は、管理者として起動してください。

右クリック->管理者として実行

0
Juan Angel

私の場合、管理者の資格情報でSQL Server Management Studioを開き、データベースを右クリックして、「Go online」またはこのようなものを選択すると機能しました。

0
Samurai Jack

私の問題は、MS SQLサーバーサービスを再起動することで簡単に解決しました。

0
Shakti

私は同様の問題を抱えていたので、私にとって必要な名前で新しいユーザーを作成する必要がありました。あなたの場合、次のようなものを作成する必要があります:

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
0
Junior Grão

私の場合、問題を解決するにはSQL Serverサービスを再起動するだけで十分でした。

0
Tomas Kubes

私の場合、何かにアクセスするには、単に「管理者として実行」でアプリケーションを起動する必要がありました。そうでなければ、あなたが言及したエラーが表示されます。

0
Amalgovinus

このスクリプトを試してください。

 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
0
akhila vangala

問題:データベース[dbName]にアクセスできません。 (ObjectExplorer)データベースを展開するときにエラーが発生しました。

解決策:データベースの接続解除>オプションの削除mssqlデータフォルダーの下のmdfファイルを使用してデータベースを再度接続します

0
aimTheMoon