データベースユーザーとサーバーログイン、およびそれらの間のマッピング


9

自宅にSQL Server 2008 R2 Express Editionのインスタンスがあり、Accessをフロントエンドとして使用してアプリケーションを開発するために使用しているクライアント構内のサーバーに別のインスタンスがあります。このアプリケーションには、接続文字列で使用できる5つの個別のログインがあります(ユーザーがいるアクセスグループに基づきます)。ホームインスタンスにはいくつかのデータベースがあります-一部はこのアプリケーションとは何の関係もありません

時間の経過とともに、各インスタンスのログインを手動で作成しました(おそらく別の順序で)。

私が作業しているデータベースのホームマシンからバックアップを(複数回)取得し、復元を使用してクライアントプレミスのインスタンスにロードし、バックアップセットのファイルを実際のファイルに移動することを望んでいます復元処理中にこのサーバーで使用されるファイル。私が理解していない部分は、データベースユーザーとログインの間のマッピングです。

名前の対応で十分だと思っていましたが、復元されたデータベースのユーザーがサーバーログインにマップされていないように見える問題を修正しようとして、Transact-SQLのALTER USERステートメント、特にWITH LOGINの使用への言及と「SID」に関する議論。

サーバーのログイン名にはインスタンスごとに異なるSIDがあると思いますが、インスタンス間のバックアップをロードした後、一連のALTER USER WITH LOGINコマンドを使用してマッピングを再接続する必要があるということですか?

回答:


9

Loginsまたは、サーバーログインがSQLサーバーレベルに存在し、database userそれがデータベースレベルにある。同じ名前である必要はありませんが、通常は同じです。インスタンスでは、対応するSQLサーバーログインがないと、データベースユーザー機能を適切に使用できません。

あなたがインスタンスを持っているとしましょう:あなたのコンピュータにサーバーログインuserAを持つinstanceA。あなたはこのマッピングすることができ、サーバのログインユーザA:データベース・ユーザーにユーザAのデータベースのためのDB_Aを。どちらもuserAという名前ですが、1つはサーバーで、もう1つはです。データベースユーザー:userADB_Aに存在します。DB_AをinstanceAから別のinstanceBにバックアップおよび復元すると、データベースユーザー:userAは移動しますが、サーバーログイン:userAは引き続きinstanceAに残ります。ログインをinstanceAからinstanceBに移動するには、次のコマンドを使用できます。logindatabase usersp_help_revlogin(クリックしてKBページをチェックアウト)

以前にinstanceBSQLサーバーログインuserAを作成していた場合DB_AがinstanceAからinstanceBに復元されると、SQLはこのログインをデータベースユーザーuserAにマップしようとします。これが失敗した場合は、sp_change_users_login(BOLリンクをクリック)プロシージャを使用して、壊れたマッピングを修正できます。これで問題が解決することを願っています。


ありがとう-私は概念が正しかったと思いますが、sp_help_revloginとsp_change_users_loginとnewと私は私を助けます。もっと探検します。おかげで
akc42
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.