Windows 7 での SQL SERVER 2005 の問題

Windows 7 での SQL SERVER 2005 の問題

まず、他のサーバーからデータベースを復元しました。これで、すべてのストアド プロシージャの名前が [azamsharp].[usp_getlatestposts] になりました。[azamsharp] は元のサーバー上のユーザーだったのでプレフィックスが付けられていると思います。

現在、私のローカル マシンでは、これは実行されません。すべてのストアド プロシージャに [azamsharp] プレフィックスを付けたくありません。

また、ストアドプロシージャを右クリックしても、プロパティ オプションが表示されません。Windows 7 で SQL SERVER 2005 を実行しています。

アップデート:

奇妙なことに、自分のマシンから運用データベースにアクセスすると、プロパティ オプションが表示されます。つまり、Windows 7 のセキュリティに何か問題があるということです。

更新2:

孤立したユーザーのストアド プロシージャを実行すると、2 人のユーザー「azamsharp」と「dbo1」が表示されました。「azamsharp」ユーザーは修正しましたが、「dbo1」は修正されません。次のスクリプトを実行すると:

exec sp_change_users_login 'update_one', 'dbo1', 'dbo1' 次のエラーが発生します:

メッセージ 15291、レベル 16、状態 1、プロシージャ sp_change_users_login、行 131 このプロシージャを終了します。ログイン名 'dbo1' が存在しないか無効です。

答え1

おそらく孤立したユーザーがいるでしょう。マシンからサーバーにアクセスする場合、ドメイン資格情報には実稼働サーバーへの DBadmin としてのアクセス権がある可能性があります。孤立したユーザーを検出するには、次のコードを実行します。

Use TestDB
sp_change_users_login 'report'

出力には、TestDB データベースの sysusers システム テーブルとマスター データベースの sysxlogins システム テーブルのエントリが一致しないすべてのログインがリストされます。問題を解決するには、次の手順を実行します。

孤立したユーザーを解決する

Use TestDB
sp_change_users_login 'update_one', 'test', 'test' 

SELECT sid FROM dbo.sysusers WHERE name = 'test'
0x40FF09E48FBD3354B7833706FD2C61E4

use master
SELECT sid FROM dbo.sysxlogins WHERE name = 'test'
0x40FF09E48FBD3354B7833706FD2C61E4

これにより、サーバー ログイン "test" が TestDB データベース ユーザー "test" に再リンクされます。sp_change_users_login ストアド プロシージャは、"auto_fix" パラメーターを使用して、孤立したすべてのユーザーの更新を実行することもできますが、SQL Server はログインとユーザーを名前で一致させようとするため、この方法はお勧めできません。ほとんどの場合、この方法は機能しますが、間違ったログインがユーザーに関連付けられている場合、ユーザーに誤った権限が付与される可能性があります。

関連情報