データベースのコピーを家に持ち帰ったので、テストを行うことができます。ただし、ストアド プロシージャを実行しようとすると、ユーザーの既定のデータベースを開けません。ログインに失敗しました..
データベースでテーブルを開き、SQL Management Studioにログインして、デフォルトおよび他のデータベースにアクセスできることを確認しましたか?
おそらく破損したユーザーで、職場のSQL 2000から自宅の2005まででした
データベースのコピーを家に持ち帰ったので、テストを行うことができます。ただし、ストアド プロシージャを実行しようとすると、ユーザーの既定のデータベースを開けません。ログインに失敗しました..
データベースでテーブルを開き、SQL Management Studioにログインして、デフォルトおよび他のデータベースにアクセスできることを確認しましたか?
おそらく破損したユーザーで、職場のSQL 2000から自宅の2005まででした
編集:私のものは2005年から2005年まででした。これがあなたのケースでうまくいくかどうかはわかりません...
同様の問題がありました。私の場合、バックアップをデタッチまたは作成してからデータベースを再作成すると、ユーザーへの接続が失われます。私が使用してきたユーザーはまだログインの下にありますが、ログインに失敗します。
私の場合、ルートSQLサーバーのユーザーリストにあるユーザーではなく、データベース - >セキュリティ - >ユーザーの下のユーザーを削除することでログインできました。
次に、ルート ユーザー リストに移動し、データベース マッピングを再割り当てするか、存在しない場合はユーザーを作成します。
お役に立てれば。
これは暗闇でのショットなので、時間を無駄にするだけでしたらご容赦ください。
別の投稿者は、特定のユーザーがシステムの ID と特定のデータベースの ID を持っていると述べました。これは、同じログイン/ユーザー名の master.sys.syslogins と dbname.sys.users の sid を比較することで証明できます。master データベースの独自のコピーを持つ別の SQL サーバーからバックアップを復元する場合、sid は一致しません。
Sql Server 2005 では、システム テーブルを簡単に直接編集することはできません。これらの不一致を解決するために、修正に役立つストアド プロシージャが追加されました。
USE dbName GO
sp_change_users_login @Action='Report'
これにより、どのユーザーに dbName.sys.users エントリがあり、master.sys.syslogins エントリがないか、または名前が両方に存在するが sid が異なる場所が表示されます。
ユーザーが同期していないことが示されている場合、手順にはリンクを変更するモードもあります。
USE dbName GO sp_change_users_login 'Update_One'、'userNameInDbUsers'、'UserNameInLogins'
sid の不一致が問題でない場合は、Sql Server 2005 で非常に厄介なものも見てきました。GUI は特にバグが多いです。このような問題を修正するには、実際に syslogins エントリを削除する必要がありました (GUI または DROP LOGIN コマンドを使用)。
sp_change_users_login: http://msdn.microsoft.com/en-us/library/ms174378(SQL.90).aspx
ドロップ ログイン構文: http://msdn.microsoft.com/en-us/library/ms188012(SQL.90).aspx
私は同じ問題を抱えていたので、次のように修正しました。
C:\> sqlcmd -E -d master
1> ALTER LOGIN ***** WITH DEFAULT_DATABASE=master
2> GO
*****
ユーザー名はどこですか。
(ドメイン ユーザー名を使用している場合: [*****]
)
編集:
どこ*****
にある可能性があります:
username
ユーザーがローカルの場合[username]
ユーザーが実際のドメインに属している場合[domain\username]
ユーザーが別のドメインに属している場合 (テストされていません)8 つのデータベースを SQL Server 2000 から SQL Server 2005 に移動し、まったく別のコンピューターに移動しました。私は通常、ストアド プロシージャが何をしているかを知りたいので、少し掘り下げたところ、実際のコマンドはALTER USERであることがわかりました。
それは他のみんなが言っていたことです。SQL Server 2005 でデータベースをデタッチして再アタッチすると、ユーザーの関連付けが解除されます。SQL Server 2000 ではこのような動作は見られなかったので、この動作は非常に煩わしいと思います。
この問題を修正する T-SQL は次のようになります。
USE AdventureWorks;
ALTER USER Mary5 WITH NAME = Mary51;
GO
この MSDN の記事では、これについてもう少し詳しく説明しています。
この問題を解決しました。私のデフォルトのデータベースは AdventureWorks2008 だったので、管理者としてサーバーからログイン情報を削除することになりました。次に、次を実行してユーザーを再作成します
CREATE LOGIN [NT\mylogin] FROM WINDOWS WITH DEFAULT_DATABASE=[Master], DEFAULT_LANGUAGE=[us_english]
GO
ALTER LOGIN
SQL2005以降でのみ機能します。
2000年にユーザーのデフォルトデータベースを変更するには、
EXEC master.dbo.sp_defaultdb @loginname = N'BuiltIn\Administrators', @defdb = N'master'
ビルトイン\administratorsアカウントをデフォルトでアプリケーションデータベースに設定し、それがどういうわけかオフラインになり、ログインできなくなったときに、これは難しい方法でした。Management Studioを使用すると、マスターにログインするオプションを設定できますが、他の操作を実行する前に上記のコマンドを実行する必要があります。デフォルトのデータベースが利用できないというエラーが発生する可能性が低くなります。
前に述べたように、そのユーザー アカウントへのログイン マッピングは、移動中に関連付けが解除された可能性があります。または、期待していた資格情報を作成せずに移動した場合、最初にログインを作成する必要があります...
ただし、それがバックアップ セットであり、それを復元する場合、管理 UI を介してログインをユーザーに再度関連付ける方法 (私が知っている) はありません。代わりに、次を使用する必要があります。
exec sp_change_users_login update_one, 'user', 'login'
リンクを復元するためにそれを取得します。
私の理解では、ログインはサーバーに保存されますが、ユーザーはデータベースへのログインの割り当てです(間違っている場合は修正してください)。
したがって、データベースをデタッチ/アタッチしてログインを移動することはできません。解決策は、コピーされたデータベースに (有効な) ログインを接続するデータベース ユーザーを作成することです。